Tweet

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バイト/セクタ4KB/セクタ
00
1
2
3
4
5
6
7
81
9
10

512バイト/セクタエミュレーションでのアクセス

512 バイト/セクタのエミュレーション時に例えば

セクタ番号 0 から 8 セクタの読み込み

をする場合,HDD 内部では

  1. 物理番号 0 のセクタを読み込み
  2. これを 8 セクタ分の応答として返す

という動作をすればいい.

ところが

セクタ番号 1 から 8 セクタの読み込み

となると

  1. 物理番号 0 と 1 のセクタを読み込み
  2. 対応する 8 セクタ分の応答を返す

という動作になる. 同じセクタ数の読み出しなのに,後者では2物理セクタの読み込みが発生することになる. これは

8 で割り切れないセクタ番号で始まるアクセス

なのが原因なのは明らかだろう.

書き込みの場合は,もっと深刻である.

セクタ番号 1 から 8 セクタの書き込み

の場合は

  1. 物理セクタ 0, 1 を読み出し
  2. 物理セクタ 0 の後ろ 7 論理セクタ分と物理セクタ 1 の最初 1 論理セクタ分を書き換え
  3. 物理セクタ 0, 1 を書き戻す

となる. いわゆる read-modify-write と呼ばれる動作になり,パフォーマンスへの影響は大きい.

CHS パラメータの呪い

HDD には「シリンダ数」「ヘッド数」「セクタ数」というパラメータがある. HDD 上にはこのパラメータに沿ってセクタが配置されている,というのは昔の話.

現代の HDD の CHS パラメータは

シリンダ
たくさん
ヘッド
255
セクタ
63

というパラメータとなっている. ヘッドが 255 もあれば,ディスク(プラッタ)は 128 枚も入っていることになるが,壊れた HDD を分解してみてもそんなにたくさんの円盤は無い. つまり,

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 となっており,上記の説明どおりの現象となっている. この状態でベンチマークを取ってみる.

bigsector_normal.PNG

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の倍数に揃ったパーティションが作成されたことになる.

ベンチマーク結果はこんな感じ. 多少はパフォーマンスが上がっているように見える. けど,この程度なら「そのまま使ってもいいや」という気もしないではない.

bigsector_aligned.PNG

添付ファイル: filenormsector_norm.PNG 254件 [詳細] filebigsector_aligned.PNG 416件 [詳細] filebigsector_normal.PNG 406件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-30 (金) 22:57:20 (3466d)