Práca s veľkým počtom súborov¶
Výkonné výpočtové clustre zvyčajne používajú paralelné súborové systémy optimalizované na vysokú priepustnosť dát. Tieto súborové systémy poskytujú veľmi vysokú priepustnosť pri čítaní a zapisovaní veľkých datasetov, ale môžu mať horší výkon, ak úlohy generujú veľmi veľké množstvo malých súborov.
Operácie, ako sú otváranie, vypisovanie alebo odstraňovanie tisícov súborov, vytvárajú veľké zaťaženie metadátových serverov súborového systému. Výsledkom je, že úlohy, ktoré vytvárajú veľké množstvo malých súborov, môžu mať výrazne nižší výkon a môžu negatívne ovplyvniť systém aj ostatných používateľov.
Preťaženie systému
Pracovné postupy, ktoré generujú milióny malých súborov, môžu preťažiť metadátové servery súborového systému a výrazne znížiť výkon vašich úloh aj úloh ostatných používateľov systému.
Prečo je veľké množstvo malých súborov problematické¶
Každý súbor uložený v súborovom systéme vyžaduje operácie s metadátami, ako sú:
- vytvorenie súboru
- vyhľadávanie súboru
- kontrola práv
- aktualizácia adresárov
Keď sa vytvoria milióny malých súborov, tieto metadátové operácie sa môžu stať dominantnou nákladovou položkou pracovného postupu namiesto samotného prenosu dát.
Typické príznaky zahŕňajú:
- pomalé príkazy
lsalebodu - dlhší čas spúšťania úloh
- dlhý čas odstraňovania súborov
- znížený výkon I/O
Bežné situácie, ktoré produkujú veľa súborov¶
Pracovné postupy, ktoré často generujú veľké množstvo súborov, zahŕňajú:
- parametrické skenovanie produkujúce jeden výstupný súbor na úlohu
- trajektórie molekulovej dynamiky zapisované ako veľké množstvo malých snapshotov
- logovacie systémy produkujúce jeden súbor na proces
- prechodné dočasné súbory vytvorené dátovými pipeline
Odporúčané postupy¶
Agregujte súbory, ak je to možné¶
Namiesto vytvárania tisícov jednotlivých súborov kombinujte výstupy do väčších kontajnerov.
Príkladom je kompresia adresára do jedného archívu:
tar czf results_archive.tar.gz results_directory/
Agregovanie súborov znižuje počet metadátových operácií a môže zlepšiť výkon súborového systému.
Archivácia
Archivácia adresárov do jedného súboru môže výrazne znížiť metadátové zaťaženie súborového systému a zlepšiť efektívnosť prenosu.
Používajte kontajnery na úrovni aplikácie¶
Mnoho vedeckých aplikácií podporuje ukladanie viacerých výstupov do jediného súborového formátu, ako sú:
- HDF5
- NetCDF
- databázy SQLite
Kontajnery
Kontajnerové formáty umožňujú uložiť veľké množstvo datasetov do jedného súboru, čím sa zníži zbytočné zaťaženie súborového systému a zvýši efektívnosť I/O.
Ukladajte dáta do scratch-u počas behu úloh¶
Pracovné postupy generujúce veľa dočasných súborov by mali bežať na scratch úložisku, ak je to možné. Scratch súborové systémy sú optimalizované na vysoké I/O zaťaženie a prácu s dočasnými dátami. Po dokončení úlohy by sa dôležité výsledky mali archivovať alebo presunúť do perzistentného úložiska.
Použitie /scratch
Používajte /scratch na prechodné súbory vytvorené počas
behu úlohy. Na perzistentné úložiska presuňte iba konečné
výsledky.
Vyhnite sa extrémne veľkým adresárom¶
Adresáre obsahujúce veľmi veľké množstvo položiek môžu mať zhoršenú odozvu pri prístupe.
Namiesto ukladania všetkých súborov do jedného adresára ich usporiadajte do hierarchickej štruktúry. Príklad:
data/
run_01/
run_02/
run_03/
Note
Rozdelenie súborov do viacerých adresárov môže znížiť zaťaženie pri vyhľadávaní a zlepšiť odozvu súborového systému.
Odstraňujte dočasné súbory¶
Dočasné súbory by sa mali odstraňovať, keď už nie sú potrebné. Zabránite tak hromadeniu nepotrebných dát a pomôžete udržiavať dobrý výkon súborového systému.
Odstraňovanie súborov
Pravidelné čistenie dočasných súborov pomáha udržiavať scratch úložisko dostupné pre všetkých používateľov.
Diagnostika problémov s počtom súborov¶
Na zistenie počtu súborov v adresári môžete spustiť:
find <directory> -type f | wc -l
Na preskúmanie využitia disku vrátane podadresárov použite:
du -sh *
Nástroje ako dust môžu tiež pomôcť vizualizovať využitie
súborových systémov vo veľkých adresárových stromoch.
Archivácia veľkých súborových kolekcií¶
Pri prenášaní alebo ukladaní adresárov obsahujúcich veľké množstvo súborov je často efektívnejšie archivovať ich do jedného súboru pred presunom medzi systémami.
Príklad:
tar czf dataset.tar.gz dataset_directory/
Tým sa znižuje zbytočné zaťaženie pri prenose a zjednodušuje sa správa dát.