Portál AbcLinuxu, 12. května 2025 12:42

Dotaz: samba a mnoho malých souborů = špatný výkon

18.3.2020 11:00 Hrabin
samba a mnoho malých souborů = špatný výkon
Přečteno: 482×
Odpovědět | Admin
Ahoj,

prosím o radu ohledně nízké propustnosti samby:

Debian 10, 2x SSD v raidu, samba 4.9.5, 1G síť, i5-9600KF.

Když kopíruju velké soubory, jede to OK (cca 100MB/s). Když kopíruju velké množství malých souborů (1GB v 50000 souborech), rychlost klesá pod 10MB/s. Když namountuju sambu přes cifs lokálně přímo na serveru, tak velké soubory valí přes 1GB/s ale malé opět řádově kolem těch 10MB/s :(

FS je EXT4, a lokálně ssd/ssd těch 50k souborů zkopíruju za cca 1.5s, ale přes sambu (mount lokálně) za cca 60s, jakto ?

Tento problém s výkonem jsem vygooglil ve více diskusích, ale nikde nebylo vyřešení nebo vysvětlení.

Má to nějaké řešení ?

Předem díky za odpovědi.

Jarda
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.3.2020 15:40 debian+
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Odpovědět | | Sbalit | Link | Blokovat | Admin
EXT4 - Linux cachuje. Skus si po takom skopirovany dat prikaz sync. Program sync, kym zapise vsetky subory ktore ma v cache na zapis. Pri cache to rozlozi zapis vtedy, ked je menej vytazeni. Preto sa caka pri odpajani media. Este pri cache dokonca napr. 2 zmeny nasledne zluci do 1 a zapise ako 1 zmenu (tj. usetri 1 zapis) napriklad.

Kazdy disk ma limit IO - trebars 500. Je jedno ci menis 1B alebo 50B vzdy je to menej ako 1 maximalny blok dat, takze to bude stat 1 zapis.

A teraz sa pozrieme, aky to ma dopad na rychlost. Takze na disk sa zapisuje po (max.) 1MB bloku (resp. najvecsi blok, ak cez siet). Ak zapisujem 10M-ove subory tak sa subor potrebujeme (zjednodusene) 1 zapis na nazov noveho suboru (name file) a 10 zapisovov dat. Co znaci ze rychlost zapisania suborov je najviac 500/11≃45 suborov. Ak mam ze subory su 1M, tak na zapis 1 nazov suboru a 1 blok vychadza, ze pri 500 IO zapise najviac 500/2=250 subor.

Co znaci ze rychlost na disk pri velkosti 1 subor 10MB rychlost 45*10M=450MB/s. A pri 1M suboroch to da 250*1=250MB/s.

Co dostaneme tabulku, ktora vysv:
size_one_file count/s speed/s
           1k 500 500k
          10k 500 5M
         100k 500 50M
           1M 250 250M
          10M  45 455M
         100M  ~5 495MB
Source na vypocet:
#include <stdio.h>
#include <stdlib.h>

#define IO 500
#define BLOCK_SIZE 1000000 /* 1MB */

typedef struct {
	double max_files_in_minute;
	double max_data_speed;
}writed_t;

writed_t writed_in_one_s(long int size_one_file)
{
	double count_blocks_of_file;
	writed_t ret;

	count_blocks_of_file=size_one_file/BLOCK_SIZE;
	ret.max_files_in_minute=IO/(count_blocks_of_file+1); /* plus name */
	ret.max_data_speed=ret.max_files_in_minute*size_one_file;
	
	return ret;
}

int main(void)
{
	writed_t speed;
	long int size_file;
	puts("size_one_file count/s speed/s");
	for(size_file=1000; size_file<1000000000; size_file*=10)
	{
		speed=writed_in_one_s(size_file);
		printf("%15ld %5.2f %5.2f\n", size_file, speed.max_files_in_minute, speed.max_data_speed);
	}
	
	return 0;
}
18.3.2020 16:54 debian+
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Opravene:
size_one_file count/s   speed
           1k  250.00   250k/s
          10k  250.00   2,5M/s
         100k  250.00    25M/s
           1M  250.00   250M/s
          10M   45.45 ~455MB/s
         100M    4.95 ~495MB/s
writed_t writed_in_one_s(long int size_one_file)
{
	double count_blocks_of_file;
	writed_t ret;

	if(size_one_file<=BLOCK_SIZE)
		count_blocks_of_file=1;
	else
		count_blocks_of_file=size_one_file/BLOCK_SIZE;

	ret.max_files_in_minute=((double)IO)/(count_blocks_of_file+1); /* plus name */
	ret.max_data_speed=ret.max_files_in_minute*size_one_file;
	
	return ret;
}
18.3.2020 18:33 bigBRAMBOR | skóre: 37
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
A jak ti do toho zapada rozdil v kopirovani lokalnim a lokalne moutnutym CIFS?
18.3.2020 23:09 debian+
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Odpoved mas v texto, co pisal:
Když kopíruju velké soubory, jede to OK (cca 100MB/s). Když kopíruju velké množství malých souborů (1GB v 50000 souborech), rychlost klesá pod 10MB/s.
19.3.2020 07:33 bigBRAMBOR | skóre: 37
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
jenze to se tyka kopirovani pres sit a sambu, nasleduje upresneni - viz cituji dotaz - lokálně ssd/ssd těch 50k souborů zkopíruju za cca 1.5s, ale přes sambu (mount lokálně) za cca 60s, jakto i to ukazuje ze problem je v Sambe a ne v rychlosti disku. Cely tvuj obr komentar se bohuzel mota kolem neco co tam neni.
19.3.2020 08:51 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Lokálně si to řeší VFS. Subjektivně se to zdá rychle, protože nečeká na to, až mu nějaká samba potvrdí že může jít na další operaci.

Mraky malých souborů jsou pro síťové souborové systémy největší mor.
18.3.2020 16:47 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil bych https://www.samba.org/samba/docs/old/Samba3-HOWTO/largefile.html a https://www.ixsystems.com/community/threads/slow-samba-when-moving-large-amount-of-files-locally.59557/#post-422010 tedy https://www.ixsystems.com/community/threads/slow-cifs-performance-small-files.42990/#post-281205
18.3.2020 18:26 PetebLazar | skóre: 34 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pohled na htop naznačuje, že limitovaný výkon této úlohy je pravděpodobně dán CPU režií samotné SMB(při mých testech cca 75%core). Kopírování takovéto droboti (50000x 20KB) mezi dvěma NVMe mi také "trvalo" cca 1,5sec.
18.3.2020 19:02 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
V jedné z těch linkovaných diskusí píšou, že samba při kontrole existence souboru neustále dokola prochází seznam souborů v adresářích, což je údajně pro velký počet souborů v adresáři pro její implementaci poměrně výpočetně náročně. Proto doporučují vypnout case insensitive a také všechny možné hrátky s názvy souborů. To by snad mělo náročnost výrazně snížit.
18.3.2020 21:57 PetebLazar | skóre: 34 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: samba a mnoho malých souborů = špatný výkon
To určitě stojí za prověření.

Také pokud je na jedné ze stran Windows, pak mezi významné brzdy může patřit i real-time antivirová ochrana. Při pokousech i když jsem přenášel soubory bez přípony, byla to na straně Windows největší CPU zátěž (Defender?).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.