Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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) |
|
|
| Microsoft.Storage | Wersja 2 została przygotowana | SSD klasy premium | Strefa (ZRS) |
|
|
| Microsoft.Storage | Wersja 2 została przygotowana | HDD (standardowa) | Lokalna sieć (LRS) |
|
|
| Microsoft.Storage | Wersja 2 została przygotowana | HDD (standardowa) | Strefa (ZRS) |
|
|
| Microsoft.Storage | Wersja 2 została przygotowana | HDD (standardowa) | Geo (GRS) |
|
|
| Microsoft.Storage | Wersja 2 została przygotowana | HDD (standardowa) | Strefa geograficzna (GZRS) |
|
|
| Microsoft.Storage | Zaprovisionowana wersja 1 | SSD klasy premium | Lokalna sieć (LRS) |
|
|
| Microsoft.Storage | Zaprovisionowana wersja 1 | SSD klasy premium | Strefa (ZRS) |
|
|
| Microsoft.Storage | Płać według zużycia | HDD (standardowa) | Lokalna sieć (LRS) |
|
|
| Microsoft.Storage | Płać według zużycia | HDD (standardowa) | Strefa (ZRS) |
|
|
| Microsoft.Storage | Płać według zużycia | HDD (standardowa) | Geo (GRS) |
|
|
| Microsoft.Storage | Płać według zużycia | HDD (standardowa) | Strefa geograficzna (GZRS) |
|
|
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:
Za pomocą edytora tekstów edytuj
/etc/default/grubplik.sudo vim /etc/default/grubDodaj 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_LINUXjuż istnieje, dodajihash_entries=16777216oddzieloną spacją, w następujący sposób:GRUB_CMDLINE_LINUX="<previous commands> ihash_entries=16777216"Aby zastosować zmiany, uruchom:
sudo update-grub2Uruchom ponownie system:
sudo rebootAby sprawdzić, czy zmiany są skuteczne po ponownym uruchomieniu, sprawdź polecenia wiersza polecenia jądra:
cat /proc/cmdlineJeśli
ihash_entriesjest 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)
Zalecane opcje instalacji
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.
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
lsw plikubashrc/bash_aliasesużytkownika. W Ubuntu edytuj~/.bashrc, aby usunąć alias dlals.Zamiast wywoływać
ls, możesz bezpośrednio wywołać plik binarnyls, na przykład/usr/bin/ls. Dzięki temu można używaćlsbez żadnych opcji, które mogą znajdować się w aliasie. Lokalizację pliku binarnego można znaleźć, uruchamiając poleceniewhich 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.
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
getdents64z 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
getdents64zamiast 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ąactimeowartoś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żdymgetdents64tak jak tutaj:[ getdents64, (statx, statx, ... , statx), getdents64, (statx, statx, ... , statx), ... ].Zwiększ głębokość I/O. Jeśli to możliwe, sugerujemy skonfigurowanie
nconnectwartoś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.