ksaitoの日記

日々試したことの覚え書き

sysbenchで簡易ベンチマーク

移転しました。

自動的にリダイレクトします。

sysbenchコマンドを使ってCPU、ファイルIO、メモリ、スレッド、Mutex、OLTPの簡易ベンチマークができます。
CPUのベンチマークをやってみました。

インストール

APTパッケージからインストールします。

$ sudo apt-get install sysbench 

CPUのベンチマーク

sysbenchの--test=cpuでCPUのベンチマークができます。
多分、10,000までの素数を求める処理で--num-threadsに指定したスレッド数で処理時間を測定できます。
total timeが処理時間で、1スレッドで約7.8秒かかる処理ということになります。
最短が0.73ms、平均が0.77msで全体の95%が0.78ms以内に処理されているので異常値もなさそう(かな?)

$ sysbench --test=cpu run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 10000


Test execution summary:
    total time:                          7.6804s
    total number of events:              10000
    total time taken by event execution: 7.6786
    per-request statistics:
         min:                                  0.73ms
         avg:                                  0.77ms
         max:                                  9.54ms
         approx.  95 percentile:               0.78ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   7.6786/0.00

$ 

処理時間の計測

Parallels DesktopでCPU割り当てを1〜4個に変更できます。
下記が1CPUの場合

$ cat /proc/cpuinfo | grep processor
processor       : 0
$ 

下記が4CPUの場合

$ cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

スレッドを1〜16まで変化させて処理時間を測定します。

CPU追加による性能向上

アムダールの法則でCPU追加で、どれだけ性能が向上するか計算しグラフにしてみました。

処理時間をtとすると、

t=st+pt
st:順次処理時間
pt:並列化可能処理時間

で表される。
オーバヘッドを考慮しなければ、

t(N)=st+pt/N
N:CPU数

となる。
1CPUと4CPUの4スレッドの処理時間が、それぞれ、7.53秒と2.96秒となるので、

7.53=st+pt/1
2.96=st+pt/4

の連立二次方程式を解くとstとptは以下になります。

st=1.43
pt=6.10

並列化できない割合Fは、

F=st/(st+pt)
F=0.19

となります。
アムダールの法則の「N個のプロセッサを使ったときの全体の性能向上率」の、

性能向上率=1 / (F + (1 - F) / N )

で計算すると下記が得られます。
CPUを追加するほど、性能が向上しなくなることがわかります。