BigSector ドライブを試す †遅ればせながら,Western Digital の BigSector ドライブを試してみた. 型番は WD20EARS,2TB のドライブである. BigSector とは †従来の HDD は読み書きの最小単位(セクタ)が 512 バイトであった. が,BigSector ドライブではこの最小単位が 4KB ( = 4096 バイト ) となっている. 参考資料 †BigSector についてもっと詳しく知りたい方は bigsector.org を参照のこと. PC/AT のパーティションテーブル(いわゆる MBR)については→が詳しい. 互換性 †現状では,BigSector ドライブは,電源投入後は「エミュレーションモード」で動作する. つまり,HDD 内部の回路やファームウェアで,外見上は 512 バイト/セクタのドライブと同等の動作をするようになっている. つまり,PC 側から 512 バイト/セクタのつもりで発行されたリクエストを HDD 内部で 4KB/セクタのリクエストに変換し,512バイト/セクタのような応答を返す. あくまでもエミュレーションなので,HDD 上の物理的なセクタは 4KB/セクタのままである. というわけで,レガシーなシステムで使用しても直ちに「動作しない」ということはない. が,後に述べる理由により,パフォーマンスが低下する. セクタ番号の対応 †おそらくは下表のような対応になっているものと思われる.
512バイト/セクタエミュレーションでのアクセス †512 バイト/セクタのエミュレーション時に例えば
をする場合,HDD 内部では
という動作をすればいい. ところが
となると
という動作になる. 同じセクタ数の読み出しなのに,後者では2物理セクタの読み込みが発生することになる. これは
なのが原因なのは明らかだろう. 書き込みの場合は,もっと深刻である.
の場合は
となる. いわゆる read-modify-write と呼ばれる動作になり,パフォーマンスへの影響は大きい. CHS パラメータの呪い †HDD には「シリンダ数」「ヘッド数」「セクタ数」というパラメータがある. HDD 上にはこのパラメータに沿ってセクタが配置されている,というのは昔の話. 現代の HDD の CHS パラメータは
というパラメータとなっている. ヘッドが 255 もあれば,ディスク(プラッタ)は 128 枚も入っていることになるが,壊れた HDD を分解してみてもそんなにたくさんの円盤は無い. つまり,
のである. ところで,パーティションを切る場合,Windows XP 以前だとディスクを目一杯使おうとすると,最初のトラックはパーティションテーブル等のために利用されない. が,上記の CHS パラメータではセクタ/トラックは 63 となっている. 第一パーティションは 64 セクタ目,セクタ番号 63 から切られることになる. パーティション先頭が 8 で割り切れないセクタ番号なので,パーティション内部のアクセスが 4KB 単位だったとしても,常に「切れの悪い」アドレスからのアクセスということになる. 困ったもんだ. 実験 †Windows XP でパーティションを切り,フォーマット †Windows で HDD をフォーマットし,パーティションテーブルをダンプする. 第1パーテション部分は以下のようになっている. 000001b0 00 01 |................| 000001c0 01 00 07 fe ff ff 3f 00 00 00 82 74 e0 e8 |......?....t....| パーティション開始のセクタ番号は 0x0000003f = 63 となっており,上記の説明どおりの現象となっている. この状態でベンチマークを取ってみる. Linux 上で強制的にセクタを整列 †parted コマンドでパーティションを切り直す. # parted /dev/sdb GNU Parted 2.3 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit s ///// 表示をセクタ数単位で (parted) print Model: WDC WD20 WD-WMAZA0000674 (scsi) Disk /dev/sdb: 3907029168s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 63s 3907024064s 3907024002s primary ntfs ///// WinXP で切ったパーティション (parted) rm 1 ///// パーティションを削除 (parted) mkpart //// パーティションを切る Partition type? primary/extended? primary ///// 基本パーティション File system type? [ext2]? ntfs ///// パーティションIDはNTFS Start? 64 ///// 開始セクタ番号 End? 3907029167 ///// 終了セクタ番号 = しっぽまで Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? ignore ///// 警告は無視 (parted) print Model: WDC WD20 WD-WMAZA0000674 (scsi) Disk /dev/sdb: 3907029168s Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 64s 3907029167s 3907029104s primary ///// 切り直したパーティション (parted) q Information: You may need to update /etc/fstab. # これで8の倍数に揃ったパーティションが作成されたことになる. ベンチマーク結果はこんな感じ. 多少はパフォーマンスが上がっているように見える. けど,この程度なら「そのまま使ってもいいや」という気もしないではない. |