2TB を超える容量の HDD について、最近は AFT(Advanced Format Technology)という物理セクターが 4Kbyte でフォーマットされている製品が多いです。
※まれに 2TBのHDD で、従来の 512bye でフォーマットされている製品もあります。
AFT 仕様の HDD はパーティションを作成するときにアライメントに気をつけないとデータの読み書きが遅くなると言われていますが、どの程度違いがあるのか調べてみました。
結論
アライメントを合わせないと、やはり遅くなります。物理的なパフォーマンスはさほど変化しませんが、論理フォーマット後にファイルの作成・読み・削除といったメタデータに対するアクセスに関しては結構速度差が出ました。
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
Alignment OK 187ms 164ms 886ms 275ms 6466ms 9149ms
Alignment NG 484ms 183ms 1142ms 707ms 8316ms 15032ms
x2.6 x1.1 x1.3 x2.6 x1.3 x1.6
上記データは、bonnie++ を sleep 120 を挟み連続で 5 回測定し、最大・最小値を外し残りの 3 データを平均したものです。特にアクセス速度に影響のある Latency(=遅れ)に注目しました。
※数値が小さいほどアクセスが速いという事になります。
Linux で 2TB 超の HDD を使うときにはアライメントは気をつけた方が良いです。
※設定方法は後述…
※特に mdadm を使ったソフトウェア RAIDでは、同時に複数の HDD にアクセスするので、アライメントが合っていないと激遅になります。
HDD 上に作成されるテストデータはメモリー搭載量の 2 倍(メモリーキャッシュ効果を減らす為)で、今回のテストでは 16GB となっています。
※これは bonnie++ のデフォルト仕様。
※使ったコマンドは…
bonnie++ -d /mnt/hoge -n 256:1024:1024:16 -u root
→ /mnt/hoge は、調べたい HDD が mount されているディレクトリーを指定して下さい。
Create files in sequential order : 規則性のあるファイル名順でファイル作成 Stat files in sequential order : 規則性のあるファイル名順でファイル情報の取得 Delete files in sequential order : 規則性のあるファイル名順でファイル削除 Create files in random order : ランダムなファイル名順でファイル作成 Stat files in random order : ランダムなファイル名順でファイル情報の取得 Delete files in random order : ランダムなファイル名順でファイル削除
ここからは備忘録
2TB 超の HDD のパーティション作成する場合、Linux の場合は parted を使います。
まずは mklabel で gpt を指定します。
※従来の fdisk で作成した HDD は、ここが msdos になっています。もし間違って gpt でフォーマットしたHDDは、msdos に書き換えると fdisk で扱えるようになりますが、この場合既に書き込まれている情報は全て消えてしまうので注意して下さい。
次に mkpart でパーティションを作成します。
パーテション作成で重要なポイントは最初のパーティションのスタート位置です。
このスタート位置の指定には 0% と指定します。単に 0(ゼロ)と指定するとアライメントがずれます。エンド位置は % 単位か、MB 単位もしくは GB 単位で指定します。
※HDD 全体を単一パーティションに設定する場合には、スタートを 0%、エンドは 100% にすると良いです。
パーティションを作成したら、align-check で必ずアライメントが正しいかどうか確認して下さい。
(parted) align-check
alignment type(min/opt) [optimal]/minimal?
Partition number? 1
1 aligned
と表示されれば OK です。
パーティションの設定例
【例1】
(parted) print
Model: ATA ST2000DM001-1CH1 (scsi)
Disk /dev/sdc: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 20.0GB 20.0GB ext4
(parted) align-check
alignment type(min/opt) [optimal]/minimal?
Partition number? 1
1 aligned
これはアライメントが OK の例です。スタートが 1049kB になっている所と、Sector size (logical/physical): 512B/4096B に注目して下さい。
【例2】
(parted) print
Model: ATA MARSHAL MAL32000 (scsi)
Disk /dev/sdd: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 20.0GB 20.0GB ext4
(parted) align-check
alignment type(min/opt) [optimal]/minimal?
Partition number? 1
1 not aligned
この HDD も容量は 2TB です。また、アライメントチェックはNGと表示されています。しかし、Sector size (logical/physical): 512B/512B、つまり logical=physical という事から、この HDD は AFT(Advanced Format Technology)を使っていないことが解ります。この場合、アライメントの不整合は発生しません。
ご参考
アライメントに関しては、ちょっと古いですが Linux の kernel ウォッチャーで有名な小崎さんが書いた記事が詳しいです。
ATAディスクの4Kセクタ問題とは?
http://www.atmarkit.co.jp/flinux/rensai/watch2010/watch03a.html