Mam drzewo katalogów, które zawiera wiele małych plików i niewielką liczbę większych plików. Średni rozmiar pliku to około 1 kilobajt. W drzewie znajduje się 210158 plików i katalogów (liczba ta została uzyskana przez uruchomienie find | wc -l
).
Mały procent plików jest dodawany / usuwany / przepisywany kilka razy w tygodniu. Dotyczy to zarówno małych plików, jak i (niewielkiej liczby) większych plików.
Systemy plików, które wypróbowałem (ext4, btrfs) mają pewne problemy z pozycjonowaniem plików na dysku. Z biegiem czasu fizyczne położenie plików na dysku (nośniki obrotowe, a nie dysk półprzewodnikowy) stają się coraz bardziej losowe. Negatywną konsekwencją tej losowej dystrybucji jest spowolnienie systemu plików (na przykład: 4 razy wolniejsze niż nowy system plików).
Czy istnieje system plików Linux (lub metoda konserwacji systemu plików), która nie cierpi z powodu tego spadku wydajności i jest w stanie utrzymać stabilny profil wydajności na obracającym się nośniku? System plików może działać na Fuse, ale musi być niezawodny.
Odpowiedzi:
Wydajność
Napisałem mały test porównawczy ( źródło ), aby dowiedzieć się, jaki system plików działa najlepiej z setkami tysięcy małych plików:
usuń wszystkie pliki
synchronizuj i upuszczaj pamięć podręczną po każdym kroku
Wyniki (średni czas w sekundach, niższy = lepszy):
Wynik:
Podczas gdy Ext4 miał dobrą ogólną wydajność, ReiserFS był wyjątkowo szybki w czytaniu plików sekwencyjnych. Okazało się, że XFS działa wolno z wieloma małymi plikami - nie należy go używać w tym przypadku użycia.
Problem fragmentacji
Jedynym sposobem, aby uniemożliwić systemom plików dystrybuowanie plików na dysku, jest utrzymanie partycji tak dużej, jak naprawdę jej potrzebujesz, ale uważaj, aby nie zrobić zbyt małej partycji, aby zapobiec fragmentacji plików. Korzystanie z LVM może być bardzo pomocne.
Dalsza lektura
Arch Wiki ma kilka świetnych artykułów dotyczących wydajności systemu plików:
https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types
https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices
źródło
Korzystam z ReiserFS do tego zadania, jest on specjalnie zaprojektowany do obsługi wielu małych plików. Na stronie wiki funtoo jest łatwy do odczytania tekst .
źródło
Wydajność ext4 spada po 1-2 milionach plików w katalogu. Zobacz tę stronę http://genomewiki.ucsc.edu/index.php/File_system_performance stworzony przez Hirama Clawsona z UCSC
źródło
XFS jest znany z bardzo dobrych wyników w takich sytuacjach. Jest to część tego, dlaczego używamy go w mojej pracy dla naszych sklepów pocztowych (które mogą zawierać setki tysięcy plików w jednym katalogu). Ma lepszą odporność na uszkodzenia niż ReiserFS, jest w dużo szerszym zastosowaniu i jest ogólnie bardzo dojrzałym systemem plików.
Ponadto XFS obsługuje defragmentację online. Mimo że wykorzystuje technikę opóźnionego przydzielania, co skutkuje mniejszą fragmentacją (w porównaniu z innymi systemami plików) na początek.
źródło
syslogd
wzorzec.) Na przykład po mojej stronie w konfiguracji XFS ponad MD Właśnie zauważyłem, że usunięcie pliku 1,5 GB zajęło 4,75 minuty (!), Podczas gdy dysk był ograniczony limitem 100 transakcji / s przy szybkości zapisu powyżej 2 MB / s. Wpływa to również negatywnie na wydajność innych równoległych operacji we / wy na tym samym dysku, ponieważ dysk jest już maksymalnie wykorzystany. Nigdy nie widziałem czegoś takiego w innych systemach FS (ani nie był testowany w testach porównawczych).