小論ハードディスクI/O性能評価
How to evaluate the I/O performance of HDD.
HDDを購入する際、一つ重要な要素として性能(速度)が挙げられます。
でも、速さを重視するならお金はかかりますから、どれぐらいの性能が必要かをまず検討したほうが良いでしょう。
HDDの性能はいくつかの読込&書込のディレ時間によって左右されます。
指標として「平均アクセス時間」を計算する必要があります。
平均アクセス時間 AAT = AST + ARL + TT * AAT:(Average access time)平均アクセス時間 AST:(Average seek time)平均シーク時間 ARL:(Average rotational latency)平均回転待ち時間 TT:(Transfer time)転送時間
現在のCPUにとっては1ミリ秒はとても膨大な時間単位です。 周波数1GHzのCPUは理論上1msで1,000,000指令の処理を行えます。 とても短いアクセス時間での無駄な消耗でもシステム全体の性能に影響が出ることがすぐわかるでしょう。 システム全体にI/O待ちが発生してしまうからです。
平均シーク時間 HDDのヘッダがランダムシリンダー間で移動所要時間をミリ秒単位で測ります。 シーク時間はに基本的に読込&書込指令後ヘッダの停止位置から目的地までの距離よります。 一般的に業務用ハイエンドHDDの平均シーク時間は8ms-4ms程度で、個人パソコンは8ms-12msぐらいかかります。 FDとCDドライブならもっと時間かかります(FDDは100-200ms、CDDは120-400ms位) ソリッドステート媒体(SSD等)は物理ヘッダの移動がないため、0.1ms以下で済みます。 シーク時間の小さな差でも大きな差となります。6msと9msあまり差がないと思われるが、 9msは6msの150%となっていますので、システムの動作は50%遅くなります。 (50%の余計な時間がかかります) HDDのDatasheetより値入手可能です。
平均回転待ち時間 セクタがヘッダからTrackアクセス可能になるまで物理的にディスクの回転所要時間です。 平均的に回転一回の所要時間の半分となっています。 たとえば、7200RPMのHDDなら 一回転所要時間:60000ms/7200r = 8.33ms 平均回転待ち時間:8.33ms/2 = 4.17ms 同じように10000RPMなら3ms、15000RPMなら2msとなります。 これは、アクセスしたいデータと丁度擦れ違った直後だと、一回転を待たないといけないので、 7200RPMのHDDの場合最悪8.33msかかります。平均ですと、半分の値4.17msを採用します。 10000RPMのHDDを除きあまり5ms以下のシーク時間は見ないですね。 HDDのDatasheetより値入手可能です。
転送時間 転送率によりますが、影響要素は1)HDA(Hard Disk Assembly)、2)使用するコントローラ次第です。 主な転送率一覧: 〜〜内蔵型HDDの規格〜〜 HDDの種類 転送速度 転送率 S-ATA2 3040Mbps 380MB/sec S-ATA150 1520Mbps 190MB/sec ATA133 1064Mbps 133MB/sec ATA100 800Mbps 100MB/sec 〜〜外付け型HDDの規格〜〜 HDDの種類 転送速度 転送率 GigaBitLAN 1000Mbps 125MB/sec USB2.0 480Mbps 60MB/sec IEEE1394 400Mbps 50MB/sec USB1.1 12Mbps 1.5MB/sec 転送データサイズ÷転送率=転送時間 例一つのデータブロック8KBとして: 8KB / (133MB/s) = 8KB / (136.192KB/ms) = 0.06ms この値は回転待ち時間とシーク時間と比べるととても小さいため、無視される場合が多いです。
DBトランザクション性能計算例: HDD:HDS728040PLA320 Rotational speed (rpm) 7,200 (=> ARL=60/7200/2) Average seek time (ms) 8.8 (AST) Media transfer rate (max. Mbits/sec) 757 (= 96.4 MB/s) Interface transfer rate (max. MB/sec) 133 ATT = AST + ARL + TT = 8.8 + 4.17 + 0.17 = 13.1ms => 1000 / 13.1 = 76.3 trx/s * trx/s : Transaction Per Second 一般的にOLTPの場合AST+ARL>>TT、DSS(DWH)の場合AST+ARL<TTの傾向があります。 これはOLTPの一回アクセス時間が短く、アクセス回数が多いため、 主にランダムアクセスでヘッダの移動と回転待ちが多数発生します 逆にDSSの場合、一回読み込むデータ量が膨大のため、シーケンシャルアクセスが発生し、 シーク時間よりデータ転送がボトルネックになりがちです。
平均シーク時間の測定 上記のHDDならAST8.8ms、ARL4.17msで、一回HDDにアクセスすると13ms位かかります。 アクセス性能の良いHDDを探すならアクセス時間が短く、回転(RPM)速いHDDが良いわけです。
Linux上のBonnie++ツールを使って測ってみた: 上記のHDDの理論値はATT 13.1ms resp. 76.3 trx/sでした。 [root@CentOS53 bonnie++-1.03]# ./bonnie++ -d /tmp -u root Using uid:0, gid:0. Writing with putc()...done Writing intelligently...done Rewriting...done Reading with getc()...done Reading intelligently...done start 'em...done...done...done... Create files in sequential order...done. Stat files in sequential order...done. Delete files in sequential order...done. Create files in random order...done. Stat files in random order...done. Delete files in random order...done. Version 1.03 ------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 CentOS53.xxxx.sm 2G 23858 53 23427 8 10858 2 28498 54 27734 2 90.0 0 ランダムアクセス実測値は90trx/s ie. AAT 11.1msです