W moich poprzednich postach starałem się wytłumaczyć jak dobrze dobrać serwer NAS do swoich potrzeb, zwracając uwagę na poziom RAID oraz na ilość IOPS i przepustowość. Zwróciłem uwagę na to, że czasami lepiej jest poświęcić przepustowość na korzyść większej ilości IOPS.  Ponieważ obecnie prędkość działania aplikacji uruchamianych w centrach danych jest zależne od liczby IOPS dzięki czemu każda operacja I/O wykonana jest z minimalnym opóźnieniem.

Niestety uzyskanie przydatnych informacji od producentów, czy odczytanie z testów wydajnościowych odnośnie ilości IOPS i opóźnienia nie jest proste. Głównym problemem jest to, że nie ma czegoś takiego jak standardowe operacje I/O. Gdy rozmawiamy o IOPS, musimy bardzo jasno określić dwa parametry wielkość i typ operacji I/O. Często producenci chwalą się, że ich serwery zapewniają IOPS na poziomie 100,000 a nawet 1 miliona, podczas gdy nikt nie wspomina przy jakich parametrach było to mierzone, czy był to ciągły odczyt dla bloków o wielkości 512-bajtów, czy może losowy zapis bloków o wielkości 4K. Należy liczyć się z tym, że parametry zostały dobrane tak, aby wyniki wyglądały dobrze, szkoda tylko, że oficjalnie nie jesteśmy informowanie o wykorzystanych parametrach, a tylko o samych wynikach.

Jakby tego było mało producenci wykonują pomiaru na bardzo małych dyskach logicznych, przy wykorzystaniu prostych programów testujących jak Iometer. W ten sposób, wszystkie lub prawie wszystkie I/O są przesyłane do i z pamięci cache kontrolera zamiast bezpośrednio z dysków, co ma wpływ na zakłamanie wyników.

Nie tylko IOPS jest ważny

Nawet jeżeli serwer dostarcza 1,000,000 IOPS dla bloku 4K przy odczycie/zapisie w stosunku 60/40, chciałbym wiedzieć jakie opóźnienie jest generowane dla każdego miliona IOPS.  Dimitris Krekoukias na swoim blogu przeanalizował Oracle na serwerze dostarczającym 15,000 IOPS ze średnim opóźnieniem 25ms. Baza danych raportowała wysoki poziom opóźnienia I/O mimo iż serwer miał 15,000 IOPS. Po przeliczeniu okazało się, że opóźnienie macierzy powinno być na poziomie 4ms, dopiero wtedy aplikacja będzie działać bez problemów.

Kluczem do zapewnienia odpowiednich warunków dla aplikacji, aby ta pracowała wydajnie jest dostarczenie odpowiednio dużej ilości IOPS, przy zachowaniu małego opóźnienia. Przy doborze macierzy należy pamiętać, że duża ilość IOPS, jednocześnie z dużym poziomem opóźnienia, może mieć poważny wpływ na rzeczywistą wydajność serwera.

Ta relacja między IOPS i opóźnieniem to dobry powód, aby zwracać większą uwagę na wyniki testów wykonywane przez oprogramowanie takie jak JetStressTPC-C czy SPC-1, które testują zarówno IOPS jak i opóźnienie, zamiast opierać się tylko na wynikach Iometer, który potrafi sprawdzić ilość IOPS, ale czasu opóźnienia już nie. Należy pamiętać, aby domagać się od producentów wyników pomiarów tych dwóch bardzo ważnych i jak widać nie od łącznych parametrów. Przykładowo JetStress nie dokończy testu jeżeli opóźnienie przekroczy 20ms, podczas gdy SPC testuje opóźnienia na kilku poziomach obciążenia, a TPC dołącza wyniki średniego „90th percentile” i maksymalnego zmierzonego czasu opóźnienie.