Jakiej wydajności mogę oczekiwać od używania Raspberry Pi jako serwera WWW?

39

Czy ktoś przeprowadził testy porównawcze serwerów WWW na swoim Raspi? Nie mam jeszcze mojego Raspi, ale planuję używać go jako serwera internetowego i chcę zobaczyć statystyki dla:

  • Liczba żądań na sekundę
  • Czas odpowiedzi opóźnień między żądaniami
  • Przepustowość (tj. Bajtów na sekundę)

Jeśli są różne dla różnych programów serwera WWW i kombinacji systemów operacyjnych, chciałbym również zobaczyć porównanie.

AntonChanning
źródło
4
Czy głosowanie na zakończenie może wyjaśnić dlaczego? To jest obiektywne pytanie z obiektywną wymierną odpowiedzią.
AntonChanning
1
Nie mogę odpowiedzieć w sposób autorytatywny, ale uważam, że najszybsze serwery sieciowe będą najszybsze na RPi. Moje preferencje, Nginx.
Alex Chamberlain,
@AlexChamberlain Dzięki, warto wiedzieć, ale nadal chciałbym zobaczyć, jaką wydajność mogę uzyskać z urządzenia, więc nie planuję używać go do projektu przekraczającego jego możliwości ...
AntonChanning

Odpowiedzi:

28

Oczekuję, że, jak mówi Alex, testy porównawcze pokażą, że najszybsze serwery Linux-a nadal będą najszybsze, niezależnie od architektury.

Jeśli ktoś chce uruchomić testy porównawcze, przydał mi się następujący samouczek:

Jak przeprowadzać testy porównawcze na serwerze internetowym


Udostępnianie stron statycznych

Testowałem RPi przy użyciu Apache obsługującego prostą stronę statyczną:

<h1>It works!</h1>

Jako grupa kontrolna użyłem mojego głównego serwera WWW, który zawiera następującą specyfikację;

Intel(R) Xeon(R) CPU           X3323  @ 2.50GHz
384MB RAM

Wyniki są następujące:

Kontrola

ab -n 1000 -c 5 http://www.ivings.org.uk/~james/index.html

Server Software:        Apache/2.2.14
Server Hostname:        www.ivings.org.uk
Server Port:            80

Document Path:          /~james/index.html
Document Length:        19 bytes

