Pomiar wydajności i IOPS dysków twardych i pamięci w systemie Windows

Jednym z głównych mierników służących do oceny wydajności istniejącego lub planowanego systemu pamięci masowej jest IOPS (Wejście/ Wyjście Operacje Per Po drugie - liczba operacji wejścia / wyjścia). Mówiąc najprościej, IOPS to liczba bloków, które można odczytać lub zapisać na nośniku lub w systemie plików na jednostkę czasu. Im wyższa liczba, tym większa wydajność tego podsystemu dyskowego (szczerze mówiąc, samą wartość IOPS należy rozpatrywać w połączeniu z innymi cechami systemów pamięci masowej, takimi jak średnie opóźnienie, przepustowość itp.).

W tym artykule przyjrzymy się kilku sposobom pomiaru wydajności systemu pamięci masowej używanego w IOPS w systemie Windows (lokalny dysk twardy, dysk SSD, folder sieciowy SMB, wolumin CSV lub jednostka LUN w pamięci masowej w sieci SAN).

Treść

  • Liczniki wydajności podsystemu dyskowego Windows
  • Testowanie IOPS w systemie Windows za pomocą DiskSpd
  • Jak uzyskać wydajność IOPS i podsystemu dyskowego za pomocą PowerShell?

Liczniki wydajności podsystemu dyskowego Windows

Możesz ocenić bieżące obciążenie podsystemu dyskowego za pomocą wbudowanych liczników wydajności systemu Windows Wydajność Monitoruj. Aby zebrać dane na tych licznikach:

  1. Uruchom Perfmon;
  2. Utwórz nowy zestaw modułów zbierających dane (Zestaw modułu gromadzącego dane) Wybierz Utwórz ręcznie;
  3. Wybierz opcję Utwórz dzienniki danych -> Licznik wydajności;
  4. Teraz we właściwościach nowego zestawu kolekcji danych dodaj następujące liczniki wydajności dla obiektu Dysk fizyczny (możesz wybrać liczniki dla określonego dysku lub dla wszystkich dostępnych dysków lokalnych):
    • Śr. Disk Sec./Transfer
    • Śr. Długość kolejki dyskowej
    • Śr. Bajty / transfer dysku
    • Bajty dysku / s
    • Przesyłanie dysku / s
    • Split IO / sec
  5. Możesz zmienić inne opcje gromadzenia danych. Domyślnie wartości liczników są zbierane co 15 sekund. Aby wyświetlić dane o wydajności dysku w czasie rzeczywistym, dodaj określony licznik do Perfmon w sekcji Narzędzia monitorowania -> Monitor wydajności.
  6. Pozostaje rozpocząć zbieranie danych licznika wydajności (Start) i poczekaj na zebranie wystarczających informacji do analizy. Następnie kliknij RMB na zestawie u select Przestań;
  7. Aby wyświetlić zebrane dane na dysku, przejdź do Perfmon -> Raporty -> Zdefiniowane przez użytkownika -> Data_Disk_IO -> Twój zestaw. Domyślnie dane na dysku są wyświetlane w postaci wykresów;
  8. Korzystanie Ctrl + G przełącz na tryb Zgłoś.

Jak interpretować wyniki wydajności dysku w Perfmon? W celu szybkiej analizy wydajności podsystemu dyskowego należy spojrzeć na wartości co najmniej następujących 5 liczników.

