Relacja między dyskowym IOPS a sar tps

13

Próbuję oszacować wymagania IOPS mojej aplikacji działającej w 32-bitowym CentOS 6.2. Zacząłem przeprowadzać pomiary na maszynie z dyskami SATA i dość mylę różnicę między IOPS a tps mierzonymi przez sar.

Według wikipedii dysk SATA powinien wykonać 75-100 IOPS. wydaje się, że narzędzie ioping potwierdza to w przypadku testu dostępu losowego:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

Ale wartości tps wytwarzane przez sar są znacznie wyższe (/ dev / sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Tak naprawdę nie ma znaczenia, że ​​to obciążenie jest sekwencyjne (dd z różnymi rozmiarami bloków) lub losowy dostęp (ioping), wartość jest nadal taka sama. Myślałem, że tps to właściwie IOPS i spodziewałbym się, że spadnie z przeniesionymi większymi fragmentami.

Co dokładnie oznacza wartość tps? A jak to się ma do IOPS?

pystole
źródło
2
Wierzę, że widzisz wyższy IOPS w wartości TPS z powodu pamięci podręcznej dysku.
ceejayoz
1
Ok, próbowałem pliku 10 GB przez dd z blokiem 256 kB, aby faktycznie wypełnić pamięć podręczną, a po ~ 90 sekundach tps spada do ~ 200, więc może masz rację. Ale wciąż 80 i 200 to całkiem spora różnica ... Czy to możliwe, że IOPS do odczytu i zapisu różnią się? Czy jest jakiś sposób, aby obliczyć wymagane IOPS na podstawie tej wartości?
pystole
1
Czy możesz opisać, dlaczego szukasz IOPS? czytanie i pisanie to zupełnie inna para butów, które wrzuca się tutaj do tej samej puli.
Nils,
Powodem jest to, że muszę opisać minimalne wymagania sprzętowe. Mam serwer, który odbiera dane przez sieć (tutaj możemy założyć stałą szybkość transmisji) i zapisuje otrzymane dane na dysku. Dane są zapisywane w plikach sekwencyjnie, ale mogą być setki (np. 800) równolegle. Doszedłem do wniosku, że gdy liczba klientów osiągnie pewien punkt, zaczynam otrzymywać duże oczekiwania. Rzeczywista przepustowość dysku, którą mogę osiągnąć, to około 25 MB / s, co jest dość niską wartością, mniej klientów o wyższej przepływności może osiągnąć 35 MB / s, czysta sekwencja około 130 MB / s. Sądzę więc, że liczy się tutaj IOPS ...
pystole

Odpowiedzi:

6

Transakcje to pojedyncze polecenia IO (blok pobierania / blok zapisu), które są zapisywane na dysku RAW (w twoim przykładzie dm-0). Jądro linuxa próbuje uporządkować te polecenia w lepszej sekwencji lub próbuje skompresować je w bardziej wydajne polecenia (na przykład: pobierz dwa bloki jednocześnie zamiast jednego bloku i uzyskaj kolejny blok zaraz po tym). Są to transakcje, które wychodzą na kontroler dysku (tps dla sda).

Dobrzy kontrolerzy mają własną logikę, która jeszcze bardziej zmniejsza rzeczywistą liczbę transakcji.

Transakcją może być polecenie SCSI „zapisz 2 GB do crontollera 1 target 2 lun 3, zaczynając od sektora 22). Jak widać, nie można tego bezpośrednio skorelować z liczbami przepustowości.

To, czego szukasz, to trwała szybkość zapisu. Masz tutaj kilka czynników ograniczających:

  • połączenie klienta: Jeśli sieć jest gigabitowa, nigdy nie będziesz mieć więcej niż 100 MB / s wejścia
  • kontroler dysku: Jeśli jest to kontroler 3 Gb, nigdy nie będziesz mieć przepustowości większej niż 300 MB / s
  • dysk: sprawdź wartość producenta dla trwałej wydajności zapisu
  • System plików: Jest trochę narzutu, ponieważ system operacyjny musi przetwarzać dane - przetestuj to na dysku RAM ...

Domyślam się, że twój system brzmi: Uzyskaj dobry sprzętowy kontroler RAID, który jest w stanie wykonać RAID 10 lub 5 i uzyskać co najmniej 6 szybkich (15k) dysków.

Do użytku profesjonalnego użyj SAS zamiast SATA.

Nils
źródło
Ok, masz rację IOPS nie ma sensu dla zapisów, ponieważ w grę wchodzi wiele pamięci podręcznych, zmiana kolejności i scalanie. Zamykanie ... Dzięki.
pystole
5

Należy również pamiętać, że TPSwartość reprezentuje odczyty i zapisy, możesz użyć -xprzełącznika do widoku rozszerzonego, w którym odczyty i zapisy są rozdzielone (r / s = odczyt IOPS, w / s = zapis IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89
HTF
źródło
Tak, masz rację. Ale w moim przypadku jest prawie 100% zapisów, odczytów prawie nie ma.
pystole