2013/03/15

HD Tuneのぎざぎざの理由

HD TuneのBenchmarkがAdaptive FormattingのHDDでぎざぎざを描く理由について、記録面の波形によるものと推測してきたが、その結論。

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

1.1. HD TuneのBenchmarkの計測方法


他のソフトの動作を外から分析するのはあまり行儀がいいとは言えない気がするが、これを確認しないと先に進めないので、HD Tune Pro(4.01)がBenchmarkを実行中にどうアクセスしているかをProcess Monitorで見てみた。対象はTravelstar 7K1000で容量は1TB。設定はPartial testで5段階中のAccurate側の4段目(デフォルト)、Block sizeは1MiBに設定してリード。

これは開始時で、この後ずっとReadFile(Win32でリードするAPI)が続いていくが、このDetailにリードした位置とサイズが出ている。Offsetが先頭からの距離、すなわち位置で、Lengthがサイズ。単位はByte。

初めに位置0でサイズが512Byte、すなわち1セクタのリードをしている。設定と違うので何かと思ったが、計測位置をジャンプさせる度に初めは同様に512Byteのリードをしているので、これはたぶんHDDをシークさせるためだけのリードで、速度の計算には入れてないのだろうと思う。

これに続いて1048576Byte=1MiBのリードが、隙間なくシーケンシャルに行われている。

結果をまとめると、少し戸惑わせることが分かった。
  1. 計測したサイズ(1MiB×リード回数)は計22250MiBで、容量の2.3%。まあそんなものか。
  2. 計測点の数は200で、各計測点の開始位置は容量を単純に200等分したもの(0、5GB、10GB……)。これはログから予想できたこと。
  3. 各計測点のサイズは一定ではない。……何コレ。
速度を計算するには比が分かればいいのであって、一定のサイズにする必然性はないが、計測条件はなるべく揃えるものじゃないかと思いつつ眺めていたら、気づいた。各計測点のサイズは、その計測点における速度に比例している。

各計測点における速度とテストサイズの関係をまとめたのが以下。速度はMB/sに、テストサイズはMBに、位置は都合でGiBに換算してある。

ほぼ完全に一致している。意図はよく分からないが、たぶん計測しながら速度を見て後何回リードするか決めているのか、予め決めた時間内だけリードを繰り返すようにしているのだと思う。

ちなみに、X25-M G2を5段階中の5段目で計測したときはテストサイズは381MiBで一定だったので、上限はあるっぽい。

1.2. 計測点をDisk Gazerと比較


とにかくHD Tune Proがリードした位置とサイズは分かったので、先頭から40個の計測点について、その位置の波形をDisk Gazerで計測したものと比較してみる。

左側がHD Tune Proのログから抜き出したもので、赤点が各計測点。右側のDisk Gazerのチャートで計測点に当たる部分を赤枠で囲ってある(数が多いので、スライドさせながら見てもらうといいと思う)。

一目瞭然だが、HD Tune Proの値は計測点が波形のどの部分にかかっているかで決定されているのが分かる。荒れた海を走る船のごとく、高い面に乗れば高く、低い面に落ちれば低く、面の間にまたがったときはその割合に応じて、上下している。

これがHD Tuneのぎざぎざの理由、ということになる。

各計測点における値は、その位置とサイズで得られた値として間違ってはいないが、それらを結んだチャートの形は、そのとおりに実際の速度が変動しているわけではないという意味で、偽のものと言えると思う。

次に、これをどう評価するかについて。

2013/03/14

Disk Gazer

120%趣味で作ったソフトです。

1. 概要


物理的ディスクのシーケンシャルリードの転送速度を細かい単位で、かつ位置を問わずに計測するためのベンチマークツールです。というより、HDDの記録面の波形を見るためのソフトと言った方が正しいですが。HD Tune Proよりもきめ細かく(1MiB以下)、HD Tune Proでは見られなかった先頭以外の波形も確認できるのがポイントです。

現在のHDDは、2.5インチHDDでも最外周のトラック当たり容量は1MiBを超えるので、トラック1本と同じか小さいぐらいの単位で計測できることになります。

リード方法はhiyohiyoさん作のCrystalDiskMark(3.0.2)のシーケンシャルリードテストをベースにしています。ただし、Disk Gazerは物理的ディスクをファイルシステムを使わずにリードすること、Block size(一度にリードする量)ごとに時間を記録して速度を計算するなどの違いがあります。

