Ubuntu 12.04 LTS で zfs その2

前回のzfs環境構築に続いてzpoolへのディスクの追加について
いくつか注意点があったのでまとめてみた。

以下のコマンドで基本的な操作が行える。

  • ディスク構成の確認

# zpool status

  • プールの作成# zpool create  [zpool name] [device name]
  • ディスクの追加

# zpool add  [zpool name] [device name]

  • プールの削除

# zpool destroy  [zpool name] [device name]

とてもシンプルで分かりやすい。
洗練されていますね。

ということで、自分のMicroServerにもディスクを追加してみた。

[email protected]:/# zpool create  storage0 sda sdb

あっけなく終了。簡単過ぎる。
だが、ここに罠があった。

今回zpoolに追加したHDDはWesternDigital製のWD30EZRX(3TB)でした。
最近のHDDは大容量化のオフセットとして1ブロックあたりのサイズを大きくしているので、
それに合わせてフォーマットしてあげないと著しくパフォーマンスが落ちます。

AFT(Advanced Format Technology) ってやつですね。

なので、AFTなディスクをzpoolする際には以下のような引数を加えてあげるとフワフワっと
ブロックの開始位置とブロックサイズをしてくれます。

  • プールの作成(AFTなディスクの時)

[email protected]:/# zpool create -o ashift=12 storage0 sda sdb

引数の有無でどれだけパフォーマンスの差が出るのか、試しに dd コマンドでベンチマークしてみました。

  • 引数なし(ブロックサイズ512Byte)
[email protected]:~# zdb -C storage0 | grep ashift
                ashift: 9
                ashift: 9 ※ ashift: 9はブロックサイズ512Byte
[email protected]:~#
[email protected]:~# dd if=/dev/zero of=hogehoge bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 220.772 s, 47.5 MB/s
  • 引数あり
[email protected]:~# zdb -C storage0 | grep ashift
                ashift: 12
                ashift: 12 ※ ashift: 12はブロックサイズ4KByte
[email protected]:~# dd if=/dev/zero of=hogehoge bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 61.0622 s, 172 MB/s
開始位置とブロックサイズ適切にするだけで3倍速くなりました。
せっかく良いハードウェアを買ってもソフトウェア側の処理で最大限のパフォーマンスを
発揮できないと言う可哀想な自体は避けたいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です