Linux Tips – HDDベンチマーク手順+性能測定結果一覧(hdparm,dd,bonnie++)
システムのパフォーマンスが思うように上がらない場合、ハードディスクのIO性能がボトルネックになっているケースが多く見られます。
システムの環境構築が完了した後には、ハードディスクのIO性能を必ず測定しておきましょう。ここで紹介するHDDベンチマークを実行して、測定結果の妥当性を評価することによって、ほとんどのケースでディスクIO性能に起因する性能問題を未然に検知することが可能です。
ハードディスクのIO性能を左右する要素
システムのパフォーマンスが思うように上がらない場合、ハードディスクのIO性能がボトルネックになっているケースが多く見られます。
以下に主要な項目を挙げるように、ハードディスクのIO性能は様々なシステム構成要素やその設定によって左右されます。システムのインフラ基盤で性能問題が発生することを未然に防ぐためには、サーバ環境・ストレージ環境の設計段階からこれらの項目を計画、確認しておきたいところです。
- ハードウェアRAID構成
- ソフトウェアRAID構成
- HDD単体の基礎性能 (スピンドル回転数、シーク時間等)
- パーティションのHDD上の位置 (内周部/外周部)
- チップセットの性能
- RAIDコントローラー、SCSI/IDEアダプターの性能
- BIOS設定
- Linuxカーネル
- ドライバーのバージョン
- ファームウェアのバージョン
- ファイルシステム (参考:Linuxファイルシステムベンチマーク 第1回 , 第2回 )
- I/Oスケジューラ
- NFS設定 (NFSマウント領域の場合)
HDDベンチマーク手順 – 初級編
システムの環境構築が完了した後には、ハードディスクのIO性能を必ず測定しておきましょう。ここで紹介するHDDベンチマークを実行して、測定結果の妥当性を評価することによって、ほとんどのケースでディスクIO性能に起因する性能問題を未然に検知することが可能です。
性能測定やベンチマークと聞くと、難しそうなイメージを持たれるかも知れませんが、実はそれほど難しい手順が必要な訳ではありません。次のような1行のOSコマンド+bashを用いることで、シーケンシャルアクセスの(連続したディスク領域にアクセスする時の)read性能・write性能を簡単に測定することができます。
read性能の簡易測定
hdparmコマンドに「-t」オプションを付けて実行し、ハードディスクのread性能を測定します。
/dev/sda2 の部分は、測定対象のパーティションによって適宜変更して下さい。
# hdparm -t /dev/sda2
出力結果の中で「**.** MB/sec」がread性能を表します。
次のように実行すると、測定の毎に10秒間の停止を入れながら計12回実行することができます。
# for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 10;echo $'\n\n' $i;hdparm -t /dev/sda2;done
出力結果の中でread性能を表す「**.** MB/sec」を確認して平均値を計算して下さい。最大・最小の結果、それぞれ1回分を除いた計10回分を対象にして平均値を計算すると適切な測定結果が得られます。
write性能の簡易測定
ddコマンドで1GBのファイルを作成して、ハードディスクのwrite性能を測定します。
/tmp/hdparm_write.tmp の部分は、測定対象のパーティションによって適宜変更して下さい。
# time dd if=/dev/zero of=/tmp/hdparm_write.tmp ibs=1M obs=1M count=1024
出力結果の中で「real * m **.*** s」が1GBのファイル作成に掛かった時間を表します。最近のカーネルに含まれるddでは出力結果に「MB/s」が表示されるので、この値を確認しても良いでしょう。
次のように実行すると、測定の毎に10秒間の停止を入れながら計12回実行することができます。
実際に合計12GBのファイルを作成するので、パーティションの空き容量には十分ご注意下さい。
# for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 10;echo $'\n\n' $i;date;time dd if=/dev/zero of=/tmp/hdparm_write$i.tmp ibs=1M obs=1M count=1024;date;done
出力結果の中でwrite時間を表す「real * m **.*** s」を確認して1GBのファイル作成に掛かった平均時間を計算して下さい。最大・最小の結果、それぞれ1回分を除いた計10回分を対象にして平均値を計算すると適切な測定結果が得られます。
HDDベンチマーク手順 – 中級編
bonnie++ によるread/write性能・ランダムアクセス性能の測定
IO性能の測定に専用のハードディスクベンチマークツールを用いる方法もあります。例えば、「bonnie++」というOSSのディスクベンチマークを用いると、次のように簡単なコマンドでシーケンシャルアクセスのread/write性能やランダムアクセス性能の測定を一度に行うことができます。
/tmp の部分は、測定対象のパーティションによって適宜変更して下さい。
$ ./bonnie++ -d /tmp
bonnie++の詳細な使用方法については 「bonnie++の使用方法」 のページで紹介しています。bonnie++を利用される時は、ぜひこちらのページも参考にして下さい。
HDDベンチマーク手順 – 上級編
ORION による負荷特性を指定した性能測定
Oracle社が提供するディスクベンチマークツール「ORION」を用いると、測定対象のファイル容量やread/writeの割合等、詳細な条件を指定してIO性能を測定することができます。
次の実行例では、writeの割合が20%の負荷に対して「最高 78.12 MB/sec」「最高 204 IOPS」「最短 5.02 msec」のディスクIO性能を発揮できることが分かります。
$ $ ./orion_linux_x86-64 -run advanced -testname orion-test -write 20
Maximum Large MBPS=78.12 @ Small=0 and Large=17 Maximum Small IOPS=204 @ Small=10 and Large=0 Minimum Small Latency=5.02 @ Small=1 and Large=0
ORIONは無償で利用できるので、SSDの性能評価等にお役立て下さい。ORIONの詳細な使用方法については 「Oracle ORIONの使用方法」 のページで紹介しています。ORIONを利用される時は、ぜひこちらのページも参考にして下さい。
性能測定結果一覧
実環境での測定結果を一覧にまとめました。測定値の妥当性を確認する際、参考にして頂ければと思います。なお、記載値はIO性能を保障するものではありません。あくまで参考値としてご覧下さい。
- 他処理が実行されないサーバ環境構築後の無風時に測定
- ファイルシステムはext3
- 上記の簡易測定の測定結果は10秒間隔で12回実行、最大・最小の結果、それぞれ1回分を除く10回の平均値を「MB/sec」値で記載
- bonnie++を用いた測定結果は5回実行、Sequential Input(read)Block、Sequential Output(write)Blockの最大値を「M/sec」値で記載、Random Seeks(seek)の最大値を「/sec」値で記載
- 小数点以下は切り捨て
H/W | HDD SSD | I/F | H/W RAID | OS kernel | 簡易測定 | bonnie++ | |||
read | write | read | write | seek | |||||
OptiPlex GX115 | 40GB 7.2K * 1 (6L040J2) | Ultra ATA/100 | no | RedHat 8.0 2.4.18-14 | 35 | 33 | 51 | 37 | 180 |
CentOS 3.6 2.4.21-37.EL | 40 | 30 | 39 | 39 | 191 | ||||
Fedora Core 4 2.6.11-1.1369 [ SE Linux / non SE Linux ] | 35 | 19 | 32 | 20 | 177 | ||||
39 | 22 | 32 | 22 | 181 | |||||
OptiPlex GX240 | 40GB 7.2K * 1 (6L040J2) | Ultra ATA/100 | no | RedHat 8.0 2.4.18-14 | 35 | 33 | 55 | 39 | 193 |
CentOS 3.6 2.4.21-37.EL | 40 | 33 | 38 | 41 | 195 | ||||
Fedora Core 4 2.6.11-1.1369 [ SE Linux / non SE Linux ] | 35 | 19 | 32 | 24 | 183 | ||||
39 | 24 | 39 | 25 | 186 | |||||
ML350 G3 | 9GB 10K * 4 | Ultra 160 SCSI | 0 | CentOS 3.6 2.4.21-37.ELsmp | 52 | 43 | 51 | 59 | 619 |
9GB 10K * 6 | 0 | 52 | 57 | 52 | 72 | 681 | |||
9GB 10K * 2 | 1 | 38 | 26 | 31 | 27 | 422 | |||
9GB 10K * 4 | 5 | 45 | 11 | 45 | 13 | 484 | |||
9GB 10K * 6 | 5 | 37 | 12 | 35 | 15 | 613 | |||
9GB 10K * 4 | 0 | CentOS 4.4 2.6.9-42.ELsmp | 62 | 83 | 62 | 105 | 646 | ||
ML110 G4 | 160GB 7.2K * 1 Cache : Disable | SATA (Serial ATA) | no | CentOS 3.6 2.4.21-37.ELsmp | 74 | 10 | 73 | 7 | 196 |
160GB 7.2K * 1 | no | 74 | 100 | 72 | 69 | 220 | |||
160GB 7.2K * 2 | 0 | 147 | 127 | 142 | 116 | 343 | |||
160GB 7.2K * 2 | 1 | 73 | 96 | 73 | 70 | 416 | |||
ProLiant MicroServer | Intel X25-M 80GB * 1 | SATA 2 (3.0 Gb/s) | no | CentOS 6.0 2.6.32-71.el6 .x86_64 | 172 | 103 | 269 | 73 | 11669 |
Intel SSD 320 120GB * 1 | no | 180 | 180 | 290 | 138 | 9238 | |||
DL360 G4 | 36GB 15K * 2 | Ultra 320 SCSI | 0 | Fedora Core 4 2.6.11-1.1369 _FC4smp non SE Linux | 73 | 126 | 158 | 120 | 860 |
1 | 90 | 63 | 88 | 61 | 935 | ||||
Ultra 320 SCSI 128MB BBWC | 0 | 76 | 71 | 158 | 94 | 841 | |||
1 | 91 | 46 | 88 | 56 | 886 | ||||
DL380 G4 | 146GB 15K * 2 | Ultra 320 SCSI | 1 | RedHat AS 3 2.4.21-37.ELsmp | 88 | 78 | 79 | 79 | 997 |
DL380 G4 - MSA 30 | 146GB 15K * 4 | Ultra 320 SCSI | 0 | 87 | 199 | 79 | 223 | 958 | |
146GB 15K * 6 | 0 | 87 | 175 | 88 | 226 | 1243 | |||
146GB 15K * 2 | 1 | 89 | 90 | 83 | 82 | 965 | |||
146GB 15K * 4 | 1+0 | 88 | 135 | 90 | 126 | 1285 | |||
146GB 15K * 6 | 1+0 | 70 | 137 | 82 | 130 | 1377 | |||
146GB 15K * 4 | 5 | 81 | 47 | 52 | 45 | 1026 | |||
146GB 15K * 6 | 5 | 85 | 52 | 51 | 48 | 1183 | |||
ThinkPad X40 | 20GB 4.2K * 1 (DK14FA-20) | Ultra ATA/100 | no | CentOS 3.6 2.4.21-37.EL | 13 | 12 | 11 | 14 | 85 |
xSeries 305 | 80GB 7.2K * 2 | Ultra ATA/100 | 1 | RedHat AS 2.1 2.4.9-e.24 | 46 | 44 | 45 | 43 | 208 |
xSeries 335 | 36GB 15K * 1 | Ultra 320 SCSI | no | RedHat WS 2.1 2.4.9-e.12smp [ ver 2.02.01 / ver 2.05.08 ] | 72 | 11 | 98 | 9 | 395 |
72 | 60 | 99 | 68 | 461 | |||||
xSeries 335 | 36GB 10K * 2 | Ultra 320 SCSI | 1 | Fedora Core 3 2.6.9-1.667smp non SE Linux | 63 | 48 | 52 | 44 | 477 |
36GB 10K * 1 | no | 62 | 48 | 46 | 33 | 267 | |||
xSeries 445 - FAStT 600 | 73GB 15K * 5 | 2Gbps FC | 0 | RedHat AS 2.1 2.4.9-e.24 | 137 | 60 | 66 | 84 | 609 |
73GB 15K * 4 | 1+0 | 136 | 56 | 51 | 60 | 481 | |||
x3650 | 73GB 15K * 2 | SAS (Serial Attached SCSI) | 1 | RedHat AS 4 2.6.9-55.ELsmp | 128 | 100 | 82 | 64 | 537 |
300GB 15K * 4 | 1+0 | 239 | 240 | 165 | 119 | 502 |
補記事項
- ML110 G4にSATA HDDを搭載する構成で、Write Cacheを「Disable」に設定するとwrite性能が極端に悪いことを確認しました(一覧表の赤太字部分)。内蔵SATA RAIDコントローラの「Create Array」、「Configure Drives」メニューからドライブを構成した場合、デフォルトの設定は「Write Cache : Disable」になるため、注意が必要です。Write Cacheを「Enable」に設定することでwrite性能が大幅に向上することを確認しています。
- xSeries 335にRedHat WS 2.1(update無し)をインストールした構成で、write性能が極端に悪いことを確認しました(一覧表の赤太字部分)。これはOSインストール時にデフォルトで導入されるデバイスドライバーの不具合によるものです。
IBM社のサイトで公開されている「xSeries – Red Hat Enterprise Linux ES/WS 2.1 導入ガイド(2004-04-18版)」に記載の手順に従い、Fusion MPT base driver、Fusion MPT SCSI Host driver を 2.02.01 から 2.05.08 にバージョンアップすることによってこの不具合を解消しています。 - OSインストール時にSE Linuxを導入した場合、実行中のプロセス、ファイルには「セキュリティコンテキスト」が付与されます。また、ポリシーデータベースの保持、適合チェック処理のオーバーヘッドが発生することにより、システムのパフォーマンスは非導入時と比較して明らかに低下します。
関連記事
Linux Tips – bonnie++の使用方法
Oracle ORIONの使用方法 (Linuxディスクベンチマーク)
Linuxファイルシステムベンチマーク第1回 ext2,ext3,JFS,ReiserFS,XFS,NTFS
Linuxファイルシステムベンチマーク第2回 ext3,ext4,JFS,ReiserFS,XFS,NILFS2
RAMディスク(/dev/shm)のIO性能をチューニングに活用する方法
SSD I/Oブロックサイズの調整によるチューニング効果検証 (DC S3700編)
2.5インチSSDを変換アダプタで3.5インチHDDベイに搭載する方法
「Linux」カテゴリーの記事一覧
参考になるサイト
富士通 – PRIMERGY IAサーバ解説
ストレージシステムの解説の中で、HDDの基本面やRAID構成の性能比較に関する情報が充実。
日本IBM – IBM RAID コントローラー比較表 (*PDF)
RAID-1E,RAID-50,RAID-60を含む各RAIDレベルの特性を図解入りで解説した資料。
パフォーマンス面やディスク容量使用率の観点から各RAIDレベルを比較した一覧表も有り。
日本HP – HP SASベンチマーク パフォーマンステスト
HP ProLiantサーバを用いたSerial Attached SCSI(SAS)とUltra320 SCSIのベンチマーク結果。
Microsoft Jetstress 2004のベンチマークでは、外付けストレージのRAIDレベル毎の性能比較有り。
日本HP – SATAハードディスクとSAS/SCSIハードディスクの違いと選定のポイント
ハードディスクの規格毎に設計思想の違いを解説。システム構成選定の参考になる。
@IT – 全貌を現したLinuxカーネル2.6[第1章] – ファイルI/Oの効率化
カーネル2.4、カーネル2.6のファイルI/Oの仕組みに関する解説。
@IT – ハードディスクのS.M.A.R.T.情報を表示するには
ハードディスクの持つ自己診断機能 S.M.A.R.T. の情報を取得するsmartctlコマンドの解説。