項目 | 記号 | 内容 | Note |
型番 | - | WD5000AAKX-001CA0 | 500GB |
プラッタ容量 | - | 500GB*1 | - |
セクタサイズ | A | 512 Byte | - |
セクタ総数 | B | 976773168 | 両面合計(公開領域) |
セクタ総数 | B' | 1116312192 | B*8/7(非公開領域を含む) |
回転数 | C | 7200rpm | - |
平均シーク時間 | - | 9ms | 一般的なPC用HDDのスペック |
平均待ち時間 | - | 4.2ms | プラッタが半周する時間 |
セクタ数(最外周) | D | 2246 sector/track | 138MB/s*60/C/A |
セクタ数(最内周) | E | 1159 sector/track | 71.2MB/s*60/C/A |
線記録密度 | F | 837,125 bit/inch | 138MB/s*60/C*8/3.5Pi |
トラック密度 | G | 385,586 track/inch | B'/2/(D+E)/2/0.85inch |
面記録密度 | - | 323 Giga bit/inch^2 | F*G |
キャッシュメモリ | - | 16MB | - |
外周部と内周部の書き込み速度(後述)を調べるとおおよその記録密度がわかるようです。分かったことからこのハードディスクのプラッタ構造を推測してみました。
- 7200回転/分の3.5インチハードディスクのプラッタ直径は、95ミリが一般的なようです。
- アームの長さと回転軸の位置は、中央のトラックにアクセスする時のヘッドの傾きが「0」となるよう調整されているようです。
- 1プラッタ2ヘッドの製品なので、大きなファイルのシーケンシャルライト時は2周して(両面に書き込んで)から隣のトラックにヘッドが移動するようです。
- ヘッドが隣のトラックに移動する時間は極めて短いです。同じ時間でのトラックの回転距離はセクタ1つ分もありません。
- この製品の場合は、全体の1/8程度が非公開領域となっているようです。
- トラックごとにアクセス時の動作周波数を変更することでセクタ数の違いに対応しているそうです。
- セクタの長さは一定(124μm)で、この中に512バイトのデータやECC情報、セクタ情報、隙間などが詰め込まれているそうです。
- プラッタには無数の小さな磁石が配置されています。この製品では、セクタ方向の間隔が狭いようなので、「トラック密度」を上げて「面記録密度」を向上させる余地があるようです。
- 外周部のパーティションは、「シークタイム」と「転送速度」の2つの面で性能上の利点があります。
ベンチマークテスト:
よく使われるソフトで「読み書き性能」を確認してみました。
補)465.76Gi(2^30)B=500G(10^9)Bです。(2^10=1024,10^3=1000)
補)8つのパーティションでも同じことをしてみたかったのですが、「論理ドライブ」を作れなかったので諦めました。
書き込み性能調査:(その1)
Linuxの「dd」コマンドを使って、全領域の「書き込み性能」を確認しました。(1GiB*464回)
補)1GiBデータの書き込み速度は、140MB/s~69.2MB/sの範囲でした。グラフは4回ごとの平均値を記載しています。
パーティション分割:
実際に使う形でパーティションを分割してから比較テストを行います。0+----------------+ | MBR Region |マスターブートレコード領域(2048セクタ)1MiB 2048|----------------| | Partition (1) |Linux swap(8388608セクタ)4GiB 8390656|----------------| | Partition (2) |Linux /(33554432セクタ)16GiB 41945088|----------------| | Partition (3) |Linux /home(446443520セクタ)約212.88GiB 488388608|----------------| <-- ほぼ真ん中 | Partition (4) |Windos7(488384560セクタ)約232.88GiB 976773167+----------------+ ↑パーティション開始セクタ(最終セクタ:976773167)
補)パーティションの開始セクタはすべて「2048の倍数」にしました。(特に意味はありません)
書き込み性能調査:(その2)
「dd」コマンドが表示する時間:
プログラムがデータを送り始めてから、ハードディスクが受け取りを完了するまでの時間を表示するようです。ディスクのキャッシュに転送できた時点がゴールで、その後の作業時間は反映されません。+-------+ +-------+ +-------+ +-------------------+ | | | | | | | 16MiB | 500GB | 500GB HDD | CPU | -> | Memory| -> | SATA2 | -> | Cache | Platter | シーク時間:9ms | | | | |300MB/s| | | 140MB/s | 待ち時間:4.2ms +-------+ +-------+ +-------+ +-------------------+ 512KiB Data --> |-| 512KiB 1GiB Data --> |-16MiB-|--1008MiB--|キャッシュメモリよりも小さなファイルの転送時間は2ms程度と表示されました。平均的なプラッタへの書き込み時間は、次のようにデータと配置情報の2度の書き込みのために512KiBデータでは32msを必要としますが、表示されたのはボトルネックになった「伝送路」の通過時間(2ms)だけでした。
Data FAT +-----------------+---------+-----------------+---------+ プラッタ全体での | seek 1 | wait 1 | WRITE 1 | seek 2 | wait 2 | WRITE 2 | 平均的な +-----------------+---------+-----------------+---------+ 書き込み時間 512KiB 13ms 6ms 13ms - 32ms 1GiB 13ms 11500ms 13ms - 11526msキャッシュメモリよりも大きなファイルの転送ではデータの書き込み時間のほとんどが反映されますが、配置情報の書き込み時間は反映されません。作業前にキャッシュメモリへの転送が完了しているからです。 データを書き込む前の「平均シーク時間」と「平均待ち時間」は、結果に反映されています。両方を合わせた時間は0~26msの幅を持ちますが、書き込み時間(11500ms)との比較では無視できるほど小さな値です。
補)512KiB程度の小さなファイルではシーク時間や待ち時間といった「オーバーヘッド」が転送速度を下げる大きな要因であることが分かります。
「dd」コマンドの利用方法:
記録媒体のメンテナンスでよく使われるコマンド形式のツールです。データの転送時間や速度を結果に表示するので利用しました。次のように無内容のデータを作り、任意のディレクトリにコピーすることもできます。$ cd /media/589A-122A /media/589A-122A$ sudo dd if=/dev/zero of=1gb001 bs=16384 count=65536 <--1回目 65536+0 記録始め 65536+0 記録終わり 1073741824 バイト (1.1 GB) コピー終了, 7.66519 s, 140 MB/s : /media/589A-122A$ sudo dd if=/dev/zero of=1gb464 bs=16384 count=65536 <--464回目 65536+0 記録始め 65536+0 記録終わり 1073741824 バイト (1.1 GB) コピー終了, 14.8633 s, 72.2 MB/s
補)大きなファイルほどプラッタへの書き込み時間を「精度よく」計ることができます。
「『dd』コマンドが示す時間」を「プラッタに書き込む時間」に補正すると次のようになります。
- 最外周:1056964608 バイト (1.1 GB) コピー終了, 7.65619 s, 138 MB/s
- 最内周:1056964608 バイト (1.1 GB) コピー終了, 14.8503 s, 71.2 MB/s
小さなファイルは一瞬でキャッシュに格納されるのでプラッタの性能は計れません。
$ sudo dd if=/dev/zero of=512kb001 bs=16384 count=32 32+0 記録始め 32+0 記録終わり 524288 バイト (524 kB) コピー終了, 0.00119346 s, 439 MB/s あるいは、 524288 バイト (524 kB) コピー終了, 0.00313677 s, 167 MB/s
補)瞬間の転送速度なので「439MB/s」や「167MB/s」となっていますが、測定を繰り返すと平均値はハードディスクの伝送路(SATA2)の上限値(300MB/s)に近づくようです。(FAT32の場合です。ファイルシステムによっては違う結果になることがあります)
読み込み性能:(ベンチマーク)
ubuntu10.04(Linux)標準のベンチマークソフト(ディスク・ユーティリティ)で読み込み性能を調べると次のようになりました。
補)フォーマット済みハードディスクの「書き込みベンチマーク」は実行できません。
読み込み性能ですが、これ以前のベンチマークと同様の結果が得られました。テストは数分で終わるので、短い時間で大体の性能を把握したい場合に使うといいかもしれません。
まとめ:
シーク時間を短くしたい場合は、ディスク使用率を下げるとよいかもしれません。使用量が同じでも、「250GB/500GB」と「250GB/250GB」では前者の平均シークタイムは後者の半分になります。小さなファイルにアクセスする場合のオーバーへッドとしてシークタイムのウェイトは大きいので、窮屈な(システム用)ハードディスクのレスポンスに不満がある場合は、(使い切れないほど)大きな容量の製品に置き換えることを検討してもよいと思います。LinuxのようなOSで、システム領域(「/」)とユーザ領域(「/home」)をパーティションで分離することは、レスポンスを保つ上で一定の効果を期待できると思います。(「/boot」パーティションを作るのは起動時間を短めに保つ狙いがあるんですね。今やっと気が付きました。でも私には不要です)
プラッタの「線記録密度」は転送速度に直結し、「トラック密度」はシークタイムに関わるので、「面記録密度の高さ」は「性能面で有利」と言えそうです。その反面で、信頼性を心配する必要があるかもしれません。 「非公開領域」のことは分かりませんけど、大体の性能は把握できたのでOSを導入して使い始めたいと思います。
初めまして。内周に行くほど速度が加速度的に下がることについて、これは全く不思議はありません。
返信削除回転数は一定なので、速度はその部分のトラックの円周長に比例し、つまりはトラックの半径に比例します。したがって、グラフの横軸を仮にトラックの半径とすれば、グラフは直線になるはずです。しかし、トラックの半径は普通は観察できないので容量を横軸にするわけですが、トラック当たりの容量は内周に行くほど減っていくので、いわば横軸は内周に行くほど圧縮されていきます。その結果、内周に行くほど速度と容量がともに低下していくため、グラフは全体的に湾曲します。それがこのグラフの形が意味するものと考えられます。