Udostępnij przez


Optymalizowanie wydajności udziału plików podczas uzyskiwania dostępu z klientów Linuksa do dużych katalogów.

Ten artykuł zawiera zalecenia dotyczące pracy z katalogami, które zawierają dużą liczbę plików. Zazwyczaj dobrym rozwiązaniem jest zmniejszenie liczby plików w jednym katalogu przez rozłożenie plików na wiele katalogów. Istnieją jednak sytuacje, w których nie można uniknąć dużych katalogów. Podczas pracy z dużymi katalogami udostępnianymi plikami na platformie Azure zamontowanymi na klientach z systemem Linux, należy wziąć pod uwagę następujące sugestie.

Odnosi się do

Model zarządzania Model rozliczania Poziom mediów Redundancja SMB NFS
Microsoft.Storage Wersja 2 została przygotowana SSD klasy premium Lokalna sieć (LRS) Nie. Tak
Microsoft.Storage Wersja 2 została przygotowana SSD klasy premium Strefa (ZRS) Nie. Tak
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Lokalna sieć (LRS) Nie. Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Strefa (ZRS) Nie. Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Geo (GRS) Nie. Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Strefa geograficzna (GZRS) Nie. Nie.
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Lokalna sieć (LRS) Nie. Tak
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Strefa (ZRS) Nie. Tak
Microsoft.Storage Płać według zużycia HDD (standardowa) Lokalna sieć (LRS) Nie. Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa (ZRS) Nie. Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Geo (GRS) Nie. Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa geograficzna (GZRS) Nie. Nie.

Zwiększanie liczby zasobników skrótów

Całkowita ilość pamięci RAM obecnej w systemie wyliczenia wpływa na wewnętrzną pracę protokołów systemu plików, takich jak NFS i SMB. Nawet jeśli użytkownicy nie mają dużego użycia pamięci, ilość dostępnej pamięci wpływa na liczbę zasobników skrótów inode, które ma wpływ na/poprawia wydajność wyliczania dla dużych katalogów. Można zmodyfikować liczbę zasobników skrótów inode, aby zmniejszyć kolizje skrótów, które mogą wystąpić podczas dużych obciążeń związanych z wyliczaniem.

Aby zwiększyć liczbę zasobników skrótów inode, zmodyfikuj ustawienia konfiguracji rozruchu:

  1. Za pomocą edytora tekstów edytuj /etc/default/grub plik.

    sudo vim /etc/default/grub
    
  2. Dodaj następujący tekst do pliku /etc/default/grub. To polecenie ustawia 128 MB jako rozmiar tabeli skrótów inode, zwiększając zużycie pamięci systemowej o maksymalnie 128 MB.

    GRUB_CMDLINE_LINUX="ihash_entries=16777216"
    

    Jeśli GRUB_CMDLINE_LINUX już istnieje, dodaj ihash_entries=16777216 oddzieloną spacją, w następujący sposób:

    GRUB_CMDLINE_LINUX="<previous commands> ihash_entries=16777216"
    
  3. Aby zastosować zmiany, uruchom:

    sudo update-grub2
    
  4. Uruchom ponownie system:

    sudo reboot
    
  5. Aby sprawdzić, czy zmiany są skuteczne po ponownym uruchomieniu, sprawdź polecenia wiersza polecenia jądra:

    cat /proc/cmdline
    

    Jeśli ihash_entries jest widoczny, system zastosował dane ustawienia, a wydajność wyliczania powinna znacznie się poprawić.

    Możesz również sprawdzić dane wyjściowe dmesg, aby sprawdzić, czy zastosowano wiersz polecenia jądra:

    dmesg | grep "Inode-cache hash table"
    Inode-cache hash table entries: 16777216 (order: 15, 134217728 bytes, linear)
    

Poniższe opcje montowania są specyficzne dla wyliczenia i mogą zmniejszyć opóźnienie podczas pracy z dużymi katalogami.

actimeo

