ServersMan@VPSを64bitに変更 その5: ベンチマークで比較

32bit OS vs 64bit OS

前回ServersMan@VPSを初期化して64bit版Debianに変更した後の状態を紹介しました。

CPU割り当て具合が変わっていたものの、そのほかには特に大きな変更はありません。今回はベンチマークソフトを使って、動作速度に差があるのかどうかを比較してみます。

初期化前(32bit版 Debian)のときのベンチマークはWebサーバやデータベースサーバを停止した上で行いましたが、ほかにもいろいろなソフトが動いていたかもしれません。また、どうも時間帯によって動作速度に差があるようなので、ここで紹介する数値は参考程度にお考えください。

bonnie++: ハードディスク性能

まずはハードディスクの性能をbonnie++というツールで測定してみます。実行したコマンドは

bonnie++ -q > 記録用ファイル.csv

になります。

測定結果は次の通りです。性能が良いほうを青い背景としておきました。

32bit Debian 64bit Debian
スループット
(K/sec)
レイテンシ
(us)
スループット
(K/sec)
レイテンシ
(us)
シーケンシャル
アウトプット
キャラクタ単位 514 28,154 633 27,096
ブロック単位 159,327 415,000 146,415 454,000
ブロック単位
(再書き込み)
43,043 784,000 144,196 728,000
シーケンシャル
インプット
キャラクタ単位 1,734 9,043 2,896 3,877
ブロック単位 2,899,211 171 4,141,704 1,460
ランダムシーク 0.440 9,510 6.519 6,763
シーケンシャル
クリエイト
クリエイト 46,074 196
リード 1,309 488
デリート 3,179 6,581
ランダム
クリエイト
クリエイト 6,478 5,067
リード 140 113
デリート 18,997 7,389

法則性は見えてきませんが、全体的に64bitのほうが早そうです。ファイルの読み込みが早くなっているということはデータベースの処理が早くなりWordPressのレスポンスがよくなることが期待できます。

dbench: ハードディスク性能

つづいてdbenchというソフトでもハードディスク性能を測定してみます。実行したコマンドは

dbench スレッド数 -t 60 > 記録用ファイル.txt

となります。スレッド数を1, 2, 4, 8, 16と変えて試してみました。

結果は次の通りです。今回もスコアが良いほうを青い背景にしています。

32bit Debian 64bit Debian
スループット
(MB/sec)
レイテンシ
(ms)
スループット
(MB/sec)
レイテンシ
(ms)
1 スレッド 8.10645 298.430 12.2828 205.874
2 スレッド 8.29630 729.394 12.7204 397.215
4 スレッド 8.04201 999.305 12.4459 598.216
8 スレッド 11.9363 1205.781 12.0671 1001.563
16 スレッド 12.3151 2002.496 12.7201 2298.850

dbenchでもbonnie++と同様に64bit版のほうが優勢でした。

mbw: メモリ性能

メモリの性能はmbwというソフトで試してみました。実行したコマンドは

mbw 256 > 記録用ファイル.txt

となります。256MBのデータを使ってデータコピーを行いスループットを測定します。

結果は次の通りです。今回もスコアが良いほうを青い背景にしています。

32bit Debian 64bit Debian
スループット
(MB/sec)
スループット
(MB/sec)
MEMCPY 1729.190 3108.837
DUMB 4157.896 3852.283
MCBLOCK 10691.926 5860.618

ハードディスク性能と違ってこちらは32bit版のほうが優勢となりました。

sysbench: 総合テスト

最後にsysbenchという総合ベンチマークソフトを使って性能を測定してみます。sysbenchはテスト項目が「cpu」「threads」「mutex」「fileio」「oltp(データベース)」が選択できます。

mutexは測定し忘れてしまったので、それ以外の結果を紹介します。

測定結果に標準偏差という見慣れない数値が出てきますが、これは測定結果にどれだけのブレがあったかを示す数値です。小さいほうが安定しているということができます。

CPU

sysbenchの説明によれば素数の演算を行うことにより測定するようです。実行したコマンドは

sysbench --test=cpu --num-threads=スレッド数 run > 記録用ファイル.txt

となります。スレッド数は1,2,4,8,16と変化させました。スレッド数を増やすことによりスケジューラの性能も評価できるようです。

結果は次の通りです。

32bit Debian 64bit Debian
平均処理時間 標準偏差 平均処理時間 標準偏差
1 スレッド 16.1630 0.00 11.5792 0.00
2 スレッド 12.0090 0.00 11.6485 0.00
4 スレッド 13.4444 0.01 11.7739 0.00
8 スレッド 12.1919 0.03 11.6937 0.02
16 スレッド 12.0359 0.02 11.6622 0.01

このベンチマークテストの結果では64bit版のほうが終始優勢でした。それもそのはずで、このベンチマークソフトの説明では演算は64bitの整数を用いて行う、と書かれています。64bit版のほうが効率よく数値を扱えたのだと思われます。

