処理にかかった時間の計測

Vine Linux を使ってサーバ構築・運営していくためのノウハウをまとめてみました。
処理にかかった時間の計測

処理にかかった時間の計測

火曜日, 10, 03, 2006

line line

Linuxでは、プログラムやコマンドの実行時間を簡単に測定できるようです。
たとえば、PHPでImageMagickを使う方法の記事でかいた実行時間は、実は「1・・・2・・・3・・・」と頭で数えた秒数です。(笑
なのですごく不確定な、曖昧な時間だったわけで・・・。(汗

処理時間を計測するには

Linuxのターミナルを立ち上げ、コマンドやプログラムを実行させるためのパスを入力する前に「time」と打ち込むだけです。
たとえば、「./myProgram.pl」というPerlスクリプトを実行させるのにどれくらいかかったか・・・を知りたい場合は、

$ time ./myProgram.pl

real 0m3.093s
user 0m2.820s
sys 0m0.150s

こんな感じになります。
「 real 」という項目が実際に処理にかかった時間になるようです。
「 user 」と「 sys 」に関しては、物理のかぎしっぽさんのプログラムの実行時間を計る というページが役に立ちます。

C3とセレロンM どちらが速いか

というわけで、同じVine Linux3.2という環境で、CPUにC3を使ったマシンと、セレロンMを使ったマシンで同じ処理をさせてどちらがどれくらい速いか、きちんと計測してみました。

処理内容:
912.8キロバイト程のPNG画像を、ImageMagickを使って横幅300ピクセルに縮小(縦横比を保ちながら)させる。
正確性を期すために5回実行させます。

# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m3.231s
user 0m2.760s
sys 0m0.260s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m3.189s
user 0m2.830s
sys 0m0.140s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m3.301s
user 0m2.850s
sys 0m0.180s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m3.642s
user 0m2.790s
sys 0m0.180s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m3.152s
user 0m2.780s
sys 0m0.180s

平均すると約3.3秒となりました。

次は、セレロンMで。

# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m0.573s
user 0m0.520s
sys 0m0.050s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m0.539s
user 0m0.490s
sys 0m0.040s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m0.538s
user 0m0.510s
sys 0m0.030s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m0.538s
user 0m0.500s
sys 0m0.030s
# time convert -geometry "300" "./1024x768_2.png" "new.png"

real 0m0.538s
user 0m0.530s
sys 0m0.010s

平均すると約0.5452秒となりました。

3.3秒 ÷ 0.5452秒 = 6.0528246515040352164343360234776・・・・
おぉ~。約6倍!!
これはすごい。

このくらいの処理速度だと、バナー作成ツールとか、壁紙作成ツールで役に立つかもしれない。
特に、携帯待ち受け画像作成ツールなんかは、多い人だと1日に200回ぐらい使う人がいるんで、結構私のサーバーマシン、ひーひー悲鳴を上げていたりするんですね。実際は。
たぶん、みんなフリーだからってあんまりそういうこと考えないで使ってるんでしょうけれど・・・。
しかも、一人がっていうんじゃなくて、1日に何十人かがこれらのツールを使っているわけで・・・。
実は、自作マシンでサーバーマシンをパワーアップさせたかったのは、私が作って公開している各種プログラムの処理をするのに、サーバーマシンがそろそろ悲鳴を上げてきた。っていうのがありまして。

6倍の実行速度となれば、単純にそれら負荷のかかるPHPを今より6倍程の需要があっても耐えられる計算になり。
うーん。いいかもしれない。
あと、私が作ったアクセスログ解析プログラムもこれまた処理に時間がかかりまして・・・。
1日数千人規模のアクセスがあるサイトのアクセスログを解析するとですね、1回のアクセスに30秒ぐらいかかるんですね。
それが多少なりとも軽減されるのはうれしい。
あと、Movable Typeも一件の記事の投稿が完全に終わるまで非常に時間がかかるんで、それも速くなるのかなぁ?と。

この記事はご希望通りの内容でしたか?

こうしたマシンによる速度実験は、自鯖ユーザーを初めそうでない人も興味がある人が多いと思われます。
そこで、もう少し実践的な速度競争を実験してみました。

Apache C3 vs セレロンM

そう、Apacheの処理がC3とセレロンMでどちらが、どれだけ速いか競争。
ただし、先ほどの実験と違って今度はCPU以外にもメモリやHDDの性能も関わってくるため、正確に言えば

C3 + 3~4年前のハード vs セレロンM + 最新のハード

ですね。
特にApacheのような、ファイルを読み込んでブラウザに送信するような処理をする場合は、メモリやHDDの方が影響度が高いような気もする。
ここで各マシンの構成を振り返ってみると、

  • C3マシン
    • CPU:C3
    • メモリ:DIMM PC133の512MB(なんと2世代前のメモリだ・・・)
    • HDD:よくわからんメーカー(汗)40GB(たぶん、5年ぐらい前の代物。中古で購入)
  • セレロンMマシン
    • CPU:セレロンM1.35MHz
    • メモリ:DDR II SD-RAM 533MHz デュアルチャンネル 1024MB
    • HDD:SATA2 80GB

こうしてみると違いは歴然。
C3マシンの方は、'99頃の仕様だ・・・。

ただし、単にWEBサーバーを公開する程度なら十分な性能で、おそらく私のC3マシンで1日あたりのPV数は画像やCSSファイル等も含めると10万PVになると思うんだけれど、その程度のPV数であれば全くびくともしない。
なので、無理にマシンをレベルアップする必要はないんだけれど、セキュリティソフトや私の作成したPHPを快適に動かすには、より最新のマシン構成が求められるわけだ。

さて、Apacheでは「Apache Bench」というWEBサーバーのマシンの性能を調べることが出来るツールがついてる。
これを使ってC3とセレロンMのマシンでどっちがどれくらい速いか計測してみました。

C3マシン

# ab -n 10000 -c 100 http://127.0.0.1/index.html

Benchmarking 127.0.0.1 (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 Hostname: 127.0.0.1
Server Port: 80

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

Concurrency Level: 100
Time taken for tests: 45.061 seconds
Complete requests: 10000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 336427074 bytes
HTML transferred: 333570034 bytes
Requests per second: 221.92 [#/sec] (mean)
Time per request: 450.61 [ms] (mean)
Time per request: 4.51 [ms] (mean, across all concurrent requests)
Transfer rate: 7466.04 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 1 58 36.3 48 275
Processing: 90 388 108.1 359 3374
Waiting: 70 385 108.4 357 3371
Total: 90 446 109.1 417 3455

Percentage of the requests served within a certain time (ms)
50% 417
66% 466
75% 489
80% 510
90% 587
95% 641
98% 732
99% 772
100% 3455 (last request)

次、セレロンMマシン。

# ab -n 10000 -c 100 http://127.0.0.1/index.html

Benchmarking 127.0.0.1 (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 Hostname: 127.0.0.1
Server Port: 80

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

Concurrency Level: 100
Time taken for tests: 13.983 seconds
Complete requests: 10000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 335182662 bytes
HTML transferred: 332340674 bytes
Requests per second: 715.15 [#/sec] (mean)
Time per request: 139.83 [ms] (mean)
Time per request: 1.40 [ms] (mean, across all concurrent requests)
Transfer rate: 23970.73 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.6 0 54
Processing: 11 137 146.4 103 896
Waiting: 7 137 146.4 102 896
Total: 11 138 146.0 103 896

Percentage of the requests served within a certain time (ms)
50% 103
66% 108
75% 116
80% 120
90% 134
95% 455
98% 777
99% 828
100% 896 (last request)

ここで注目すべき値は、「 Requests per second 」で、1秒間あたりにいくつのリクエストを処理できるか。ということ。

C3:221.92
セレロンM:715.15

なんと約3倍。
うーん。こんな差がつくとは・・・。
って、実際は、C3の方は、自鯖として活躍している状態で測定したので、実際は他の人のアクセス等の処理もしなければならないため、実際にはもう少し上がると思われます。
昔測定したときは、400~500ぐらい出たような気がする。
いずれにしても、セレロンマシンの方が非常に多くの処理をこなせることが判明しました。

投稿者 campanella : 2006年10月03日 16:09 | Linux Tips | 編集

line

□□□ コメント □□□

line
名前
メールアドレス
URL
コメント