Podczas analizy danych licznika pożądane jest, aby mieć pojęcie o konfiguracji dysków fizycznych (czy używane są RAID / Stripe / liczba i rodzaj dysków, dostępność pamięci podręcznej itp.).
  • Dysk sec/ Transfer - czas wymagany do wykonania jednej operacji zapisu / odczytu na urządzeniu magazynującym / dysku - opóźnienie dysku. Jeśli opóźnienie jest większe niż 25 ms (0,25) lub większe, wówczas macierz dyskowa nie ma czasu na wykonywanie operacji. W przypadku mocno obciążonych systemów wartość nie powinna przekraczać 10 ms (0,1);
  • Przesyłanie dysku / s - Liczba operacji odczytu / zapisu na sekundę (IOPS). Jest to główny wskaźnik intensywności dostępu do dysków (przybliżone wartości w IOPS dla różnych typów dysków przedstawiono na końcu artykułu);
  • Dysk Bajty/ Sec - średnia wymiana dysku (odczyt / zapis) na sekundę. Maksymalne wartości zależą od rodzaju dysku (150-250 MB / sekundę - dla zwykłego dysku i 500-10000 dla dysku SSD);
  • Split IO/ sec - wskaźnik fragmentacji dysku, gdy system operacyjny musi podzielić jedną operację we / wy na kilka operacji. Może to również wskazywać, że aplikacja żąda zbyt dużych bloków danych, których nie można przesłać w ramach jednej operacji;
  • Śr. Dysk Kolejka Długość- długość kolejki na dysk (liczba transakcji oczekujących na przetworzenie). W przypadku pojedynczego dysku długość kolejki nie może przekraczać 2. W przypadku macierzy RAID z 4 dyskami długość kolejki do 8 będzie uważana za prawidłową wartość..

Testowanie IOPS w systemie Windows za pomocą DiskSpd

