Testowanie wydajności serwera

21 grudnia 2016 4min.

Testowanie wydajności – jak sprawdzić szybkość serwera?

Chcielibyście porównać dwa serwery oferowane przez firmę hostingową? Albo porównać serweryTestowanie wydajności serwera oferowane przez różnych usługodawców? A może chcecie porównać wydajność serwera przed i po modyfikacji hardware’u? Przedstawię kilka podstawowych komend, które pomogą w benchmarku procesora i wydajności dysków twardych.

Zawartość artykułu:

  1. Test serwera – przygotowania
  2. Testowanie wydajności CPU
  3. Operacje I/O – wydajność serwera
  4. Wydajność serwera – podsumowanie

Test serwera – przygotowania

Cała procedura jest wykonywana na dystrybucji Debian. Będziemy korzystać z polecenia sysbench. Instalujemy narzędzie za pomocą polecenia:

apt-get install sysbench

Testowanie wydajności CPU

Zacznijmy od testowania wydajności naszego procesora. Najprostszy test wykonujemy przy pomocy polecenia:

sysbench --test=cpu --cpu-max-prime=20000 run

Polecenie testuje wydajność procesora generując liczby pierwsze. W moim przykładzie test zakończy się na liczbie 20000. Przykładowy output:

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000

Test execution summary:
total time: 22.2210s
total number of events: 10000
total time taken by event execution: 22.2202
per-request statistics:
min: 2.16ms
avg: 2.22ms
max: 7.11ms
approx. 95 percentile: 2.28ms

Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 22.2202/0.00

Najważniejszą informacją jest total time, czyli czas potrzebny do zakończenia całej operacji. W naszym przykładzie operacja trwała ponad 22 sekundy. To czas, który potrzebował jeden rdzeń, żeby obsłużyć żądania generowania liczby pierwszej.

Dodatkowo możemy podać parametr --num-threads i obserwować zmiany w zależności od ilości rdzeni zaangażowanych w generowanie liczb pierwszych. Dla tego samego serwera 2 wątki wykonały ten sam test w o połowę krótszym czasie.

sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run

output:

...
Number of threads: 2

...
Maximum prime number checked in CPU test: 20000

Test execution summary:
total time: 11.4880s
total number of events: 10000
total time taken by event execution: 22.9724
per-request statistics:
min: 2.25ms
avg: 2.30ms
max: 7.86ms
approx. 95 percentile: 2.29ms

Operacje I/O – wydajność serwera

Od dłuższego czasu najwęższym gardłem wydajności komputerów jest dysk twardy. Pomimo zaawansowanych macierzy dyskowym serwery także cierpią z tego powodu. Dyski SSD potrafią przyśpieszyć znacząco szybkość działania aplikacji działających na serwerze w stosunku do dysków talerzowych. Przyjrzyjmy się jednak temu, jak zbadać wydajność naszego dysku twardego.

Musimy zacząć od przygotowania danych testowych. Wykonujemy polecenie:

sysbench --test=fileio --file-total-size=1G prepare

W ten sposób będziemy testować nasz dysk twardy na danych wielkości 1GB. Do prawdziwych testów zalecam użyć znacznie większego pliku (>50GB) żeby na pewno testować odczyty dyskowe, a nie cache.

Następnie możemy przystąpić do właściwych testów. Wykonujemy polecenie:

sysbench --test=fileio --file-total-size=1G --file-test-mode=rndrw --init-rng=on --max-time=30 --max-requests=0 run

Oczywiście 1GB odpowiada przygotowanemu wcześniej zestawowi danych. Ten test będzie trwał 30 sek. Ten parametr także zalecam znacząco zwiększyć podczas prawdziwych testów (minimum 10 min). Przykładowy output:

sysbench 0.4.12: multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Initializing random number generator from timer.
Extra file open flags: 0
128 files, 8Mb each
1Gb total file size
Block size 16Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed: 2160 Read, 1440 Write, 4551 Other = 8151 Total
Read 33.75Mb Written 22.5Mb Total transferred 56.25Mb (1.875Mb/sec)
120.00 Requests/sec executed

Test execution summary:
total time: 30.0002s
total number of events: 3600
total time taken by event execution: 13.5311
per-request statistics:
min: 0.01ms
avg: 3.76ms
max: 65.88ms
approx. 95 percentile: 9.66ms

Threads fairness:
events (avg/stddev): 3600.0000/0.00
execution time (avg/stddev): 13.5311/0.00

Oprócz informacji o próbce danych (u nas 128 plików po 8 Mb) znajdziemy podsumowanie danych, jakie zostały w czasie testu odczytane i zapisane na dysku. Standardowo `sysbench będzie próbował odczytywać średnio 1.5 raza częściej niż zapisywać. Widzimy też ile trwały pojedyncze zdarzenia. 95% operacji wykonało się w czasie poniżej 10ms. Były jednak także operacje powyżej 60ms.

Po wykonanych testach powinniśmy wyczyścić dane testowe przy pomocy:

sysbench --test=fileio --file-total-size=1G cleanup

Wydajność serwera – podsumowanie

Dzięki narzędziu sysbench możesz w łatwy sposób porównać wydajność swojego serwera przed i po modyfikacji hardware’u lub porównać między sobą serwery różnych dostawców.