HDDドライブのIOPSを求めてみる
HDDドライブのIOPSを求めてみる。
IOPSとは、1秒間にディスクが処理可能なI/O数のこと。
IOPSを求めるためには、ディスクのサービス時間(1I/Oにかかる時間)を計算する必要がある。
なぜなら、ディスクのサービス時間の逆数がIOPSとなるため。
ディスクのサービス時間は以下の要素で構成される。
Ts = T + L + X
Ts:ディスクのサービス時間、T:シークタイム、L:回転遅延、X:内部転送レート
各要素について説明していく。
シークタイム
HDDのR/Wヘッド(データを読み書きする部品)が、目的の位置まで移動するのにかかる時間。
以下写真の赤枠がR/Wヘッド。
回転遅延
プラッタと呼ばれるデータを含む円盤が回転する時間。ミリ秒単位で表される。
回転遅延は回転速度から求める。
回転速度はrpmで表され、これは「1分間に何回転するか」を示す。
例えば、5400rpmであれば「1分間に5400回転する」ということ。
また、回転遅延は平均回転時間が使用される。
平均回転時間は完全な回転にかかる時間を2で割ったものとなる。
試しに5400rpmの回転遅延を求めてみる。
5400rpm = 90rps ※rpsは「1秒間に何回転するか」を示す。
1/90 × 1/2 = 0.0055… ≒ 5.5ミリ秒
よって、5400rpmのディスクの回転遅延は約5.5ミリ秒となる。
内部転送レート
内部転送レートは、プラッタからデータを読み込み~ディスク内のバッファに読み込まれるまでの時間のこと。
IOPSを求めてみる
平均シークタイム5ミリ秒、7200rpm、転送レート40MB/sのディスクについて、I/O平均サイズ64KBのアプリケーションでアクセスする。
この状況におけるディスクの最大IOPSを計算していく。
まず、ディスクのサービス時間を求める式をおさらい。
Ts = T + L + X
Ts:ディスクのサービス時間、T:シークタイム、L:回転遅延、X:内部転送レート
シークタイムはT=5ms。
次に、回転遅延を求める。
7200rpm = 120rps
L = 1/120 × 1/2 = 0.00416… ≒ 4.2ms。
最後に、内部転送レートを求める。
アプリケーションのI/O平均サイズは64KBであるため、1I/Oあたりの時間を求める。
X = 64KB/40MB = 0.0016秒 = 1.6ミリ秒。
よって、サービス時間Tsは、
Ts = 5 + 4.2 + 1.6 = 10.8ms。
IOPSはサービス時間の逆数なので、
IOPS = 1/Ts = 0.0925 × 1000*1 = 93IOPS
以上より、IOPSは93となる。
また、この値はディスク使用率が100%時のものであるため、例えば常時80%程度にしたいといった場合には0.8をかけた値がIOPSとなる。
この場合では93×0.8 = 74IOPS。
*1:サービス時間の単位はミリ秒であるが、IOPSは1秒間のI/O数であるため。