Opcja actimeo instalacji określa czas (w sekundach), który klient buforuje atrybuty pliku lub katalogu, zanim zażąda informacji o atrybutach z serwera. W tym okresie zmiany, które występują na serwerze, pozostają niewykryte, dopóki klient ponownie nie sprawdzi serwera. W przypadku klientów SMB domyślny limit czasu pamięci podręcznej atrybutu jest ustawiony na 1 sekundę.

Na klientach NFS określenie actimeo ustawia wszystkie wartości dla acregmin, acregmax, acdirmin i acdirmax na tę samą wartość. Jeśli actimeo nie zostanie określony, klient używa wartości domyślnych dla każdej z tych opcji.

Zalecamy ustawienie actimeo między 30 a 60 sekundami podczas pracy z dużymi katalogami. Ustawienie wartości w tym zakresie sprawia, że atrybuty pozostają prawidłowe przez dłuższy czas w pamięci podręcznej atrybutów klienta, co umożliwia operacjom pobieranie atrybutów plików z pamięci podręcznej zamiast pobierania ich za pośrednictwem przewodu. Może to zmniejszyć opóźnienie w sytuacjach, gdy buforowane atrybuty wygasają, gdy operacja jest nadal uruchomiona.

Poniższy wykres porównuje całkowity czas potrzebny na zakończenie różnych operacji z domyślnym montowaniem, w porównaniu do ustawienia wartości actimeo na 30 dla obciążenia, które ma 1 milion plików w jednym katalogu. W naszych testach całkowity czas ukończenia niektórych operacji skrócił się nawet o 77%. Wszystkie operacje zostały wykonane z ls bez aliasów.

Wykres porównujący czas zakończenia różnych operacji przy domyślnym montowaniu w porównaniu z ustawieniem wartości actimeo na 30 dla obciążenia z 1 miliona plików.

NFS nconnect

NFS nconnect to opcja instalacji po stronie klienta dla udziałów plików NFS, która umożliwia korzystanie z wielu połączeń TCP między klientem a udziałem plików NFS. Zalecamy optymalne ustawienie, nconnect=4 aby zmniejszyć opóźnienia i zwiększyć wydajność. Funkcja nconnect może być szczególnie przydatna w przypadku obciążeń używających asynchronicznego lub synchronicznego I/O z wielu wątków. Dowiedz się więcej.

Polecenia i operacje

Sposób określenia poleceń i operacji może również mieć wpływ na wydajność. Wyświetlenie listy wszystkich plików w dużym katalogu przy użyciu ls polecenia jest dobrym przykładem.

Uwaga / Notatka

Niektóre operacje, takie jak rekursywne ls, findi du wymagają zarówno nazw plików, jak i atrybutów plików, więc łączą wyliczenia katalogów (w celu pobrania wpisów) ze statystyką dla każdego wpisu (aby uzyskać atrybuty). Zalecamy użycie wyższej wartości dla actimeo w punktach instalacji, w których prawdopodobnie uruchamiasz takie polecenia.

Użyj ls bez aliasów

W niektórych dystrybucjach Linuksa powłoka automatycznie ustawia domyślne opcje dla polecenia ls, takie jak ls --color=auto. Spowoduje to zmianę sposobu ls działania za pośrednictwem przewodu i dodanie większej ls liczby operacji do wykonania. Aby uniknąć obniżenia wydajności, zalecamy stosowanie niealializowanych ls. Możesz to zrobić na jeden z trzech sposobów:

  • Jako tymczasowe obejście, które wpływa tylko na bieżącą sesję, możesz usunąć alias używając polecenia unalias ls.

  • Aby wprowadzić trwałą zmianę, należy edytować alias ls w pliku bashrc/bash_aliases użytkownika. W Ubuntu edytuj ~/.bashrc , aby usunąć alias dla ls.

  • Zamiast wywoływać ls, możesz bezpośrednio wywołać plik binarny ls, na przykład /usr/bin/ls. Dzięki temu można używać ls bez żadnych opcji, które mogą znajdować się w aliasie. Lokalizację pliku binarnego można znaleźć, uruchamiając polecenie which ls.

Zapobiegnij sortowaniu danych wyjściowych ls