そもそも途中の計算順序や端数処理で結果が微妙に変わってくるのがコンピューターの計算なので、近い値にはなっても必ずしも一致はしません。最終的に表示されたものが、そのベンチマークにおける値ということで。

といっても、Disk Gazerの場合、計測単位が小さい関係上、最大値(Max)も最小値(Min)も瞬間的に出ただけの値になるので、あまり意味はありません。また平均値(Avg)も、波形の前ではあまり参考にはなりません。波形そのものを見るためのものです。という意味で、ベンチマークと呼ぶのは正しくない気もしますが……。

実用的な面では、代替セクタになっている位置が分かるかもしれません……。

細かいことは、興味があればreadmeを見てください。

[追記]

Disk Gazerを拡張した話を書いたので、実行ファイルとソースコードはそちらから。

2. Travelstar 7K1000


Disk Gazerのテストを兼ねてHGSTの7200RPMのTravelstar 7K1000を買ったので、まず定点観測的に。

左側が7K1000、右側が5K1000の1TBモデル。
7k1000-5k1000-1

ラベル以外の外見は、回転数が違うにもかかわらずPCBを含めて全く同じ。一方、重量は5K1000が100gなのに対して、7K1000は112gと重い。回転音はそれと意識するほどの差は感じない。

ラベルは日立の会社名が抜けて、略称だったHGSTがそのまま会社名になっている。5Vの消費電力が5K1000の700mAから800mAに増えているのが、回転数の差を反映している。

CrystalDiskInfoで見たところ。バッファサイズが32MB以上になっている。
7k1000-cdi52-en

先頭10GBにパーティションを作成し、ThinkPad X61s上のWindows 8からCrystalDiskMarkで計測。
Travelster 7K1000: CrystalDiskMark

シーケンシャルアクセスでは5K1000が114MB/s程度だったので、7K1000は138MB/s程度で21%増と、HDDとしては満足すべき速度向上だと思う。

次にHD Tune Pro(4.01)のBenchmarkで全領域を通して見たところ。Block sizeは1MiBに設定。
Travelstar 7K1000: HD Tune Pro (Full and Partial test)

HD Tune ProはWindows 8上ではウィンドウ内の部品のサイズ調整がうまく行かないらしく(5.0でも同様)、日本語表示だとはみ出してしまうので英語表示にしたら、今度は小さすぎる……が、そこは措く。

結果はいつものHD Tune Proで、CrystalDiskMarkより値が高めなのも従来どおり。

ランダムアクセスはこんな感じ。
Travelstar 7K1000: HD Tune Pro (Random access)

リードを見る限り、回転数相応か5K1000より少しだけ向上している。

さて、記録面はどうかというと以下のとおり。
Travelstar 7K1000: HD Tune Pro (Short stroke)

4つの面が出ている。2GBの結果を見ると、
Travelstar 7K1000: HD Tune Pro (Short stroke)

かなりはっきりした波形で、各組の長さは620MBといったところ。5K1000が667MBだったので、少し小さい。

SpecificationにあるCylinder allocationから計算すると、最外周のゾーン0のトラック当たり容量は、5K1000が約1.17MiBなのに対して、7K1000は約1.13MiBで少し小さいが、典型的な例として示されているだけなので直結はしない。

3. テスト


この7K1000と5K1000の1TBモデルがDisk Gazerでどう見えるかテストしていく。

それぞれの先頭を、領域のサイズ(Area)を0.5GiBと1GiBに設定して計測。なお、チャートの単位はY軸が速度(MB/s)で、X軸が位置(MiB)。

びっしり剣山のように上に突き出している部分は、位置も高さも再現性があるので単純な計測上のノイズではないが、とりあえず措くとして、波形自体は極めてクリアに出ている。カメラのピントが合ったというか、これが本来の波形で、HD Tune Proで見えるものは、あれはあれで鈍っているのだと思う。

さらに、領域のサイズを1GiBで、位置(Location)を中央と末尾にして計測したものを重ねて表示すると(水平移動させるので本来の位置とは違う)以下のようになる。

位置が後ろに行くにつれ、波形が形を変え、全体的に低く短くなっていくのが捉えられている。

