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:
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.