ハードディスク1本のIOPSについて考える

今回はハードディスク 1本の性能について考えてみたいと思いますが、まずはその前にハードディスクにデータを読み書きするときに、どのようなことが行われているのかをおさらいしておきましょう。

ハードディスクのアクセス時間とは?

ハードディスクにデータの読み書きの命令が発生すると、アームの先端がターゲットとなる部分に移動します。この動作にかかる時間をシーク時間と呼びます。位置決め時間と呼ぶこともあります。次にデータが書き込まれている部分が回転してアームの先端まで移動してくるのを待ちます。この時間を回転待ち時間と呼びます。そして、アラームの先端に来たデータを読み込む時間をデータ転送時間と呼びます。下図の1~3のイメージですね。

シーク時間は、シーク前のアラームの位置とデータが記載されているトラックで決まるので、かかる時間は毎回異なります。よって、シークにかかる時間は「平均シーク時間」で考えます。回転待ち時間も同様に、シークが完了したときのデータの場所によって、時間が変わってきます。回転にかかる時間は 「平均回転待ち時間」と呼びます。平均シーク時間と平均回転待ち時間の合計を 「平均待ち時間」  とよび下記の式で表します。

・平均待ち時間 = 平均シーク時間 + 平均回転待ち時間 

シークと回転待ちが終わると、実際にデータの読み書きをします。この読み書きにかかる時間をデータ転送時間と呼びます。シーク開始からデータ転送完了までにかかる時間をアクセス時間とよび、下記の式で表すことができます。

・アクセス時間 = 平均待ち時間 + データ転送時間
・アクセス時間 = 平均シーク時間 + 平均回転待ち時間 + データ転送時間

アクセス時間は下記のアニメーションのイメージですね。

IOPSとは?

IOPSとは、Input/output operations per second の略で、簡単にいうと1秒間に何回のIO処理ができるかを示す指標で、ディスクの性能を表すのによく用いられます。ここでいうIOとは1回のデータを読み書きする動作をさしており、先程解説した、シーク、回転待ち、データ転送が1回のIOにあたります。従って、1回のIOにかかる時間は下記の式で表すことができます。

・1回のIOにかかる時間 = アクセス時間
・1回のIOにかかる時間 = 平均待ち時間 + データ転送時間
・1回のIOにかかる時間 = 平均シーク時間 + 平均回転待ち時間 + データ転送時間

ここまでのことをまとめると下図のようになります。

IOPSのデータ転送時間を考えるときには、一般的に転送するデータの大きさを4KByte (4096Byte)で計算します。これは、OSがデータをディスクに書き込む最小単位が標準で4096Byteだからです。ちなみに、このOSがディスクにデータを書き込む最小単位を、Windows だとアロケーションユニットサイズやクラスタサイズと呼び、Linuxだとブロックサイズと呼びます。
IOPSとは1秒に何回のIO処理ができるかを示す性能指標ですので、下記の式で表すことができます。

・IOPS = 1/ 1回のIOにかかる平均時間[秒]
・IOPS = 1/ アクセス時間[秒]
・IOPS = 1/ (平均待ち時間[秒] + データ転送時間[秒])
・IOPS = 1/ (平均シーク時間[秒] + 平均回転待ち時間[秒] + データ転送時間[秒])

これでIOPSの求め方はわかりましたね。 それでは次にIOPSを求めるのに必要な平均シーク時間、平均回転待ち時間、データ転送時間について解説することにします。

ここではHPのサーバに搭載可能な15K rpm SASディスク(型番870753-B21)を例にIOPSを考えてみることにします。

平均シーク時間

平均シーク時間は利用するディスクのカタログを確認する必要があります。HP製のサーバの場合だと、QuickSpecに記載されています。平均シーク時間は 2.72 ミリ秒であることがわかりますね。見ての通り同じ容量のSASでもシーク時間はメーカーや型番によって異なるので注意してください。
※「ディスクの型番 QuicK Speck HDD」などで検索すると見つかります

平均回転待ち時間

平均回転待ち時間は、ディスクの回転速度から求めます。ディスクを選択するときに、15krpm とか、7.2 rpmとかの指標が記載されているかと思いますが、これがディスクの回転速度を示しています。rpmは、revolutions per minute の略で、1分間にディスクが何回転するか示しているわけですね。 15krpm だと、1分間に15,000回転します。1分間、つまり、60秒間に15,000 回転しているので、1回転にかかる時間は、60秒を15,000で割ってやってると求めることができます。そうすると、0.004 秒、つまり、4ミリ秒となります。
回転待ち時間は、シークが完了した後の、データの場所によって異なります。データの位置が一番遠い場合だと、アームの先端にデータが回転してくるまでに、4秒まるまるかかりますが、データの位置がアームの直前にあれば、0秒です。

平均回転待ち時間は、その中間になります。この場合は2秒ですね。平均回転待ち時間は下記の式で表すことができます。

・平均回転待ち時間(秒) = 60÷ディスクの1分間の回転数(rpm)÷2

データ転送時間

データ転送時間は下記の計算式から求められますが、1トラックあたりの記憶容量が公開されていないことが多く、求めることが困難です。

・データ転送時間 = 転送するデータのバイト数/データの転送速度
※データの転送速度 = 1トラックあたりの記憶容量/1回転の時間

データ転送時間は誤差の範囲ですので、ここでは0.5ミリ秒としておきましょう。

IOPSを求める

ここまででの情報でアクセス時間はわかりますね。

・アクセス時間 = 2.72ミリ秒 + 2ミリ秒 + 0.5ミリ秒 = 5.22ミリ秒

それでは最後にIOPSを計算して見ましょう。

IOPS = 1/アクセス時間(秒)なので、1/0.0052 = 192.3となり、
このディスクは192.3 IOPSとなります。

今回は以上です。RAIDアレイ全体のIOPSについては次回以降解説することにします。

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。