yassy's note

なんかかきます

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ヘッド。 f:id:yassy_225:20210704163504j:plain

回転遅延

プラッタと呼ばれるデータを含む円盤が回転する時間。ミリ秒単位で表される。
回転遅延は回転速度から求める。

回転速度は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数であるため。