Kategória: Raspberry π

Zmenené: 30. marec 2015

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.

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:

porovnanie raspbbery pi B a 2b

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.