Od prawie 10 lat prowadzę systemy plików XFS jako partycje danych / wzrostu na różnych serwerach Linux.
Zauważyłem dziwne zjawisko na ostatnich serwerach CentOS / RHEL z wersją 6.2+.
Stabilne użycie systemu plików stało się bardzo zmienne po przejściu na nowszą wersję systemu operacyjnego z wersji EL6.0 i EL6.1. Systemy początkowo zainstalowane z EL6.2 + wykazują takie samo zachowanie; pokazujące dzikie wahania w wykorzystaniu dysku na partycjach XFS (patrz niebieska linia na wykresie poniżej).
Przed i po. Aktualizacja z 6.1 do 6.2 nastąpiła w sobotę.
Wykres wykorzystania dysku w tym samym systemie w poprzednim kwartale pokazuje fluktuacje w ciągu ostatniego tygodnia.
Zacząłem sprawdzać systemy plików pod kątem dużych plików i niekontrolowanych procesów (być może plików dziennika?). Odkryłem, że moje największe pliki zgłaszały różne wartości od du
i ls
. Praca du
z --apparent-size
przełącznikiem i bez niego ilustruje różnicę.
# du -skh SOD0005.TXT
29G SOD0005.TXT
# du -skh --apparent-size SOD0005.TXT
21G SOD0005.TXT
Szybkie sprawdzenie za pomocą narzędzia ncdu w całym systemie plików przyniosło:
Total disk usage: 436.8GiB Apparent size: 365.2GiB Items: 863258
System plików jest pełen rzadkich plików , z prawie 70 GB utraconego miejsca w porównaniu z poprzednią wersją systemu operacyjnego / jądra!
Przeglądałem Bugzillę Red Hat i zmieniłem dzienniki, aby zobaczyć, czy były jakieś raporty o tym samym zachowaniu lub nowe ogłoszenia dotyczące XFS.
Nada.
Podczas aktualizacji przeszedłem z wersji jądra 2.6.32-131.17.1.el6 na 2.6.32-220.23.1.el6 ; brak zmiany w mniejszym numerze wersji.
Sprawdziłem fragmentację pliku za pomocą filefrag
narzędzia. Niektóre z największych plików na partycji XFS miały tysiące rozmiarów. Uruchamianie z defragmentacją online przy xfs_fsr -v
wolnym okresie aktywności pomogło tymczasowo zmniejszyć zużycie dysku (patrz środa na pierwszym wykresie powyżej). Jednak użycie gwałtownie wzrosło, gdy tylko wznowiono ciężką aktywność systemu.
Co tu się dzieje?
Odpowiedzi:
Prześledziłem ten problem z powrotem do dyskusji o zatwierdzeniu do drzewa źródłowego XFS z grudnia 2010 r. Łatka została wprowadzona w jądrze 2.6.38 (i oczywiście później przeniesiona do niektórych popularnych jąder dystrybucji Linuksa).
Obserwowane wahania użycia dysku są wynikiem nowej funkcji; XFS Dynamiczna spekulacyjna wstępna alokacja EOF .
Jest to krok w kierunku zmniejszenia fragmentacji plików podczas zapisywania strumieniowego poprzez spekulacyjne przydzielanie miejsca wraz ze wzrostem rozmiarów plików. Ilość wstępnie przydzielonego miejsca na plik jest dynamiczna i jest przede wszystkim funkcją wolnego miejsca dostępnego w systemie plików (aby całkowicie wykluczyć brak miejsca).
Zgodnie z tym harmonogramem:
Jest to interesujący dodatek do systemu plików, ponieważ może pomóc w przypadku niektórych fragmentów plików, z którymi mam do czynienia.
Dodatkową przestrzeń można odzyskać tymczasowo, zwalniając pamięć podręczną, dentries i i-węzły za pomocą:
Tę funkcję można całkowicie wyłączyć, definiując
allocsize
wartość podczas montowania systemu plików. Domyślna wartość dla XFS toallocsize=64k
.Wpływ tej zmiany będzie prawdopodobnie odczuwalny przez systemy monitorowania / progowania (w taki sposób ją złapałem), ale wpłynął również na systemy baz danych i może powodować nieprzewidywalne lub niepożądane wyniki dla maszyn wirtualnych z ograniczoną alokacją zasobów i macierzy pamięci masowej (będą używać więcej miejsca niż się spodziewasz).
Podsumowując, zaskoczyło mnie to, ponieważ nie było wyraźnego ogłoszenia zmiany systemu plików na poziomie dystrybucji ani nawet w monitorowaniu listy mailingowej XFS .
Edycja :
Wydajność na woluminach XFS dzięki tej funkcji została znacznie poprawiona. Widzę spójne fragmentowanie <1% w tomach, które wcześniej wykazywały fragmentację do 50%. Wydajność zapisu rośnie na całym świecie!
Statystyki z tego samego zestawu danych, porównujące starszą wersję XFS z wersją w EL6.3.
Stary:
Nowy:
źródło
xfs_fsr
przywróceniu do około 35 GB. Muszę na to