面から針のように出ている部分も変わっているが、この正体を探るため、ThinkPad X60sでも計測してみる。位置は先頭で、領域のサイズは0.5GiB。

5K1000は依然剣山になっているが、7K1000は135MB/s当たりより上には出ず、水平になっている。これには単純な理由があって、X60sはSATA 1.5Gb/sなので、この当たりがバスの実効上の上限になっていて、それに引っ掛かっている。

見方を変えると、バスの上限でカットされるということは、針のような部分が起きているのはバスの向こう側、つまりPC本体側ではなくHDD側ということになる。となると、HDDの内部で起きていることなど追求しようがないが、Disk GazerのBlock Offset(readme参照)を使えば、何とかならなくもない。

簡単に言うとBlock Offsetを使えば計測上の偽の値を選別できる、と期待されるので、X61sに戻ってBlock Offsetを1/16に設定し、改めて計測してみた。

結果は、中央と末尾ではBlock Offsetがよく効いて、記録面が切り替わるときの谷もはっきり出ている。一方、先頭では一定の高さで残っている。

これは針のように値が高くなる位置が完全には固定されておらず(固定されていれば、記録面が切り替わるときの谷のように高さは変わらない)、リードの開始位置によって位置が微妙に変わることを示唆しているが、値が高くなる部分が存在することは変わらない。いずれにせよ、これ以上の追求は難しい。

4. 残っていた問題


続いて、記録面に関して当てになる道具がないがゆえに残っていた問題について、Disk Gazerを使って再度トライしてみる。

4.1. Travelstar 5K1000-500


HD Tune Proで先頭を見て確認できた水平線の高さは2段階だけだったので、先頭以外はどうなっているのかDisk Gazerで見てみる。ThinkPad X61s上のWindows 8から先頭、中央、末尾の1GiBの領域を計測し、重ねて表示したところ。

中央と末尾では1つの水平線の高さがずれて3段階になっている。記録面が切り替わるときの谷もはっきり出ているし、4記録面だと改めて確認できた。

4.2. Travelstar 5K500.B-500


Iometerを使った方法では途中から値がおかしくなったので、これも同様に見てみる。ThinkPad X60s上からで、まず5K500.B-500aの方。

波形が途中で変わっているのがはっきり見て取れる。先頭では針のように高くなる部分はまだらな一方、中央では下に向かって多数出ているので、これが機種とディスク中の位置に依存していることが窺える。

次に5K500.B-500bの方。これはHD Tune ProとIometerで確認できた水平線が同じ長さで2段階の高さの2つだけだったので、どういう面の構成になっているか判別できなかった。

先頭ではそれぞれの水平線の真ん中に規則的に現れる谷があるが、中央と末尾でははっきりしない。そこでBlock Offsetを1/8に設定して再度計測してみた。

これでようやく記録面が移り変わるときの谷がそれぞれの水平線の真ん中に確認できた。したがって、最初から最後までゾーンを通して同じ記録密度の記録面が2組ある4記録面の構成だと言える。

4.3. Momentus 5400.5-320


これもIometerでは途中から値がおかしくなったので。

DiskSpeed32の結果から見当は付いていたが、後方に行くにつれ波形が同じ形のままミニチュアのように小さくなっていくのが分かる。

4.4. Scorpio WD2500BEVS


これはIometerを使う方法では全く歯が立たなかった。

中央では明らかに先頭から波形が変わっているのが分かる。鏡像反転でないことといい、HGSTに近い。

4.5. Momentus 5400.3PSD


HD Tune Proの結果から構成を推測してみたが、あまり確信はなかった。

中央で1つの水平線の高さがずれて3段階となり、推測したとおりの鏡像反転であることがはっきりした。

一方、先頭、中央、末尾に共通して、鏡像反転するときは記録面の移り変わりの谷が見えないが、それ以外のときは谷がはっきり見えている。これは鏡像反転するときは同じ記録面上でそのまま移動するだけだから時間はかからないと考えれば矛盾はしない、というか鏡像反転を裏付けるものだと思う(5400.5では谷が出ているが……)。

5. まとめ


以上、Disk Gazerが記録面を見るための道具として使えることは確認できた。これがあれば記録面に関するたいていの問題には答えを見つけられるのではないかと思う。

2013/01/25

Adaptive Formatting