W przypadku używania ls z innymi poleceniami można zwiększyć wydajność, uniemożliwiając ls sortowanie danych wyjściowych w sytuacjach, w których nie dbasz o kolejność zwracania ls plików. Sortowanie danych wyjściowych zwiększa znaczne obciążenie.

Zamiast uruchamiać ls -l | wc -l w celu uzyskania całkowitej liczby plików, możesz użyć opcji -f lub -U z ls, aby zapobiec sortowaniu danych wyjściowych. Różnica polega na tym, że -f pokazuje również ukryte pliki i -U nie.

Na przykład, jeśli bezpośrednio uruchamiasz plik binarny ls w Ubuntu, powinieneś używać polecenia /usr/bin/ls -1f | wc -l lub /usr/bin/ls -1U | wc -l.

Poniższy wykres porównuje czas potrzebny na wyprowadzenie wyników przy użyciu niezmienionych, nieposortowanych ls w porównaniu do posortowanych ls.

Wykres porównujący łączny czas w sekundach, aby ukończyć posortowaną operację ls w porównaniu z niesortowaną.

Operacje kopiowania i tworzenia kopii zapasowych plików

Podczas kopiowania danych z udostępnionego zasobu lub tworzenia kopii zapasowej z udostępnionych zasobów do innej lokalizacji, dla optymalnej wydajności zalecamy użycie migawki zasobu jako źródła, zamiast aktywnie używanego udziału plików z aktywnym dostępem do danych. Aplikacje do tworzenia kopii zapasowych powinny uruchamiać polecenia bezpośrednio na migawce. Aby uzyskać więcej informacji, zobacz Używanie migawek udziałów w usłudze Azure Files.

Zalecenia na poziomie aplikacji

Podczas tworzenia aplikacji korzystających z dużych katalogów postępuj zgodnie z tymi zaleceniami.

  • Pomiń atrybuty pliku. Jeśli aplikacja potrzebuje tylko nazwy pliku, a nie atrybutów pliku, takich jak typ pliku lub czas ostatniej modyfikacji, można użyć wielu wywołań do wywołań systemowych, takich jak getdents64 z dobrym rozmiarem buforu, aby uzyskać wpisy w określonym katalogu bez typu pliku, co przyspieszy operację, unikając dodatkowych operacji, które nie są potrzebne.

  • Przeplataj wywołania funkcji stat. Jeśli aplikacja potrzebuje atrybutów i nazwy pliku, zalecamy przeplatanie wywołań funkcji stat z getdents64 zamiast pobierania wszystkich wpisów do końca pliku za pomocą getdents64, a następnie wykonywanie wywołania funkcji statx dla wszystkich zwracanych wpisów. Przeplatanie wywołań statystyk powoduje, że klient zażąda jednocześnie zarówno pliku, jak i jego atrybutów, zmniejszając liczbę wywołań do serwera. W połączeniu z wysoką actimeo wartością przeplatanie wywołań statystyk może znacznie poprawić wydajność. Na przykład, zamiast [ getdents64, getdents64, ... , getdents64, statx (entry1), ... , statx(n) ], umieść wywołania statx po każdym getdents64 tak jak tutaj: [ getdents64, (statx, statx, ... , statx), getdents64, (statx, statx, ... , statx), ... ].

  • Zwiększ głębokość I/O. Jeśli to możliwe, sugerujemy skonfigurowanie nconnect wartości innej niż zero (większej niż 1) i rozproszenie operacji między wieloma wątkami lub użycie asynchronicznego I/O. Umożliwia to asynchronicznym operacjom korzystanie z wielu równoczesnych połączeń z udziałem plików.

  • Wymuś użycie pamięci podręcznej. Jeśli aplikacja wykonuje zapytanie dotyczące atrybutów pliku w udziale plików zainstalowanym tylko przez jednego klienta, użyj wywołania systemu statx z flagą AT_STATX_DONT_SYNC . Ta flaga gwarantuje, że buforowane atrybuty są pobierane z pamięci podręcznej bez synchronizacji z serwerem, co pozwala uniknąć dodatkowych rund sieciowych w celu uzyskania najnowszych danych.

Zobacz także