読者です 読者をやめる 読者になる 読者になる

DRBDベンチマーク

DRBDのパフォーマンスを評価する機会があったのでメモしておきます。
DRBDはTCP/IPネットワーク越しにディスクのミラーリングを行うソフトウェアで、Linuxカーネルモジュールとして実装されています。ネットワーク経由のRAID1と考えるとわかりやすいと思います。Heartbeatなどと組み合わせると擬似的な共有ディスクを持ったクラスタを構築することができます。
5年くらい前に話に聞いたときは(主にネットワークが)遅すぎて使えない印象でしたが、今日ではGigabit Ethernetが当たり前に使えるのでどのくらいのパフォーマンスが出るのか興味深いところです。

環境

以下のような環境を用いました。

サーバハードウェア

機種 IBM x3650 2台
CPU Intel Xeon 1.6GHz
Memory 5GB
HDD SAS HDD 146GB RAID1
ネットワーク構成 1000BASE-T クロスケーブルで直結

ソフトウェア

OS Red Hat Enterprise Linux 5.1
DRBD Version 8.2.1

予備テスト

クロスケーブルで直結したネットワーク経由でFTPを使ってスループットを計測したところ、118MBites/secでした。1000BASE-Tの理論値は1Gbit/sec=125MBytes/secなので理論値に近い速度が出ています。
これは一般的なHDDよりも速いのでネットワークがボトルネックになることはなさそうです。

テスト内容

以下の条件でベンチマークを行いました。計測はBonnie++を用いて行いました。

  1. DRBDなし (LVM+ext3)
  2. DRBD片系状態 (LVM+DRBD+ext3、以下同じ)
  3. DRBD Protocol A
  4. DRBD Protocol B
  5. DRBD Protocol C

DRBDのプロトコルは書き込み時の挙動を変えるものです。挙動の違いは以下のようになります。

  • A: ローカルのディスクとローカルのTCP送信バッファに書き込んだ時点で書き込み完了とみなす
  • B: ローカルのディスクとリモートのバッファキャッシュに書き込んだ時点で書き込み完了とみなす
  • C: ローカルとリモート両方のディスクに書き込んだ時点で書き込み完了とみなす

信頼性はC>B>Aの順になり、理論上パフォーマンスはその逆になるはずです。

テスト結果

Bonnie++で測定したシーケンシャルリードとシーケンシャルライトの性能をまとめます。

条件 Read(KB/sec) Write(KB/sec)
DRBDなし 77394 77029
DRBD片系 71354 54634
DRBD A 85821 31885
DRBD B 85018 35459
DRBD C 82589 36727

考察

Read性能

DRBDではRead時はローカルのディスクのみから読み込むのでDRBDなしのときと比べて性能は大きく悪化しないはずです。
DRBDなしとDRBD片系のときを比べると1割弱の性能低下が見られますが、両系運転のときはむしろDRBDなしのときより性能が向上するという結果になりました。いずれも1割前後の差なので誤差と言えなくもないですが直感に反する結果となりました。

Write性能

DRBDなしとDRBD片系では25%程度性能が低下しました。片系運転のときはリモートに書き込むべきデータをローカルのバッファに持つのでそのオーバヘッドのためと考えられます。
両系運転のときはDRBDなしのときの半分程度の性能になりました。
プロトコル間の比較では、理論上はAが最も速くCが最も遅いという結果になるはずですが全く逆の結果になりました。
DRBDの設定ファイルの中にも「予想に反してBよりもCの方が速い」というような記述があるのでたまたまではないようです。

結論

DRBDありの場合、Read性能はDRBDなしの場合と同等かそれよりも速く、Write性能は半分程度になることがわかりました。シビアなWrite性能を要求する場合でなければ十分に実用的と言えそうです。
また、プロトコルについてはCが最も速いという結果が得られている以上Cを使っておけばよさそうです。レイテンシの大きなネットワークなどではまた違った結果が得られるかもしれません。

生データ

DRBDなし
Version 1.03b       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
drbd-a        10G           77029  26 34822  11           77394  12 417.2   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 52789  99 320313  99 63843 100 53663  99 459707 100 64637 100
DRBD片系状態
Version 1.03b       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
drbd-a        10G           54634  19 29561  10           71354  12 269.8   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 50618  95 321557 100 63323 100 53794  99 447638 101 52863  81
DRBD Protocol A
Version 1.03b       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
drbd-a        10G           31885  13 26860   9           85821  15 352.2   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 51042  96 325428 101 47300  74 53406 100 460755 101 64530 100
DRBD Protocol B
Version 1.03b       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
drbd-a        10G           35459  13 27878   9           85018  15 383.3   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 50618  96 320143  99 62851 100 53202 100 475973  98 45312  71
DRBD Protocol C
Version 1.03b       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
drbd-a        10G           36727  13 27039   9           82589  14 353.3   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 43380  82 325401  99 62912 100 53580  99 458653  97 64301 100