world2010/02/28記録面と速度の実際(発端)さらに今更なHDDであるが、プラッタ容量と速度の関係について調べたときに積み残しになっていた、記録面と速度の関係について調べてみた。シリンダの問題HDDの記録面に関する用語としてシリンダがある。複数の記録面を通して同じ物理的位置にあり、透視的に見れば同一円筒上にあるトラックをまとめて指す。トラックと同じ意味で使われていることもあるが(単一の記録面上では違いはない)、それは今回はおく。2010年2月号(ストレージ特集)の「ストレージデバイスの技術」という記事に以下の記述があった(P53)。各ディスクの記録面において、同じ位置にあるセクターをまとめてシリンダーと呼ぶ。通常、HDDは複数枚のディスクで構成されており、さらに一枚のディスクの両面に情報が書き込まれている。この記録面ごとにデータを読み書きするヘッダーが用意されているが、これらのヘッダーはバラバラに動くわけではない。ある記録面のセクターにデータを書き込むとき、別の記録面でも同じ位置にヘッダーがある。そこでセクターをまたがったデータを書き込む際に、各記録面の同じ位置にあるセクター、つまりシリンダーに情報を書き込めば、ヘッドを動かす必要がなくなり、書き込み(あるいは読み出し)を高速に行うことが可能となる。(注)「ヘッダー」は「ヘッド」の打ち間違えだと思う。Disctionaryのシリンダ(cylinder)の項にも同趣旨の記述がある。同心円状のトラックの場合は、同じ位置にある各記録面のトラックをひとまとめにして、シリンダと呼ぶ。同じシリンダ上にあるトラックはヘッドをシークしなくてもよいので高速にアクセスできる。そのため連続してデータを記録する場合は、同一シリンダ上のすべてのトラックへ書き込んでから次のトラックへ移動するのが普通である。問題はこれが現在のHDDにも当てはまるかで、疑問に思っていた。現在のHDDではサーボデータをトラックに混在させ、記録面ごとにヘッドのシーク動作をするとされている。ある記録面のトラックに合わせた状態から、(ほぼ同じ位置にあるとしても)他の記録面のトラックにシークし直さずにアクセスできるものか。Formattingが適用されたHDDの場合、記録面ごとにトラック密度が異なる=記録面ごとにトラックの本数/位置が変わるはずであり、同じ位置にあるトラックから成るシリンダというもの自体が成立しないのではないか。実際のベンチマーク結果でも、記録面数と速度の間に有意な関係は見られない。結論からいえば、こういうシリンダの理解はとっくに古い。いうより、シリンダというもの自体が既に意味を失っていると思う。前置き登場するHDDは新旧取り混ぜて12台。これらのスペックを先に挙げておく。47(注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は例によってレジストの色が様々。Benchmark以外はパーティションがない状態で行った。4.0が使えない問題があるので。以下では容量、速度とも全てSI接頭辞(1MB=1,000,000Bytes)で表記している。ProとIometerの速度は、生の値では2進接頭辞だが、自分がまとめたものはSI接頭辞に換算してある。testの追加により、狭い範囲(最小1GB)での、より乱れの少ない計測が可能になった。これで5K500.B-500bを見ていたとき、変なことに気づいた。長さ(容量)がほぼ同じで高さ(速度)が違う4つの水平面が周期的に現れている。この波形は範囲を2GB、3GBと広げても現れるので、そのまま続いているらしい。同じ2プラッタ4ヘッドの5K500.B-500aでも、形は違うが同じように周期的な波形が現れる。この波形が何かは分からないが、1プラッタ1ヘッドの5K500.B-120も加えて、計測する範囲を変えてみると以下のようになる。これから以下のことが分かる。5K500.B-500aと500bでは、計測する範囲を狭くするにつれ、波形がはっきり見えてくる。この波形は範囲が広いときには見えてないだけで、途中で形を変えながらも延々続いているらしい。5K500.B-120では、階段状の水平面があるだけで(数は公式スペックのゾーンと同じ24)、範囲を狭くしても同じような波形は出ない。いうことは、記録面が単一か複数かで違いがあるらしい。Proの計測上の幻でないかを確認するため、5K500.B-500bの1GBの範囲に現れた各水平面に収まるようパーティションを作成し、CrystalDiskMarkでシーケンシャルの速度を計測してみた。Proの結果とまとめたのが以下。速度の変化は概ね一致している。これらの領域ごとの速度差は現に存在している。これは何を意味するのか。検討まずシーケンシャルな速度に関係する要因を確認すると、単位時間当たりにアクセス可能なデータ量は以下のように表せる。[線記録密度(Bit/mm)×{トラック半径(mm)×2×π}(トラック長)÷8(Byteへ換算)÷1,000,000(MBへ換算)](トラック当たり容量)×{回転数(RPM)÷60}(秒当たり回転数)=単位時間当たりにアクセス可能なデータ量(MB/s)これにシーク時間やHDDのコントローラの能力、バッファなど他の要因が加わって実際の速度になる。従来のシリンダの理解では、シーケンシャルアクセスの際、あるトラックを過ぎると同じシリンダの別の記録面のトラックに移動し、シリンダの終端まで来ると次のシリンダに移動する。この場合、記録面ごとに線記録密度が違い、速度も違ったとしても、シリンダ当たりの容量を超える領域で計測して平均化すれば、各記録面の速度は表に出てこないはずである。このシリンダ当たり容量を知るには、先にトラック当たり容量を知る必要があるが、これには2通りの計算法がある。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番目として、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となる。Proはログを見ると、計測する範囲が1GBのときは5MBごとに計測値の平均をとって記録していくようである。したがって、この5MBの中にシリンダが収まるので、記録面に速度差があっても平均化されるはずである。先頭1GB内であれば全ての記録面がゾーン0で、ゾーンの変化はないだろうから平均も変わらず、グラフは水平になるはずである。従来の理解ではこの計測結果を説明できない。これが記録面の速度とは別の要因による可能性は除外していいと思う。環境条件が変わらない短時間の計測中に、決まった位置と一定の容量を持つ領域の間で10MB/s近くの速度差を生じさせることは他の要因では考えにくい。整理すると、5K500.B-120に見られるように、1つの記録面(の1つのゾーン)では決まった高さ(速度)の水平面になる。5K500.B-500bでは、4つのそれぞれ決まった高さ(速度)の水平面が周期的に現れる。この水平面の長さ(容量)はほぼ同じ。5K500.B-500の記録面は4つ。Formattingでは記録面(のゾーン)によって速度に個体差がある。これらを考え合わせると、割と簡単な仮説を提出できる。シーケンシャルアクセスの際、トラックを過ぎるごとに他の記録面のトラックに移動するのではなく、同じ記録面の隣接するトラックに移動し、これを一定の範囲で繰り返してから、他の記録面に移動する。言い換えれば、HDD中の(物理的)アドレスは、各記録面をトラック一本ごとに分解して、シリンダに従って一本の線に繋いでいるのではなく、各記録面をある程度のトラックの本数をまとめた短冊状に切り揃えて、これらを並べて繋いでいる。いう説明を自分は読んだことはないが(注)、色々なことをうまく説明できるし、他のHDDの計測結果にも整合する。4つの水平面は、それぞれの記録面にアクセスしている状態で、その間はそれぞれの記録面の速度が出ている。水平面の容量がほぼ同じなのは、4つの記録面を均等に使っていくため。Formattingでは記録面ごとにトラック密度が違う=トラックの数/位置が違うことが問題でなくなる。(注)HDDに関するまとまった資料として『ハードディスク装置の構造と応用』(CQ出版社)がある。最近改訂版が出たので少し期待してチェックしたが、この面には触れられてなかった。この仮説に立つと、5K500.Bの先頭1GBにおける波形は以下のように解釈できる。先頭は狭い範囲の計測ではどうしてもノイズ的な動きが入るので無視するとして、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の例を見ていく。[修正]グラフの元データの換算を間違えていたので修正した。Communitywww.flickr.comコメントについてコメントは承認制です。承認まで時間がかかるときがあります。感想、間違いの指摘など歓迎します。間違いについては、その場所と内容を明記してください。エントリと関係がないもの、不適当と思われるものは承認しません。プロフィールEMOGitHub詳しくないプロフィール当てにならないカスタマイズ。