2010/02/28

記録面と速度の実際(発端)

さらに今更なHDDであるが、プラッタ容量と速度の関係について調べたときに積み残しになっていた、記録面と速度の関係について調べてみた。

(このエントリは一続きのエントリの1/5)

1.1. シリンダの問題

HDDの記録面に関する用語としてシリンダがある。複数の記録面を通して同じ物理的位置にあり、透視的に見れば同一円筒上にあるトラックをまとめて指す。単にトラックと同じ意味で使われていることもあるが(単一の記録面上では違いはない)、それは今回はおく。

このシリンダに関連して、『ASCII .technologies』 2010年2月号(ストレージ特集)の「ストレージデバイスの技術」という記事に以下の記述があった(P53)。
さらに各ディスクの記録面において、同じ位置にあるセクターをまとめてシリンダーと呼ぶ。通常、HDDは複数枚のディスクで構成されており、さらに一枚のディスクの両面に情報が書き込まれている。この記録面ごとにデータを読み書きするヘッダーが用意されているが、これらのヘッダーはバラバラに動くわけではない。ある記録面のセクターにデータを書き込むとき、別の記録面でも同じ位置にヘッダーがある。そこでセクターをまたがったデータを書き込む際に、各記録面の同じ位置にあるセクター、つまりシリンダーに情報を書き込めば、ヘッドを動かす必要がなくなり、書き込み(あるいは読み出し)を高速に行うことが可能となる。
(注)「ヘッダー」は「ヘッド」の打ち間違えだと思う。

これ自体は従来の標準的な理解で、@ITのInsider's Computer Disctionaryのシリンダ(cylinder)の項にも同趣旨の記述がある。
同心円状のトラックの場合は、同じ位置にある各記録面のトラックをひとまとめにして、シリンダと呼ぶ。同じシリンダ上にあるトラックはヘッドをシークしなくてもよいので高速にアクセスできる。そのため連続してデータを記録する場合は、同一シリンダ上のすべてのトラックへ書き込んでから次のトラックへ移動するのが普通である。

問題はこれが現在のHDDにも当てはまるかで、疑問に思っていた。
  • 現在のHDDではサーボデータをトラックに混在させ、記録面ごとにヘッドのシーク動作をするとされている。ある記録面のトラックに合わせた状態から、(ほぼ同じ位置にあるとしても)他の記録面のトラックにシークし直さずにアクセスできるものか。

  • Adaptive Formattingが適用されたHDDの場合、記録面ごとにトラック密度が異なる=記録面ごとにトラックの本数/位置が変わるはずであり、同じ位置にあるトラックから成るシリンダというもの自体が成立しないのではないか。

  • 実際のベンチマーク結果でも、記録面数と速度の間に有意な関係は見られない。
結論からいえば、こういうシリンダの理解はとっくに古い。というより、シリンダというもの自体が既に意味を失っていると思う。

1.2. 前置き

登場するHDDは新旧取り混ぜて12台。これらのスペックを先に挙げておく。
略称
(便宜的に)
型番容量
(GB)
プラッタ
ヘッド
製造
年月
(注1)
ファーム
ウェア
重量
(g)
(注2)
Travelstar 5K500.B
5K500.B-500aHTS545050B9A300500242009/02PB4OC60F99
5K500.B-500b2009/12PB4OC64G99
5K500.B-120HTS545012B9SA00120112009/06PB1OC64G89
Momentus 5400.5
5400.5-320aST9320320AS320242008/06030397
5400.5-320b2008/09030398
東芝
MK3263GSX32023不明FG020A96
Scorpio
WD2500BEVS250242008/0602.01A0299
Momentus 5400.3 PSD
5400.3PSDST91608220AS160242007/103.ALE97
Travelstar 80GN
80GNIC25N080ATMR0480242005/06MO4OAD4A97
Travelstar 4K120
4K120HTS421240H9AT0040122006/05HACOA70S90
Travelstar C4K60
C4K60-60HTC426060G9AT006024不明00P3A0L259
C4K30-30HTC426030G7AT003012不明00P5A0A347
(注1)5400.5と5400.3PSDの場合は保証期間(工場出荷から5年間)から逆算したもの。
(注2)キッチンスケールによる実測値。

HDDの世代、メーカーをそれなりにカバーしていると思う。1プラッタ1ヘッドのモデルがもっと欲しいところだが、容量がボリュームゾーンから外れているせいか、バルク市場での流通はかなり限られている。

これらを並べたところ。中段左から5K500.B×3、80GN、4K120、下段左から5400.5×2、5400.3PSD、WD2500BEVS、Mk3263GSX、上段はC4K60×2。右上の4台はPATA。裏面のPCBは例によってレジストの色が様々。
12 HDDs: Top side12 HDDs: Bottom side

