昨日の追記, apache2, Kernel 2.6.4 と VMware 4.5.1
昨日の追記
昨日のテストは非常に小さいファイルで実験してたわけですが、これを例えば 1Mbytes のファイルにしてみると、また全然違った結果が得られます。
apache では
kazawa@tpx20:~$ ab -c 20 -n 1000 http://localhost/dummy.dat
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache/1.3.26
Server Hostname: localhost
Server Port: 80
Document Path: /dummy.dat
Document Length: 1048576 bytes
Concurrency Level: 20
Time taken for tests: 23.763 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 1049356904 bytes
HTML transferred: 1049083631 bytes
Requests per second: 42.08 [#/sec] (mean)
Time per request: 475.26 [ms] (mean)
Time per request: 23.76 [ms] (mean, across all concurrent requests)
Transfer rate: 44159.28 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 1 21 13.6 20 123
Processing: 279 454 81.0 432 919
Waiting: 275 452 81.0 430 916
Total: 279 475 82.6 448 930
Percentage of the requests served within a certain time (ms)
50% 448
66% 454
75% 464
80% 477
90% 482
95% 649
98% 745
99% 929
100% 930 (last request)
一方、tomcat では十分最適化をかけた後でもこのくらい。
kazawa@tpx20:~$ ab -c 20 -n 1000 http://localhost:8080/dummy.dat
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: localhost
Server Port: 8080
Document Path: /dummy.dat
Document Length: 1048576 bytes
Concurrency Level: 20
Time taken for tests: 39.073 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 1055016112 bytes
HTML transferred: 1054807228 bytes
Requests per second: 25.59 [#/sec] (mean)
Time per request: 781.46 [ms] (mean)
Time per request: 39.07 [ms] (mean, across all concurrent requests)
Transfer rate: 27001.15 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 8 14.1 7 299
Processing: 491 769 79.2 751 1338
Waiting: 490 765 79.3 747 1335
Total: 491 777 81.8 758 1340
Percentage of the requests served within a certain time (ms)
50% 758
66% 777
75% 783
80% 785
90% 800
95% 826
98% 1080
99% 1331
100% 1340 (last request)
localhost でテストしているのでボトルネックはローカルの CPU か IO、1Mbytes のファイル一つなら完全にキャッシュに乗っかってしまうことを考えるとたぶん CPU にあるわけですが、apache へのテスト実行時、CPU はほとんど system に費やされているのに対し、tomcat では user と system が半々ぐらいとなっており、このあたり (対 kernel で見た時の apache の皮の薄さに対して JavaVM の厚化粧っぷり) が原因かも。このくらいの規模のテストだと、マシンリソースへの要求はやっぱり tomcat の方がかなり大きいですからね…1。
apache2 ではまだテストしてません。また後程。
apache2
というわけで、apache 2.0.49 でも試してみました。prefork MPM では面白くないので、worker MPM を使って見ました。
kazawa@tpx20:~$ ab -c 20 -n 10000 http://localhost:8080/hello.html
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests
Server Software: Apache/2.0.49
Server Hostname: localhost
Server Port: 8080
Document Path: /hello.html
Document Length: 92 bytes
Concurrency Level: 20
Time taken for tests: 9.430 seconds
Complete requests: 10000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 3580000 bytes
HTML transferred: 920000 bytes
Requests per second: 1060.45 [#/sec] (mean)
Time per request: 18.86 [ms] (mean)
Time per request: 0.94 [ms] (mean, across all concurrent requests)
Transfer rate: 379.64 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 9 2.9 8 48
Processing: 7 10 2.2 9 50
Waiting: 6 9 2.1 8 48
Total: 17 18 3.3 17 58
Percentage of the requests served within a certain time (ms)
50% 17
66% 18
75% 18
80% 18
90% 20
95% 25
98% 26
99% 27
100% 58 (last request)
はやっ!1Mbytes のファイルについても、
kazawa@tpx20:~$ ab -c 20 -n 1000 http://localhost:8080/dummy.dat
This is ApacheBench, Version 1.3d <$Revision: 1.65 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache/2.0.49
Server Hostname: localhost
Server Port: 8080
Document Path: /dummy.dat
Document Length: 1048576 bytes
Concurrency Level: 20
Time taken for tests: 7.669 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 1048852000 bytes
HTML transferred: 1048576000 bytes
Requests per second: 130.40 [#/sec] (mean)
Time per request: 153.38 [ms] (mean)
Time per request: 7.67 [ms] (mean, across all concurrent requests)
Transfer rate: 136765.16 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 3 11 3.1 12 28
Processing: 138 140 11.2 138 192
Waiting: 127 139 11.1 136 190
Total: 142 152 11.1 149 203
Percentage of the requests served within a certain time (ms)
50% 149
66% 152
75% 155
80% 156
90% 161
95% 166
98% 198
99% 202
100% 203 (last request)
と、他を引き離す性能を見せました。正直、1.3 系に対してこれほどアドバンテージがあるとは思いませんでした。それとも 1.3 系も自分でコンパイルしてみたものではまた違うのでしょうか?
なお、性能に関係するパラメータはデフォルトのまま、下記の通りです。
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
Kernel 2.6.4 と VMware 4.5.1
VMware の 4.5.1 がリリース、とのニュースを読んで、さっそく入れてみました。
いつも通り tar ball を展開後、vmware-install.pl を実行、4.0.5 の時はひっかかっていた kernel module の作成もさくさく進んで、無事インストール出来たかに見えました。
ところが、いざ実行してみようとすると、Window は表示されるのですが、Guest OS を起動しようとすると signal 11 で落ちてしまいます。/var/log/kern.log には oops まで出てしまう始末。どうも vmmon モジュールがうまく動作していないようです。
しょうがないので 4.0.5 に戻そうとしたんですが、kernel 2.6 に 4.0.5 を入れるための手元にあったパッチ (vmware-any-any-update48.tar.gz) は kernel 2.6.4 の場合は使えず、最新の vmware-any-any-update55.tar.gz もなぜかモジュールコンパイルの途中でエラーが出てうまくいきません。
一瞬途方にくれて「kernel をダウングレードするしかないかなぁ…」と思ったんですが、上記パッチの提供元にあった、obsolete ディレクトリを掘り返してみたところ、vmware-any-any-update53.tar.gz ならば正常にパッチを当てられることが判明、なんとか無事、Kernel 2.6.4 上で VMware を再び動作させることが出来ました。
良かった良かった。
-
apache1.3 や prefork MPM での apache2 との対比で言うと、同時処理数が極めて大きい環境でと差は縮まるかもしれない? ↩︎