付録C:性能評価
Wyvern 2.0/2.1/2.2 系の簡単な性能評価を行った結果について報告します。
Wyvern のコンパイルはデフォルトのままで何もオプションを指定していません。
ベンチマークツールには、Apache に附属の ab-1.3d を利用しました。
実験環境
マシンスペック
Wyvern が動作するマシンとベンチマークプログラムが動作するマシンのスペックは、
以下の通りです。
| Wyvern動作マシン | Benchmark動作マシン |
CPU: | Cyrix GXm (300MHz) | Intel Pentium III (600MHz) |
OS: | 5.3-RELEASE-p5 | 4.11-RELEASE |
Mem: | 128MB | 196MB |
NIC: | RealTek 8139 10/100BaseTX | Intel 82559 Pro/100 |
ネットワーク距離
クライアントマシンからサーバマシンまでのネットワーク的な距離です。
ping(8)を利用して測定しました。
kouichi@swordfish[715][1:23] ping -c 10 192.168.1.23
PING 192.168.1.23 (192.168.1.23): 56 data bytes
64 bytes from 192.168.1.23: icmp_seq=0 ttl=64 time=0.544 ms
64 bytes from 192.168.1.23: icmp_seq=1 ttl=64 time=0.467 ms
64 bytes from 192.168.1.23: icmp_seq=2 ttl=64 time=0.460 ms
64 bytes from 192.168.1.23: icmp_seq=3 ttl=64 time=0.476 ms
64 bytes from 192.168.1.23: icmp_seq=4 ttl=64 time=0.463 ms
64 bytes from 192.168.1.23: icmp_seq=5 ttl=64 time=0.477 ms
64 bytes from 192.168.1.23: icmp_seq=6 ttl=64 time=0.459 ms
64 bytes from 192.168.1.23: icmp_seq=7 ttl=64 time=0.436 ms
64 bytes from 192.168.1.23: icmp_seq=8 ttl=64 time=0.469 ms
64 bytes from 192.168.1.23: icmp_seq=9 ttl=64 time=0.461 ms
--- 192.168.1.23 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.436/0.471/0.544/0.027 ms
評価結果
クライアントマシンからサーバマシンに下記に示すコマンドを実行した結果を
性能評価結果として示します。
Thread/Request は、Wyvern の設定における最大スレッド数と最大リクエスト数です。
また、Wyvern 2.1.x と 2.2.x 系では Keep-Alive 接続の有無でも実験しました。
なお、最大リクエスト数が 48 より小さい場合では、
すべての場合で正確な計測ができませんでした。
実験時にはサーバの負荷が w(1) コマンドで調べて、
0.00 になったときに実行しています。
% ab -c 100 -t 10 -k http://192.168.1.23/
% ab -c 100 -t 10 http://192.168.1.23/
Wyvern性能評価(max-request=48)
Server Software |
Wyvern/2.0.8 |
Wyvern/2.1.2 |
Wyvern/2.2.0.20 |
Thread/Request |
1/48 | 24/48 | 24/48 |
Keep-Alive |
無し | 無し | 有り | 無し | 有り |
Server Hostname |
192.168.1.23 |
192.168.1.23 | 192.168.1.23 |
Server Port |
8080 | 8081 | 8082 |
Document Path |
/index.html |
/index.html | /index.html |
Document Length [bytes] |
0 | 36,907 | 36,907 |
Concurrency Level |
100 | 100 | 100 |
Time taken for tests [sec] |
10.003 | 10.002 | 10.001 | 10.001 | 10.004 |
Complete requests |
258 |
363 | 413 |
453 | 553 |
Failed requests |
250 |
1 | 32 |
0 | 11 |
Broken pipe errors |
0 |
0 | 0 |
0 | 0 |
Keep-Alive requests |
|
| 362 |
| 518 |
Total transferred [bytes] |
9,456,113 |
13,449,024 | 14,249,533 |
17,602,013 | 20,590,526 |
HTML transferred [bytes] |
9,376,957 |
13,362,993 | 14,145,565 |
17,477,039 | 20,425,770 |
Requests per second [#/sec] |
25.79 |
36.29 | 41.30 |
45.30 | 55.28 |
Time per request [ms] |
38.77 |
27.55 | 24.22 |
22.08 | 18.09 |
Transfer rate [Kbyte/sec] |
945.33 |
1344.63 | 1424.81 |
1760.03 | 2058.23 |
Wyvern性能評価(max-request=64)
Server Software |
Wyvern/2.0.8 |
Wyvern/2.1.2 |
Wyvern/2.2.0.20 |
Thread/Request |
1/64 | 32/64 | 32/64 |
Keep-Alive |
無し | 無し | 有り | 無し | 有り |
Server Hostname |
192.168.1.23 |
192.168.1.23 | 192.168.1.23 |
Server Port |
8080 | 8081 | 8082 |
Document Path |
/index.html |
/index.html | /index.html |
Document Length [bytes] |
36,907 | 36,907 | 36,907 |
Concurrency Level |
100 | 100 | 100 |
Time taken for tests [sec] |
10.009 | 10.001 | 10.002 | 10.004 | 10.003 |
Complete requests |
250 |
362 | 395 |
514 | 539 |
Failed requests |
0 |
0 | 14 |
0 | 0 |
Broken pipe errors |
0 |
0 | 0 |
0 | 0 |
Keep-Alive requests |
|
| 372 |
| 512 |
Total transferred [bytes] |
9,441,268 |
13,473,600 | 14,319,528 |
20,130,506 | 20,705,488 |
HTML transferred [bytes] |
9,362,112 |
13,387,569 | 14,214,688 |
19,987,454 | 20,539,665 |
Requests per second [#/sec] |
24.98 |
36.20 | 39.49 |
51.38 | 53.88 |
Time per request [ms] |
40.04 |
27.55 | 25.32 |
19.46 | 18.56 |
Transfer rate [Kbyte/sec] |
943.28 |
1347.23 | 1431.67 |
2012.25 | 2069.93 |
Wyvern性能評価(max-request=96)
Server Software |
Wyvern/2.0.8 |
Wyvern/2.1.2 |
Wyvern/2.2.0.20 |
Thread/Request |
1/96 | 48/96 | 48/96 |
Keep-Alive |
無し | 無し | 有り | 無し | 有り |
Server Hostname |
192.168.1.23 |
192.168.1.23 | 192.168.1.23 |
Server Port |
8080 | 8081 | 8082 |
Document Path |
/index.html |
/index.html | /index.html |
Document Length [bytes] |
36,907 | 36,907 | 36,907 |
Concurrency Level |
100 | 100 | 100 |
Time taken for tests [sec] |
10.002 | 10.001 | 10.005 | 10.004 | 10.001 |
Complete requests |
247 |
361 | 383 |
433 | 535 |
Failed requests |
0 |
0 | 1 |
0 | 0 |
Broken pipe errors |
0 |
0 | 0 |
0 | 0 |
Keep-Alive requests |
|
| 379 |
| 508 |
Total transferred [bytes] |
9,359,404 |
13,446,128 | 14,313,371 |
20,130,506 | 20,553,715 |
HTML transferred [bytes] |
9,281,172 |
13,360,334 | 14,208,563 |
19,987,454 | 20,389,389 |
Requests per second [#/sec] |
24.70 |
36.10 | 38.28 |
43.28 | 53.49 |
Time per request [ms] |
40.49 |
27.70 | 26.12 |
23.11 | 18.69 |
Transfer rate [Kbyte/sec] |
935.75 |
1344.48 | 1430.76 |
1763.80 | 2055.17 |
Wyvern性能評価(max-request=128)
Server Software |
Wyvern/2.0.8 |
Wyvern/2.1.2 |
Wyvern/2.2.0.20 |
Thread/Request |
1/128 | 64/128 | 64/128 |
Keep-Alive |
無し | 無し | 有り | 無し | 有り |
Server Hostname |
192.168.1.23 |
192.168.1.23 | 192.168.1.23 |
Server Port |
8080 | 8081 | 8082 |
Document Path |
/index.html |
/index.html | /index.html |
Document Length [bytes] |
36,907 | 36,907 | 36,907 |
Concurrency Level |
100 | 100 | 100 |
Time taken for tests [sec] |
10.002 | 10.004 | 10.003 | 10.002 | 10.002 |
Complete requests |
247 |
359 | 376 |
420 | 535 |
Failed requests |
0 |
0 | 0 |
0 | 0 |
Broken pipe errors |
0 |
0 | 0 |
0 | 0 |
Keep-Alive requests |
|
| 365 |
| 510 |
Total transferred [bytes] |
9,333,628 |
13,367,464 | 14,144,437 |
17,729,039 | 20,385,145 |
HTML transferred [bytes] |
9,255,396 |
13,282,144 | 14,040,960 |
17,602,231 | 20,221,909 |
Requests per second [#/sec] |
24.70 |
35.89 | 37.59 |
41.99 | 53.49 |
Time per request [ms] |
40.49 |
27.87 | 26.60 |
23.81 | 18.70 |
Transfer rate [Kbyte/sec] |
933.18 |
1336.21 | 1414.02 |
1772.55 | 2038.11 |
Wyvern-2.2.0.20性能評価(max-request=64)
Thread |
4 | 8 |
16 | 32 |
64 | 80 |
Keep-Alive |
無し | 有り | 無し | 有り |
無し | 有り | 無し | 有り |
無し | 有り | 無し | 有り |
Document Length [bytes] |
36,907 |
Concurrency Level |
100 |
Time taken for tests [sec] |
10.00 |
Complete requests |
475 | 556 |
474 | 559 |
458 | 534 |
514 | 539 |
484 | 531 |
417 | 536 |
Failed requests |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
Broken pipe errors |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
Keep-Alive requests |
| 522 |
| 525 |
| 506 |
| 512 |
| 507 |
| 512 |
Total transferred [bytes] |
17,754,627 | 20,783,494 |
17,877,626 | 21,006,062 |
17,528,874 | 20,292,973 |
20,130,506 | 20,705,488 |
20,089,772 | 20,561,522 |
18,110,553 | 20,525,782 |
HTML transferred [bytes] |
17,629,129 | 20,617,684 |
17,751,342 | 20,838,453 |
17,404,686 | 20,130,762 |
19,987,454 | 20,539,665 |
19,946,196 | 20,396,825 |
17,980,339 | 20,361,632 |
Requests per second [#/sec] |
47.48 | 55.57 |
47.40 | 55.88 |
45.80 | 53.38 |
51.38 | 53.88 |
48.40 | 53.08 |
41.69 | 53.59 |
Time per request [ms] |
21.06 | 18.00 |
21.10 | 17.90 |
21.84 | 18.73 |
19.46 | 18.56 |
20.66 | 18.84 |
23.99 | 18.66 |
Transfer rate [Kbyte/sec] |
1774.75 | 2077.10 |
1787.58 | 2099.77 |
1752.71 | 2028.69 |
2012.25 | 2069.93 |
2008.78 | 2055.54 |
1810.69 | 2052.37 |
Wyvern-2.2.0.20性能評価(max-thread=4)
Request |
40 | 48 |
64 | 96 |
128 |
Keep-Alive |
無し | 有り | 無し | 有り |
無し | 有り | 無し | 有り |
無し | 有り |
Document Length [bytes] |
36,907 |
Concurrency Level |
100 |
Time taken for tests [sec] |
10.00 |
Complete requests |
563 | 588 |
536 | 572 |
475 | 556 |
532 | 537 |
471 | 546 |
Failed requests |
29 | 25 | 0 | 3 |
0 | 0 | 0 | 0 |
0 | 0 |
Broken pipe errors |
0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 |
0 | 0 |
Keep-Alive requests |
| 528 |
| 533 |
| 522 |
| 503 |
| 512 |
Total transferred [bytes] |
19,983,262 | 21,049,690 |
20,024,832 | 21,279,248 |
17,754,627 | 20,783,494 |
19,906,564 | 20,107,577 |
17,642,858 | 20,442,560 |
HTML transferred [bytes] |
19,842,306 | 20,881,825 |
19,883,352 | 21,109,595 |
17,629,129 | 20,617,684 |
19,766,132 | 19,947,395 |
17,518,408 | 20,279,729 |
Requests per second [#/sec] |
56.29 | 58.78 |
53.59 | 57.18 |
47.48 | 55.57 |
53.19 | 53.68 |
47.09 | 54.59 |
Time per request [ms] |
17.77 | 17.01 |
18.66 | 17.49 |
21.06 | 18.00 |
18.80 | 18.63 |
21.24 | 18.32 |
Transfer rate [Kbyte/sec] |
1997.93 | 2104.34 |
2002.28 | 2127.29 |
1774.75 | 2077.10 |
1990.26 | 2010.15 |
1763.93 | 2044.05 |
まとめ
2.2.x は、2.0.x および 2.1.x よりも格段にパフォーマンスが向上しており、
静的コンテンツの提供だけなら十分実用的なウェブサーバとして機能するでしょう。
また、最大スレッド数固定と最大リクエスト数固定で実験した結果から、
同時リクエスト数を100と想定した場合、wyvern.conf の設定としては、
<max-thread> 値が 4 あるいは
8 で <max-request> が
64 が最適値と考えられます。
ただし、静的コンテンツのみを提供する場合は、
最大スレッド数が 1
の方が効率的に働く場合があるようです。
これは、スレッドのコンテキスト切替が発生しない分だけ処理が速いのでしょう。
実際の調整は、マシンのスペックなどを考慮する必要があります。
本性能評価は、あくまでも参考程度と考えて下さい。