Concurrency Level:      5
Time taken for tests:   17.767 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      294000 bytes
HTML transferred:       19000 bytes
Requests per second:    56.29 [#/sec] (mean)
Time per request:       88.833 [ms] (mean)
Time per request:       17.767 [ms] (mean, across all concurrent requests)
Transfer rate:          16.16 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       42   44   0.8     44      50
Processing:    44   45   0.9     45      59
Waiting:       44   45   0.9     45      59
Total:         86   89   1.3     88     108

Percentage of the requests served within a certain time (ms)
  50%     88
  66%     89
  75%     89
  80%     89
  90%     90
  95%     91
  98%     91
  99%     94
 100%    108 (longest request)

Raspberry Pi

ab -n 1000 -c 5 http://86.137.189.68/index.html

Server Software:        Apache/2.2.22
Server Hostname:        86.137.189.68
Server Port:            80

Document Path:          /index.html
Document Length:        19 bytes

Concurrency Level:      5
Time taken for tests:   23.186 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      304000 bytes
HTML transferred:       19000 bytes
Requests per second:    43.13 [#/sec] (mean)
Time per request:       115.930 [ms] (mean)
Time per request:       23.186 [ms] (mean, across all concurrent requests)
Transfer rate:          12.80 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       40   44   5.6     43     116
Processing:    49   71 156.1     57    2157
Waiting:       47   53   6.7     55     104
Total:         91  116 156.1     99    2198

Percentage of the requests served within a certain time (ms)
  50%     99
  66%    100
  75%    100
  80%    100
  90%    102
  95%    126
  98%    150
  99%    667
 100%   2198 (longest request)

Wniosek

Uwaga: najlepiej traktować to jako szacunek.

Wyniki pokazują, że Raspberry Pi naprawdę dobrze sobie radził. Był tylko nieco mniej wrażliwy niż mój główny serwer WWW.

Powinno być dobrze obsługiwać stosunkowo dużą liczbę żądań.

Jivings
źródło
Być może tak, ale jaki rodzaj wydajności może zapewnić najszybszy? Myślę, że oboje źle zrozumieliście, o co próbuję zapytać ...
AntonChanning,
1
Przeprowadzę testy porównawcze na Apache i skontaktuję się z Tobą.
Jivings
Dzięki. Przepraszam, jeśli moje pytanie nie było jasne. Być może zmąciłem wodę, prosząc o porównanie, kiedy naprawdę interesowały mnie statystyki standardowego stosu LAMP.
AntonChanning,
1
„A” w LAMP oznacza serwer HTTP Apache…
Roger Dahl
1
@Jivings: To był komentarz przeznaczony dla OP. W początkowym komentarzu do Twojego postu wskazał, że jest zainteresowany znalezieniem wydajności najszybszego serwera http i wydaje się niezadowolony z twojego testu porównawczego opartego na Apache. Następnie poszedł niejawnie poprosić o test porównawczy Apache („A” w LAMP).
Roger Dahl
5

Apache nie jest najlepszym wyborem do udostępniania treści statycznych, lepiej nadaje się do tego nginx. Zrobiłem test porównawczy, używając http://lekensteyn.nl/index.html jako dokumentu testowego. Jest to większy dokument niż przykład Jiving, ponieważ 19 bajtów nie jest realistyczne dla rzeczywistej strony. Wyniki są dość niesamowite, RPi nawet przewyższa mój laptop roboczy (może dlatego, że mam włączone wszystkie rodzaje przełączników debugowania jądra).

Oto nginx 1.4.1 działający na Arch Linux (RPi access_log off, przewodowy ethernet):

$ ab -n 1000 -c 5 http://192.168.2.10/index.html

Server Software:        nginx/1.4.1
Server Hostname:        192.168.2.10
Server Port:            80

Document Path:          /index.html
Document Length:        2159 bytes

Concurrency Level:      5
Time taken for tests:   2.341 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2392000 bytes
HTML transferred:       2159000 bytes
Requests per second:    427.18 [#/sec] (mean)
Time per request:       11.705 [ms] (mean)
Time per request:       2.341 [ms] (mean, across all concurrent requests)
Transfer rate:          997.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.1      1       1
Processing:     4   11   1.0     11      20
Waiting:        3   11   1.0     10      19
Total:          4   12   1.0     12      21

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     12
  75%     12
  80%     12
  90%     12
  95%     12
  98%     17
  99%     18
 100%     21 (longest request)

To jest mój laptop ( access_log offprzewodowy ethernet):

Server Software:        nginx/1.4.1
Server Hostname:        192.168.2.12
Server Port:            80

Document Path:          /index.html
Document Length:        2159 bytes

Concurrency Level:      5
Time taken for tests:   2.593 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2392000 bytes
HTML transferred:       2159000 bytes
Requests per second:    385.62 [#/sec] (mean)
Time per request:       12.966 [ms] (mean)
Time per request:       2.593 [ms] (mean, across all concurrent requests)
Transfer rate:          900.79 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2    6   3.4      5      82
Processing:     3    7   5.6      6      86
Waiting:        3    7   5.5      5      82
Total:          6   13   6.8     12      94

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     13
  75%     14
  80%     15
  90%     17
  95%     19
  98%     24
  99%     34
 100%     94 (longest request)

Dla kompletności mój zdalny serwer. Jest wolniejszy, ponieważ połączenie WAN jest prawdopodobnie wąskim gardłem (też access_lognie jest wyłączone):

Server Software:        nginx/1.2.8
Server Hostname:        lekensteyn.nl
Server Port:            80

Document Path:          /index.html
Document Length:        2159 bytes

Concurrency Level:      5
Time taken for tests:   11.074 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      2370000 bytes
HTML transferred:       2159000 bytes
Requests per second:    90.30 [#/sec] (mean)
Time per request:       55.371 [ms] (mean)
Time per request:       11.074 [ms] (mean, across all concurrent requests)
Transfer rate:          209.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       25   27   2.3     26      59
Processing:    28   29   2.3     28      59
Waiting:       26   27   2.4     27      59
Total:         53   55   3.8     55     102

Percentage of the requests served within a certain time (ms)
  50%     55
  66%     55
  75%     55
  80%     55
  90%     56
  95%     57
  98%     59
  99%     86
 100%    102 (longest request)

Przy większej współbieżności i większej liczbie żądań liczby powinny być bardziej niezawodne, ponieważ można uwzględnić więcej próbek (gdy uruchomiłem ablaptopa w trybie przewodowym / bezprzewodowym, jego liczby bardzo się wahały). Należy pamiętać, że podczas testowania przy logowaniu dostępu bufory systemu plików powodują nieprzewidywalne opóźnienia zapisu, gdy katalog dziennika znajduje się na karcie SD.

Lekensteyn
źródło