Nginx na RasPi 2B
Pred nejakým časom mi domov dorazila nová verzia minipočítača Raspberry Pi 2B. Jedná sa o vylepšenú verziu, ktorá oproti pôvodnému Raspberry Pi B ponúka 1 GB pamäte a 4 jadrový procesor, taktovaný na 900 MHz. Bol som zvedavý, či sa tento rozdiel prejaví aj na výkone webového servera.
Obsah článku
Na oboch strojčekoch mám nainštalovanú rovnakú verziu webového servera nginx, ktorý na spracovanie skriptov používa PHP FPM, v oboch prípadoch cez unixový socket. Nastavenie oboch serverov je rovnaké – samozrejme s ohľadom na to, že na novom strojčeku sú k dispozícii štyri jadrá, a tak je počet workerov servera nginx nastavený na predvolenú hodnotu 4 oproti 2 na starom strojčeku. Rovnaké je i nastavenie PHP FPM a pri testovaní oboch strojčekov som nechal spracovávať rovnakú stránku:
<?php phpinfo();
Oba strojčeky sú pripojené do rovnaké prepínača, takže oba majú rovnaké sieťové pripojenie a oba boli testované z rovnakého stroja. PHP FPM ani nastavenia jadra (sysctl) neboli nijako vylepšované, či prispôsobované, a teda sú na predvolených hodnotách.
Pri testoch som najprv zistil, že oba strojčeky dokážu spracovať približne rovnaký počet súčasných požiadavkov. Pri 150 súčasných požiadavkoch sa začali objavovať (a to veľké percento) odpovede s kódom 502, oba stroje bezpečne zvládli 120 súčasných požiadavkov, generovaných z nástroja ab (ApacheBench).
Pri testovaní oboch strojov som použil rovnaký príkaz:
ab -q -l -n5000 -c120 -g /tmp/<stroj>.tsv http://<meno stroja>/
ab teda ignoruje rozdiel vo veľkosti odpovede (-l
), pretože
veľkosť stránky phpinfo()
sa líši podľa aktuálnej situácie. Testovanie
vygenerovalo celkovo 5000 (-n5000
) požiadavkov, po 120 (-c120
) naraz.
Príkaz ukladá aj súbor s dátami pre gnuplot, ktorý som potom
použil na vygenerovanie grafického výsledku.
Raspberry Pi B
Výsledok testu na staršom stroji, ktorý vystupuje pod menom raspi.skk:
ab -q -l -n5000 -c120 -g /tmp/raspi.tsv http://raspi.skk/
This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking raspi.skk (be patient).....done
Server Software: nginx
Server Hostname: raspi.skk
Server Port: 80
Document Path: /
Document Length: Variable
Concurrency Level: 120
Time taken for tests: 220.626 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 240464582 bytes
HTML transferred: 239279582 bytes
Requests per second: 22.66 [#/sec] (mean)
Time per request: 5295.030 [ms] (mean)
Time per request: 44.125 [ms] (mean, across all concurrent requests)
Transfer rate: 1064.37 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 2.5 1 31
Processing: 257 5239 477.1 5277 6877
Waiting: 225 5193 476.3 5231 6836
Total: 260 5241 476.1 5278 6878
Percentage of the requests served within a certain time (ms)
50% 5278
66% 5346
75% 5389
80% 5416
90% 5510
95% 5606
98% 5710
99% 5761
100% 6878 (longest request)
Raspberry Pi 2B
Výsledok testu na novšom stroji, ktorý vystupuje pod menom raspib.skk:
ab -q -l -n5000 -c120 -g /tmp/raspib.tsv http://raspib.skk/
This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking raspib.skk (be patient).....done
Server Software: nginx
Server Hostname: raspib.skk
Server Port: 80
Document Path: /
Document Length: Variable
Concurrency Level: 120
Time taken for tests: 29.863 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 236109429 bytes
HTML transferred: 235099429 bytes
Requests per second: 167.43 [#/sec] (mean)
Time per request: 716.704 [ms] (mean)
Time per request: 5.973 [ms] (mean, across all concurrent requests)
Transfer rate: 7721.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.4 1 12
Processing: 45 707 60.1 716 890
Waiting: 40 701 59.9 710 882
Total: 47 709 59.8 718 891
Percentage of the requests served within a certain time (ms)
50% 718
66% 728
75% 735
80% 739
90% 750
95% 760
98% 779
99% 796
100% 891 (longest request)
Porovnanie
Oba strojčeky dokázali obslúžiť všetky požiadavky, teda nenastali žiadne chyby. Keď vyššie uvedené výsledky dám do spoločnej tabuľky, dostanem:
Parameter | RasPi B | RasPi 2B |
---|---|---|
Súčasných požiadavkov | 120 | 120 |
Trvanie testu [s] | 220,626 | 29,863 |
Celkom požiadavkov | 5 000 | 5 000 |
Zlyhaných požiadavkov | 0 | 0 |
Celkom prenesených [B] | 240 464 582 | 236 109 429 |
Prenesených HTML [B] | 239 279 582 | 235 099 429 |
Požiadavkov za sek. | 22,66 | 167,43 |
Vybavenie požiadavku [ms] | 5 295.030 | 716,704 |
Vybavenie požiadavku [ms] | 44,125 | 5,973 |
Rýchlosť prenosu [kB/s] | 1 064,37 | 7 721,19 |
Podľa mňa vidno priepastný rozdiel, pretože v oboch prípadoch bolo prenesených približne rovnaké množstvo dát (cca 230 MB), lenže na staršom strojčeku to trvalo 220 s, ale na novšom len 30 s, tj. 7× rýchlejšie a tento pomer je približne rovnaký pri všetkých parametroch.
Poznámka
Teoreticky mohli byť výsledky Raspberry Pi 2B ešte lepšie, pretože prenosová rýchlosť dosiahla cca 2/3 možností mojej siete (100 Mb/s) a to mohlo pôsobiť ako horná hranica nameraného výkonu, ale to nie je na škodu.
Podobne dopadá aj porovnanie doby vybavenia daného percenta požiadavkov:
% | RasPi B | RasPi 2B |
---|---|---|
50% | 5278 | 718 |
66% | 5346 | 728 |
75% | 5389 | 735 |
80% | 5416 | 739 |
90% | 5510 | 750 |
95% | 5606 | 760 |
98% | 5710 | 779 |
99% | 5761 | 796 |
100% | 6878 | 891 |
Rozdiel v počte vybavených požiadaviek za určitú dobu vidno aj v grafickom výstupe gnuplot, ktorý bol vygenerovaný zo súborov vytvorených počas testu:
Záver
Cieľom tohoto merania nebolo zmerať aký výkonný je webový server (to i tak závisí od konkrétnej aplikácie), ale porovnať výkon staršej a novšej špecifikácie tohoto minipočítača. Výsledky nie sú vedecky presné, ale zato poskytujú krásne porovnanie nárastu výkonu v podobe webového servera.
Pretože Raspberry Pi používam prednostne ako svoj domáci server, výsledky ma veľmi potešili, pretože som nový strojček objednával s malou dušičkou, či celý ten humbuk s výkonnejším procesorom nie je len reklamný trik. Ak teda uvažujete o podobnom použití (mne poskytuje webový server, kalendárový server, XMPP server i git server), určite nekúpite zle. Samozrejme, porovnávať výkon tohoto strojčeka so 4-jadrovým procesorom, taktovaným na 2 GHz, so 4 GB RAM a rýchlym pevným diskom nie je možné, ale na obslúženie malej skupiny používateľov (rodina a pár priateľov) plne postačuje.