マルチスレッド

sysbenchの説明によればスケジューラのパフォーマンスを測定するために作られたテストとのことです。実行するコマンドは

sysbench --num-threads=スレッド数 --test=threads run > 記録用ファイル.txt

になります。スレッド数は1,2,4,8,16,32,64,128と変化させて行いました。

結果は次の通りです。

32bit Debian 64bit Debian
平均処理時間 標準偏差 平均処理時間 標準偏差
1 スレッド 6.6599 0.00 3.6137 0.00
2 スレッド 6.6499 0.00 4.1027 0.01
4 スレッド 9.6190 0.00 6.6482 0.00
8 スレッド 14.6023 0.00 10.5921 0.01
16 スレッド 20.1980 0.00 15.0340 0.01
32 スレッド 20.3384 0.01 15.0878 0.01
64 スレッド 14.7903 0.03 10.5383 0.02
128 スレッド 12.7904 0.05 8.9653 0.06

標準偏差(安定性)で若干32bit版のほうがよいようですが、処理時間という面では明らかに64bit版のほうが性能がよいようです。

ファイルI/O

sysbenchはファイルI/Oに関してはシーケンシャルとランダムでそれぞれ読み込み・書き込み・読み書きの3パターン、合計6パターンの測定を行うことができます。今回は時間がないのでランダムの読み書きのみ測定してみました。実行したコマンドは

sysbench --test=fileio --file-test-mode=rndrw prepare
sysbench --test=fileio --file-test-mode=rndrw --num-threads=スレッド数 run > 記録用ファイル.txt
sysbench --test=fileio --file-test-mode=rndrw cleanup

になります。スレッド数は1,2,4,6,16と変化させて行いました。

結果は次の通りです。

32bit Debian 64bit Debian
平均処理時間 標準偏差 平均処理時間 標準偏差
1 スレッド 0.1130 0.00 0.1252 0.00
2 スレッド 0.0884 0.00 0.1026 0.02
4 スレッド 0.2274 0.08 0.2193 0.13
8 スレッド 0.4564 0.07 0.5252 0.25
16 スレッド 0.9525 0.43 1.1886 0.44

このテストは32bit版のほうが優勢となりました。原因はわかりません。

データベース(MySQL)

最後にデータベースの速度比較です。sysbenchによると単純な検索のほかに複数の処理を組み合わせたトランザクションなどの処理を行っているとのことです。

このベンチマークを行う前にテスト用のデータベースを作成しておく必要があります。これはルートでMySQLに接続して行います。

mysql -u root -p
(rootのパスワードを入力)
mysql> CREATE DATABASE benchmark;
mysql> GRANT ALL ON benchmark.* to benchmark@localhost;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR benchmark@localhost=password('benchmark');

テスト用のデータベースの名前はbenchmarkとして作成し、パスワードもbenchmarkとしておきます。

準備が整ったらsysbenchを実行します。

sysbench --test=oltp --mysql-table-engine=myisam --mysql-user=benchmark --mysql-password=benchmark --mysql-db=benchmark --oltp-table-size=1000000 prepare
sysbench --test=oltp --mysql-table-engine=myisam --mysql-user=benchmark --mysql-password=benchmark --mysql-db=benchmark --oltp-table-size=1000000 --num-threads=スレッド数 run > 記録用ファイル.txt
sysbench --test=oltp --mysql-table-engine=myisam --mysql-user=benchmark --mysql-password=benchmark --mysql-db=benchmark --oltp-table-size=1000000 cleanup

スレッド数は1,2,4,8,16と変化させて行いました。

結果は次の通りです。

32bit Debian 64bit Debian
平均処理時間 標準偏差 平均処理時間 標準偏差
1 スレッド 44.2084 0.00 36.5568 0.00
2 スレッド 43.5703 0.00 36.9384 0.00
4 スレッド 44.5277 0.00 36.4490 0.00
8 スレッド 45.3028 0.01 38.0488 0.01
16 スレッド 43.5350 0.02 37.4087 0.02

このテストでは64bit版の全勝となりました。データベースが早いということはWordPressの処理が早くなりそうです。

テストが終了したらテスト用のデータベースを削除しておきます。

mysql -u root -p
(rootのパスワードを入力)
mysql> DROP DATABASE benchmark;
mysql> DELETE FROM mysql.user WHERE user='benchmark' AND host='localhost' ;
mysql> FLUSH PRIVILEGES;

まとめ

今回は32bit版DebianをインストールしたServersMan@VPSと、64bit版DebianをインストールしたServersMan@VPSを比較してみました。

ベンチマークソフトによって傾向は違いますが、おおむね64bit版のほうがスコアが良い方向に出るようです。これからVPSをセットアップするならば64bit OSを選ぶことをお勧めします。また、すでに32bit版で環境構築をしてしまっている方も、パフォーマンスで困っている場合は、64bit版に変更することを検討してもよさそうです。

次回は特別編として、Google I/O 2014の様子を紹介します。