計測はThinkPad X61s(XP SP3)の本体内に入れた状態で(PATAはウルトラベース内で)、CrystalDiskMarkとHD Tune ProのFile Benchmark以外はパーティションがない状態で行った。X60sの方が全体的に少し速度が上がるが、HD Tune Pro 4.0が使えない問題があるので。

なお、以下では容量、速度とも全てSI接頭辞(1MB=1,000,000Bytes)で表記している。HD Tune ProとIometerの速度は、生の値では2進接頭辞だが、自分がまとめたものはSI接頭辞に換算してある。

1.3. 問題の所在(5K500.Bの場合

HD Tune Pro 4.0ではシーケンシャルのShort strokeとFull testの追加により、狭い範囲(最小1GB)での、より乱れの少ない計測が可能になった。これで5K500.B-500bを見ていたとき、変なことに気づいた。以下は先頭1GBのFull testの結果。
Travelstar 5K500.B-500 b: HD Tune Pro (Seq. Read, 1GB, 64KB, Full)

長さ(容量)がほぼ同じで高さ(速度)が違う4つの水平面が周期的に現れている。この波形は範囲を2GB、3GBと広げても現れるので、そのまま続いているらしい。
Travelstar 5K500.B-500 b: HD Tune Pro (Seq. Read, 64KB, Full) compiled

同じ2プラッタ4ヘッドの5K500.B-500aでも、形は違うが同じように周期的な波形が現れる。
Travelstar 5K500.B-500 a: HD Tune Pro (Seq. Read, 1GB, 64KB, Full)

この波形が何かは分からないが、1プラッタ1ヘッドの5K500.B-120も加えて、計測する範囲を変えてみると以下のようになる。
Travelstar 5K500.B-120, 500 a & b: HD Tune Pro (Seq. Read, 64KB, Full)

これから以下のことが分かる。
  • 5K500.B-500aと500bでは、計測する範囲を狭くするにつれ、波形がはっきり見えてくる。この波形は範囲が広いときには見えてないだけで、途中で形を変えながらも延々続いているらしい。

  • 5K500.B-120では、階段状の水平面があるだけで(数は公式スペックのゾーンと同じ24)、範囲を狭くしても同じような波形は出ない。ということは、記録面が単一か複数かで違いがあるらしい。
この波形がHD Tune Proの計測上の幻でないかを確認するため、5K500.B-500bの1GBの範囲に現れた各水平面に収まるようパーティションを作成し、CrystalDiskMarkでシーケンシャルの速度を計測してみた。それをHD Tune Proの結果とまとめたのが以下。
Travelstar 5K500.B-500 b: HD Tune Pro & CrystalDiskMark (Seq. Read & Write) compiled

速度の変化は概ね一致している。つまり、これらの領域ごとの速度差は現に存在している。これは何を意味するのか。

1.4. 検討

まずシーケンシャルな速度に関係する要因を確認すると、単位時間当たりにアクセス可能なデータ量は以下のように表せる。

[線記録密度(Bit/mm)×{トラック半径(mm)×2×π}(トラック長)÷8(Byteへ換算)÷1,000,000(MBへ換算)](トラック当たり容量)×{回転数(RPM)÷60}(秒当たり回転数)=単位時間当たりにアクセス可能なデータ量(MB/s)

これにシーク時間やHDDのコントローラの能力、バッファなど他の要因が加わって実際の速度になる。

従来のシリンダの理解では、シーケンシャルアクセスの際、あるトラックを過ぎると同じシリンダの別の記録面のトラックに移動し、シリンダの終端まで来ると次のシリンダに移動する。この場合、記録面ごとに線記録密度が違い、速度も違ったとしても、シリンダ当たりの容量を超える領域で計測して平均化すれば、各記録面の速度は表に出てこないはずである。

このシリンダ当たり容量を知るには、先にトラック当たり容量を知る必要があるが、これには2通りの計算法がある。
  1. 1番目として、前に実測したときにプラッタ上のデータ領域の外径半径は30.6mmと分かっているので、5K500.Bの公称スペックの線記録密度(最大、1356KBPI)から、以下のように計算できる。

    1356(KBPI)×1,000(BPIへ換算)÷25.4(mmへ換算)×{30.6(mm)×2×π}(最外周トラック長)÷8(Byteへ換算)÷1,000,000(MBへ換算)≒1.285(MB)

    これは最外周ゾーン(ゾーン0)の最外周トラック、すなわち最長のトラックで、かつ線記録密度が最大の場合なので、これがゾーン0のトラック当たり容量の上限になる。正確には、線記録密度は原理的に、同じゾーン内では外周より内周の方が高くなるので、公称スペックの最大値が最内周での数字であれば、最外周ではより低くなり、トラック当たり容量もより小さくなる。

  2. 2番目として、5K500.BのSpecificationにある例ではゾーン0のトラック当たりセクター数は1920なので、先頭1GBは確実にゾーン0内だろうから、以下のように計算できる。

    1920(トラック当たりセクター数)×512(Byteへ換算)÷1,000,000(MBへ換算)≒0.983(MB)

    このSpecificationの例に従うとトラック密度が公称スペックのほぼ上限になることが分かっている。逆に、線記録密度はこれより低くならないはずなので、これがゾーン0のトラック当たり容量の下限になる
よって、ゾーン0のトラック当たり容量は約0.983~1.285MBとなるので、シリンダ当たり容量はトラック4本分で約4~5MBとなる。

一方、HD Tune Proはログを見ると、計測する範囲が1GBのときは5MBごとに計測値の平均をとって記録していくようである。したがって、この5MBの中にシリンダが収まるので、記録面に速度差があっても平均化されるはずである。また、先頭1GB内であれば全ての記録面がゾーン0で、ゾーンの変化はないだろうから平均も変わらず、グラフは水平になるはずである。

従来の理解ではこの計測結果を説明できない。

また、これが記録面の速度とは別の要因による可能性は除外していいと思う。環境条件が変わらない短時間の計測中に、決まった位置と一定の容量を持つ領域の間で10MB/s近くの速度差を生じさせることは他の要因では考えにくい。

1.5. 記録面の仮説

改めて整理すると、
  • 5K500.B-120に見られるように、1つの記録面(の1つのゾーン)では決まった高さ(速度)の水平面になる。
  • 5K500.B-500bでは、4つのそれぞれ決まった高さ(速度)の水平面が周期的に現れる。この水平面の長さ(容量)はほぼ同じ。
  • 5K500.B-500の記録面は4つ。
  • Adaptive Formattingでは記録面(のゾーン)によって速度に個体差がある。
これらを考え合わせると、割と簡単な仮説を提出できる。すなわち、

シーケンシャルアクセスの際、トラックを過ぎるごとに他の記録面のトラックに移動するのではなく、同じ記録面の隣接するトラックに移動し、これを一定の範囲で繰り返してから、他の記録面に移動する。

言い換えれば、

HDD中の(物理的)アドレスは、各記録面をトラック一本ごとに分解して、シリンダに従って一本の線に繋いでいるのではなく、各記録面をある程度のトラックの本数をまとめた短冊状に切り揃えて、これらを並べて繋いでいる。

こういう説明を自分は読んだことはないが(注)、色々なことをうまく説明できるし、他のHDDの計測結果にも整合する。
  • 4つの水平面は、それぞれの記録面にアクセスしている状態で、その間はそれぞれの記録面の速度が出ている。
  • 水平面の容量がほぼ同じなのは、4つの記録面を均等に使っていくため。
  • Adaptive Formattingでは記録面ごとにトラック密度が違う=トラックの数/位置が違うことが問題でなくなる。
(注)HDDに関するまとまった資料として『ハードディスク装置の構造と応用』(CQ出版社)がある。最近改訂版が出たので少し期待してチェックしたが、この面には触れられてなかった。

この仮説に立つと、5K500.Bの先頭1GBにおける波形は以下のように解釈できる。
Travelstar 5K500.B-120, 500 a&b : HD Tune Pro (Seq. Read, 1GB, 64KB, Full) compiled

先頭は狭い範囲の計測ではどうしてもノイズ的な動きが入るので無視するとして、
  • 5K500.B-500bでは、各93MBの容量を持つ4つの記録面の組(全体で370MB)が繰り返し現れている。

  • 5K500.B-500aでは、2つの高さの水平面しか見えてないので、これ1つが1つの記録面なのか、2つの同じ速度の記録面が並んでいるのか判別できないが、500bの組の長さから、とりあえず同じ速度の記録面が2つずつ現れているものと解釈した。それでも500aの組(全体で380MB)の方がやや長い。

  • 記録面の速度は、全体的に5K500b-500aの方が高い。500aの高い面で92MB/s程度、500bの最低の面で75MB/s程度なので、18%の幅がある。これは前の計算で線記録密度の幅が20%強あるという結果が出たのと符合する。
次に他のHDDの例を見ていく。

[修正]

グラフの元データの換算を間違えていたので修正した。

0 コメント :