Wydajność EXT4 stała się naprawdę zła w systemie z dużą ilością małych plików

10

Mam małe urządzenie osadzone, które ma tylko 128 MB pamięci RAM

do tego urządzenia podłączony jest dysk twardy USB2 o pojemności 2 TB

Do niedawna byłem bardzo zadowolony z wydajności urządzenia, kiedy albo liczba plików przekroczyła próg pojemności dysku przekroczyła próg (nie jestem pewien który)

na dysku znajduje się wiele małych plików, ze względu na charakter pisania, pliki aplikacji są zorganizowane w bardzo zrównoważony sposób - żaden katalog węzłów liści nie ma więcej niż 200 plików, a jest ich nieco ponad 800 000.

Mam nadzieję, że uda mi się znaleźć coś do zbadania. Wydajność dysku znacznie spadła, urządzenie ładowało się całkiem dobrze, a potem nagle spadła jak skała.

Moje założenie jest takie, że struktura organizacyjna, którą wybrałem na dysku dla moich plików, w jakiś sposób naruszyła zdolność buforów i-węzłów do pozostania spakowanym.

w ramach eksperymentu zdemontowałem dysk (opróżnianie pamięci podręcznej, weryfikacja za darmo). Następnie z wiersza poleceń przeszedłem głęboko do struktury katalogów. Wszyscy powiedzieli, że w tym katalogu (i jego dzieciach) znajduje się tylko około 3200 plików, a w tym momencie „wolne” wykazało> 117 MB wolnej pamięci

w tym momencie wpisałem polecenie „znajdź”, a następnie „wolny”

„find” pokazało około 3000 plików, ale zużycie pamięci wzrosło z ~ 117 MB do ~ 2 MB

Rozumiem równowagę pamięci podręcznej i wolnej pamięci oraz to, jak jądro uważa pustą stronę za złą stronę - jednak 115 MB buforowanej zawartości z katalogu 3000 plików wskazuje na poważną lukę w moim rozumieniu. Mam nadzieję, że ktoś pomoże mi zrozumieć, co się dzieje

czy mogę założyć, że zrównoważone drzewo jest sposobem na posiadanie dużej liczby plików?

oblepiony
źródło

Odpowiedzi:

9

Bardzo dobry opis problemu.

Na podstawie tego, co powiedziałeś, myślę, że widzisz wysokie zużycie płyty. Dobrym eksperyment byłoby uruchomić cat /proc/meminfoi cat /proc/slabinfoponad 3 sekundowym opóźnieniem, gdy idziesz w głąb hierarchii fs i odkryć 3000 plików. Zasadniczo dzieje się tak, że jądro będzie przechodzić przez strukturę fs i skanuje poszczególne pliki i ich i-węzły, a wszystkie są przechowywane w pamięci. Jeśli zaznaczysz /proc/slabinfo, zobaczysz obiekt o nazwie, ext4_inode_cachektóry mówi, ile pamięci zajmie każdy i-węzeł. Pomnóż to przez liczbę obiektów (obj_size * no_obj), a otrzymasz ilość pamięci używanej przez obiekt. Im głębiej wejdziesz w hierarchię fs, tym więcej pamięci zostanie zużyte, dopóki system nie dotknie wysokiego znaku wodnego strefy pamięci. W tym momencie jądro rozpocznie odzyskiwanie.

Jeśli zagłębisz się w meminfo i slabinfo, otrzymasz szczegóły, których szukasz. Jeśli chcesz, żebym spojrzał, wklej go;)

Soham Chakraborty
źródło