現在のHDDの物理的フォーマットに関する基礎資料である、Adaptive Formattingのホワイトペーパーが(Western Digitalの一部門となった)HGSTのサイトから消えていたので、記録の意味を兼ねて再読してみる。

1. 背景


現在のHDDは各プラッタの各記録面の各ゾーンによって記録密度が違うことを説明した、たぶん唯一の公開資料としてHGSTの「Adaptive Formatting in Hitachi Drives」(Adaptive_Format_WP.pdf)があった(他には特許情報が見つかるぐらい)。作成時期は内容から見てIBMの一部門だったときで、元のタイトルは違っていただろうと思うが、記録がない。

特許の出願が1998年5月で、公開が2000年10月、製品化された最初期のシリーズであるTravelstar 5K80の発表が2003年3月なので、時期的にはやや昔話に属する。

で、このAdaptive FormattingがなければHDDの性能上の個体差も基本的にはないし、記録面の仮説もそもそも出てこなかった、という重要な資料だが、内容は1ページ半に収まる短いもの。この関係の話の最初でも取り上げたことがある。

2. 内容


まず技術的背景として、HDDの容量拡大はヘッドの性能と部品公差(head performance and component tolerances)に制約されており、部品のばらつきを許容しつつ、面記録密度(areal density)を増加させるには新しいアプローチが必要になったとする。

従来はHDDの容量に応じて、ヘッドをその性能により選別して使用してきたが、これが生産工程の複雑化に繋がり、生産量を計画するのを難しくしていた。
(注)HGAとはHead Gimbal Assembly(アームの先に付いた、ヘッドとその支持機構が一体となった部品)のことだと思う。

そこで新しいアプローチとして、生産工程にAdaptive Formattingを導入した。これにより各HDDは、その特定のHDDに使用されたヘッドとメディア(プラッタ)に適合するよう工場において個別に調整される(indivisually tuned)。メディアの記録面は、それと対になったヘッドの性能特性に応じて、最適の線記録密度とトラック密度の組み合わせ(an optimized Bits Per Inch / Tracks Per Inch (BPI/TPI) combination)となるようフォーマットされる。

これは特定のヘッドとメディアの組み合わせにおける信頼性と性能の向上に繋がり、Fixed FormattingのHDDで起こり得るような、ぎりぎりの性能のヘッド(marginal heads)が使用される可能性が排除される。

ここまでのとおり、根本的な問題はヘッドの性能にばらつきがあることで、従来のFixed Formattingではヘッドを選別することで対応してきたが、それも生産上大変なので、各ヘッドの性能に応じて記録密度を柔軟に変更することで対応することにした、というのがAdaptive Formattingということになる。これで生産も楽になるし、信頼性も上がって一挙両得だと、そういう話。

それでHDDの性能的にどうなるかというと、従来のFixed FormattingであるTravelstar 40GNXと、Adaptive FormattingであるTravelstar 5K80をH2Benchというベンチマークで比較した図がある。

これが下図。青線が40GNXで、ぎざぎざの赤線が5K80。

この曲線における異なる転送速度の点は、HDD中にある複数のヘッドのうち、特定のヘッドの挙動を示す。Adaptive Formattingを使用すると、線記録密度は各ヘッド/ディスクによって変わり得て、これがドライブ間とヘッド間の両方のばらつきを生み出す。異なる線記録密度は、各ヘッドによって異なる転送速度に変換される。各計測点における速度は、どのヘッドが使用されるかに依存する。

このグラフのサンプリングレートは各ゾーンに多数の点を描くに足るもので、各ヘッドによる線記録密度に依存した転送速度が、各ゾーン中におよそ10回から20回表示されている。これにより、Adaptive FormattingのHDDではグラフが毛羽立って見えること("fuzzy" look)が説明される。

以上だが、ある時期からHGSTのHDDがHD Tuneでぎざぎざのグラフを描くようになって、当時はその理由が分からず、ただそういうものだと理解していたが、今にして思えばFixed FormattingからAdaptive Formattingへの切り替わりの時期だったのだと思う。

しかし改めて読んでみると、このぎざぎざの各点が各ヘッドにおける速度を示すということは、つまりは記録面の仮説と同じということで、したがって答えは初めから示されていたことになる。すごい大回りをした気がするが、一周回ってきたからこそ理解できるようになった、ということでよしとするかな。