bird昨日の追記, 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 を再び動作させることが出来ました。
良かった良かった。


  1. apache1.3 や prefork MPM での apache2 との対比で言うと、同時処理数が極めて大きい環境でと差は縮まるかもしれない? ↩︎