Microsoft zaleca używanie tego narzędzia do generowania obciążenia podsystemu dyskowego i mierzenia jego wydajności. Diskspd (https://aka.ms/diskspd). Jest to narzędzie konsoli, które może wykonywać operacje We / Wy z określonym celem w kilku wątkach. Dość często używam tego narzędzia do mierzenia wydajności pamięci masowej w IOPS i uzyskiwania maksymalnej prędkości odczytu / zapisu z tego serwera (możesz oczywiście mierzyć wydajność również od strony pamięci masowej, w tym przypadku dyskspd zostanie użyty do wygenerowania obciążenia).

Narzędzie nie wymaga instalacji, wystarczy pobrać i rozpakować archiwum na dysk lokalny. W systemach x64 bitowych użyj wersji diskspd.exe z katalogu amd64fre.

Używam następującego polecenia, aby przetestować dysk:

diskspd.exe -c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E: \ diskpsdtmp.dat> DiskSpeedResults.txt

Jest ważne. Podczas korzystania z diskspd.exe generowane jest dość duże obciążenie dysków i procesora testowanego systemu. Dlatego, aby nie powodować spadku wydajności użytkowników, nie zalecamy uruchamiania go w systemach produkcyjnych w godzinach szczytu.

  • -c50G - rozmiar pliku 50 GB (lepiej jest użyć dużego rozmiaru pliku, aby nie mieścił się w pamięci podręcznej kontrolera pamięci);
  • -d300 - czas trwania testu w sekundach;
  • -r - losowy odczyt / zapis (jeśli potrzebujesz przetestować dostęp sekwencyjny, użyj -s);
  • -t8 - liczba wątków;
  • -w40 - stosunek operacji zapisu do operacji odczytu 40% / 60%;
  • -o32- długość kolejki;
  • -b64K - rozmiar bloku;
  • -Sh - Nie używaj buforowania
  • -L. - mierzyć opóźnienie;
  • E: \ diskpsdtmp.dat - ścieżka pliku testowego.

Po zakończeniu testu warunków skrajnych średnie wartości wydajności można uzyskać z uzyskanych tabel..

Na przykład w moim teście uzyskano następujące ogólne dane dotyczące wydajności (Total IO):

  • MiB / s - 241 (około 252 Mb / s, nieźle)
  • IOPS - 3866.49 (doskonała!)
  • Średnie opóźnienie - 66,206 ms (trochę za dużo!)

Poszczególne wartości można uzyskać tylko dla operacji odczytu (sekcja Czytaj IO ) lub zapisy (sekcja Napisz IO ).

Po przetestowaniu kilku dysków lub jednostek LUN w magazynie przy użyciu diskspd możesz je porównać lub wybrać tablicę o żądanej wydajności dla swoich zadań.

Jak uzyskać wydajność IOPS i podsystemu dyskowego za pomocą PowerShell?

Ostatnio natknąłem się na skrypt PowerShell (autor Microsoft MVP, Mikael Nystrom), który jest zasadniczo dodatkiem do narzędzia SQLIO.exe (zestaw testów do obliczenia wydajności przechowywania plików).
Uwaga. W grudniu 2015 r. Microsoft ogłosił zakończenie obsługi narzędzia i zastąpienie SQLIO bardziej uniwersalnym narzędziem - Diskspd, usuwając pliki dystrybucyjne SQLIO ze swojej witryny. Dlatego będziesz musiał samodzielnie wyszukać sqlio.exe lub pobrać z naszej strony internetowej (znajdującej się w archiwum ze skryptem).

Pobierz archiwum zawierające 2 pliki: SQLIO.exe i Diskperformance.ps1 (disk-perf-iops.ZIP - 73Kb) i rozpakuj archiwum do dowolnego katalogu.

Przykład uruchomienia skryptu PowerShell w celu ustalenia IOPS:

.\ DiskPerformance.ps1 -TestFileName test.dat -TestFileSizeInGB 1 -TestFilepath C: \ temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

Użyłem następujących argumentów w skrypcie:

  • -Nazwa pliku testowego test.datnazwa pliku utworzonego przez narzędzie FSUTIL;
  • -TestFileSizeInGB 1 - prozmiar pliku do testów. Prawidłowe opcje to 1,5,10,50,100,500,1000 GB. Rozmiar pliku musi być większy niż rozmiar pamięci podręcznej systemu. W przeciwnym razie IOPS będzie mierzony dla danych w pamięci podręcznej, a nie na dysku;
  • -Testfilepath C.: \ Temp - wskazuje dysk, dla którego zostanie wykonane obliczenie wydajności, oraz katalog na dysku, na którym zostanie utworzony plik testowy. Dopuszczalne jest określenie ścieżki UNC do folderu sieciowego;
  • -Tryb testowy Zdobądź-LargeIO - eIstnieją dwie opcje pomiaru obciążenia., Zdobądź-SmallIO - mierzone przez IOPS, Zdobądź-LargeIO - zmierzona szybkość transmisji danych. Różnica między argumentami SmallIO i LargeIO, w rozmiarach bloków przy pomiarze prędkości 8 Kbajtów i 512 Kbajtów, a typem dostępu, odpowiednio, Losowo lub Sekwencyjnie;
  • -Tryb szybki Prawda  - w trybie Fastmode każdy test trwa 10 sekund, w przeciwnym razie 60 sekund;
  • -RemoveTestFile Prawda - usuń plik testowy na końcu testu;
  • -Format wyjściowy Out-Gridview - możliwe jest przesyłanie wyników pomiarów do konsoli PowerShell (Format-Tabela) lub w osobnym oknie tabeli graficznej (Out-Gridview);

W naszym przypadku macierz dyskowa (wirtualny dysk vmdk został przetestowany na pamięci VMFS znajdującej się na półce dyskowej HP MSA 2040 z dostępem przez SAN) wykazała średni IOPS około 15,000 i prędkości przesyłania danych (przepustowość) około 5 Gb / s.

Poniższa tabela pokazuje przybliżone wartości IOPS dla różnych typów napędów:

RodzajIOPS
SSD (SLC)6000
SSD (MLC)1000
15 000 obr./min175–200
10 000 obr./min125–150
7,2 tys. Obr./min50–75
RAID5 z 6 dyskami o prędkości 10 000 obr./min900

Oto niektóre z zaleceń dotyczących wydajności dysku w IOPS dla typowych usług:

  • Microsoft Wymiana 2010 r - z 5000 użytkowników, z których każdy otrzymuje 75 i wysyła 30 listów dziennie, będzie wymagał co najmniej 3750 IOPS
  • Microsoft SQL Serwer 2008 - z 3500 transakcji SQL na sekundę (TPS) - 28000 IOPS
  • Normalny serwer aplikacji Windows dla 10-100 użytkowników - 10-40 IOPS