Wskazówki dotyczące dostrajania wydajności dotyczące używania programu PowerShell z usługą Azure Data Lake Storage Gen1

W tym artykule opisano właściwości, które można dostosować, aby uzyskać lepszą wydajność przy użyciu programu PowerShell do pracy z Data Lake Storage Gen1.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Właściwość Domyślny Opis
PerFileThreadCount 10 Ten parametr umożliwia wybór liczby wątków równoległych na potrzeby przekazywania lub pobierania każdego pliku. Ta liczba reprezentuje maksymalne wątki, które można przydzielić na plik, ale w zależności od scenariusza może być mniejsza liczba wątków (na przykład jeśli przekazujesz plik 1 KB, otrzymasz jeden wątek, nawet jeśli poprosisz o 20 wątków).
ConcurrentFileCount 10 Ten parametr jest przeznaczony konkretnie na potrzeby przekazywania lub pobierania folderów. Określa liczbę współbieżnych plików, które można przekazać lub pobrać. Ta liczba reprezentuje maksymalną liczbę współbieżnych plików, które można przekazać lub pobrać jednocześnie, ale może być mniej współbieżności w zależności od scenariusza (na przykład w przypadku przekazywania dwóch plików otrzymujesz dwa współbieżne przekazywanie plików, nawet jeśli zostanie wyświetlony monit o 15).

Przykład:

To polecenie pobiera pliki z Data Lake Storage Gen1 do dysku lokalnego użytkownika przy użyciu 20 wątków na plik i 100 współbieżnych plików.

Export-AzDataLakeStoreItem -AccountName "Data Lake Storage Gen1 account name" `
    -PerFileThreadCount 20 `
	-ConcurrentFileCount 100 `
	-Path /Powershell/100GB `
	-Destination C:\Performance\ `
	-Force `
	-Recurse

Jak określić wartości właściwości

Kolejnym pytaniem może być określenie, jaką wartość należy podać dla właściwości związanych z wydajnością. Oto kilka użytecznych wskazówek.

  • Krok 1. Określanie łącznej liczby wątków — zacznij od obliczenia łącznej liczby wątków do użycia. Ogólnie rzecz biorąc, należy użyć sześciu wątków dla każdego rdzenia fizycznego.

    Total thread count = total physical cores * 6

    Przykład:

    Przy założeniu, że polecenia programu PowerShell są uruchamiane z poziomu maszyny wirtualnej D14 o 16 rdzeniach

    Total thread count = 16 cores * 6 = 96 threads

  • Krok 2. Obliczanie elementu PerFileThreadCount — obliczamy wartość perFileThreadCount na podstawie rozmiaru plików. W przypadku plików mniejszych niż 2,5 GB nie trzeba zmieniać tego parametru, ponieważ wartość domyślna 10 jest wystarczająca. W przypadku plików większych niż 2,5 GB należy użyć 10 wątków jako podstawy dla pierwszych 2,5 GB i dodać 1 wątek dla każdego dodatkowego 256 MB wzrostu rozmiaru pliku. Podczas kopiowania folderu zawierającego pliki o szerokim zakresie rozmiarów warto podzielić je na grupy złożone z plików o podobnym rozmiarze. Różne rozmiary plików mogą spowodować utratę optymalnej wydajności. Jeśli pogrupowanie plików o podobnym rozmiarze jest niemożliwe, wartość parametru PerFileThreadCount należy ustawić na podstawie największego rozmiaru pliku.

    PerFileThreadCount = 10 threads for the first 2.5 GB + 1 thread for each additional 256 MB increase in file size

    Przykład:

    Przy założeniu, że masz 100 plików z zakresu od 1 GB do 10 GB, użyjemy 10 GB jako największego rozmiaru pliku dla równania, co brzmi następująco.

    PerFileThreadCount = 10 + ((10 GB - 2.5 GB) / 256 MB) = 40 threads

  • Krok 3. Obliczenie wartości ConcurrentFilecount — użyj łącznej liczby wątków i wartości PerFileThreadCount, aby obliczyć wartość ConcurrentFileCount na podstawie następującego równania:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    Przykład:

    Na podstawie użytych przez nas przykładowych wartości

    96 = 40 * ConcurrentFileCount

    Wartość parametru ConcurrentFileCount wynosi zatem 2,4, co możemy zaokrąglić do 2.

Dalsze dostosowywanie

Ze względu na zakres rozmiarów plików, z jakimi można pracować, może być konieczne dalsze dostosowanie. Powyższe obliczenie działa dobrze, jeśli wszystkie lub większość plików jest większa i bliżej zakresu 10 GB. Jeśli natomiast istnieje wiele różnych rozmiarów plików, z czego wiele plików jest mniejszych, można zmniejszyć wartość parametru PerFileThreadCount. Dzięki zmniejszeniu wartości parametru PerFileThreadCount można zwiększyć wartość parametru ConcurrentFileCount. Jeśli więc zakładamy, że większość naszych plików jest mniejsza w zakresie 5 GB, możemy ponownie wykonać obliczenia:

PerFileThreadCount = 10 + ((5 GB - 2.5 GB) / 256 MB) = 20

Dlatego funkcja ConcurrentFileCount staje się 96/20, czyli 4,8, zaokrąglona do 4.

Te ustawienia można jeszcze bardziej dostosować, zwiększając lub zmniejszając wartość parametru PerFileThreadCount zależnie od rozkładu rozmiarów plików.

Ograniczenie

  • Liczba plików jest mniejsza niż wartość parametru ConcurrentFileCount: jeśli liczba przekazywanych plików jest mniejsza niż obliczona wartość parametru ConcurrentFileCount, należy zmniejszyć wartość parametru ConcurrentFileCount tak, aby była równa liczbie plików. Przy użyciu pozostałych wątków można zwiększyć wartość parametru PerFileThreadCount.

  • Zbyt wiele wątków: jeśli liczba wątków zostanie nadmiernie zwiększona bez zwiększenia rozmiaru klastra, istnieje ryzyko obniżonej wydajności. Podczas przełączania kontekstu na procesorze mogą wystąpić problemy z rywalizacją o zasoby.

  • Niewystarczająca współbieżność: jeśli współbieżność nie jest wystarczająca, to klaster może być za mały. Możesz zwiększyć liczbę węzłów w klastrze, co zapewnia większą współbieżność.

  • Błędy ograniczania przepływności: błędy ograniczania przepływności mogą wystąpić wówczas, gdy współbieżność jest zbyt wysoka. W przypadku błędów ograniczania przepływności należy albo zmniejszyć współbieżność, albo skontaktować się z nami.

Następne kroki