with Brak komentarzy

Co warto wiedzieć na temat wydajności?

Co to jest wydajność? Czy przepustowość równa 16Gb/s, to to samo co pasmo przepustowości równe 16Gb/s? Czy dla mojej aplikacji ważniejszy jest czas odpowiedzi, czy dostępna przepustowość? To tylko część pytań, na które postaram się odpowiedzieć w tym artykule. Aby jednak temat ten był trochę bardziej przystępny dla ludzi, postanowiłem posłużyć się pewnego rodzaju analogią do ruchu pojazdów na autostradzie.

Zaczynamy!

Terminologia związana z zagadnieniem wydajności.

Wyobraź sobie autostradę z kilkoma pasami, po której jeździ wiele pojazdów o różnej wielkości. W zależności od rozmiaru tych pojazdów (autobusy, samochody osobowe, motocykle) mogą one przewieźć w tym samym czasie różną ilość osób.

  • Pasmo przepustowości (Bandwidth) - to nic innego jak ilość pasów na naszej autostradzie.
  • Przepustowość (Throughput) - to ilość ludzi, których można przetransportować tą autostradą.
  • Współczynnik I/O Rate- to ilość samochodów, autobusów i motocykli przemieszczających się po naszej autostradzie.
  • Czas odpowiedzi (Response Time) - to czas potrzebny na wykonanie podróży w tą i z powrotem.

Posługując się tą analogią, w łatwy sposób można zrozumieć, jak na wydajność systemu wpływa różny profil zapytań I/O, czyli jak bardzo jest ona uzależniona od rodzaju ruchu na autostradzie.

 

Przepustowość vs. pasmo przepustowości.

Jak widzisz powyżej, są to dwie zupełnie różne rzeczy. O ile pasmo przepustowości jest określone poprzez technologię i produkt, z którego korzystamy (ilość pasów wybudowanych i dostępnych na naszej autostradzie), to na samą przepustowość wpływ ma wiele różnych czynników:

  • jakiego rodzaju zapytania wędrują naszą autostradą? 
  • jak duże są te zapytania?
  • czy ten ruch jest stały czy mieszany?
  • czy wykorzystywana technologia pozwala na podróż na oczekiwanym dystansie?

Inaczej mówiąc - czy autostradą jadą tylko autobusy, tylko motocykle, a może ten ruch jest mieszany oraz czy wystarczy nam paliwa na podróż w obydwie strony? I tutaj pozwolę sobie zadać pytanie z gatunku tych retorycznych - jak Ci się wydaje, co się stanie z czasem odpowiedzi, gdy autostrada zacznie się wypełniać?

 

Różne płaszczyzny wydajności.

Zdarza się, że o wydajności rozmawiamy, myśląc o różnych parametrach z nią związanych, co często utrudnia tę komunikację. Warto zatem moim zdaniem usystematyzować pewne prawidłowości.

Po pierwsze - szybkie procesory oraz karty wejścia/wyjścia (np. karty HBA) będą miały wpływ na poprawę współczynnika I/O Rate na naszej 16Gb/s autostradzie w sytuacji, gdy będzie nią jechała duża ilość motocykli oraz dwuosobowych samochodów sportowych (duża ilość małych zapytań I/O). 

Po drugie - zwiększając rozmiar transferu I/O (średniej wielkości auta oraz małe autobusy) realny współczynnik I/O Rate spadnie, ale przepustowość (ilość podróżujących osób) wzrośnie znacząco.

Po trzecie - wysoka przepustowość (Throughput) wygląda bardzo fajnie, dopóki nie zaczniesz mierzyć czasów odpowiedzi (Response Time) - nie można mieć jednego i drugiego jednocześnie.

W pewnym momencie autostrada zacznie się wypełniać, a ruch na niej - spowalniać i dla niektórych aplikacji może to być duży problem. Na wykresie poniżej przedstawione zostały wszystkie te zależności oraz ich wzajemny wpływ na siebie. 

 

 

Wydajność, różne płaszczyzny, wykres

 

Aplikacje, dla których ważny jest czas odpowiedzi.

Aplikacje tego typu wymagają krótkich czasów odpowiedzi, aby mogły działać poprawnie. Są to aplikacje, charakteryzujące się najczęściej:

  • dużą liczbą użytkowników,
  • bardzo dużą liczbą pojedynczych transakcji,
  • bardzo losową charakterystyką zapytań,
  • wysokim współczynnikiem I/O Rate.

Zakończenie transakcji mierzone jest tutaj w sekundach i milisekundach, a przykładami takich aplikacji są: systemy OLTP, sieci bankomatów, transakcyjne systemy rezerwacji biletów, systemy obsługi kart kredytowych/debetowych, poczta elektroniczna.

 

Aplikacje, dla których ważna jest przepustowość.

Z kolei tego typu aplikacje wymagają dużej przepustowości, aby np. w zadanym czasie zakończyć określone przetwarzanie wsadowe. Tutaj z kolei mamy do czynienia:

  • z kilkoma procesami, działającymi w tym samym czasie, 
  • kilkoma dużymi transakcjami, 
  • sekwencyjną charakterystyką zapytań,
  • niskim współczynnikiem I/O Rate.

Czas trwania transakcji jest mierzony w minutach lub często w godzinach (ewentualnie w MB/s per I/O), a przykłady aplikacji tego typu to: wykonywanie kopii zapasowej (backup), streaming video/audio, DSS (Decision Support System - systemy wspomagania decyzji, np. hurtownie danych).

 

Profil I/O.

Profil I/O opisuje rodzaj aktywności realizowanej przez daną aplikację. Powinien on zawierać wystarczająco dużo informacji, aby na ich podstawie możliwe było określenie konfiguracji systemu, która będzie w stanie spełnić wymagania tej aplikacji. Najlepszym sposobem zdobycia tych informacji, jest wykorzystanie statystyk i metryk wydajnościowych systemu, a najlepiej znaleźć je:

  • w systemach do monitorowania wydajności wewnątrz samej aplikacji / bazy danych,
  • w aplikacjach dostępnych dla systemów operacyjnych
  • w aplikacjach do monitorowania wydajności dostępnych w systemach pamięci masowych.

Warto przy tym pamiętać, że każda aplikacja ma swój indywidualny profil I/O oraz wiedzieć co jest podstawą dla projektowania systemu - czas odpowiedzi, czy może przepustowość. Pamiętaj - nie można mieć jednego i drugiego jednocześnie. Oczywiście w erze takich technologii jak protokoły NVMe i dyski flash rozbieżność pomiędzy tymi parametrami wydajnościowymi nie jest już tak ogromna, jak w przypadku tradycyjnych dysków mechanicznych, ale opisana powyżej prawidłowość nadal ma zastosowanie.

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.