web-dev-qa-db-ja.com

Ubuntu 14.04上のZFS 0.6.3のtxg_syncが原因でパフォーマンスが低下する

PPAからインストールされた「ZFS on Linux」でネイティブZFSを使用しています here 。セットアップは問題なく、私は2台のWD 4TB Red HDDを備えたミラー構成でそれを使用しています。残念ながら、ディスクアレイにwriteすると、パフォーマンスの問題が発生します。読書時のパフォーマンスはOKです。

アレイへの大量の書き込み中に、rsyncによって報告されるように、コピープロセスが〜5秒ごとに〜5-10MB /秒に停止するという問題が発生しています。ストールの間の速度は〜75MB /秒で、これは他のファイルシステムやシステムに期待されるものと同じです(私はbtrfsを試しましたが、これは〜85MB /秒を取得しました)。 iotopを見ると、コピーストールがtxg_syncの実行/ I/Oの処理と一致していることがわかりました。この問題は、ZFSの一般的な問題と思われる「バースト」I/Oの問題のようです( ここ および ここ を参照)。最初のリンクからオプションを適用しました

options zfs zfs_prefetch_disable=1

これはパフォーマンスの問題にはある程度役立ちましたが、解決しませんでした。 txg_syncの5秒間隔は、vfs.zfs.txg.timeout = "5"(たとえば、5秒)の間隔であるように見えます。これは、LinuxのZFSのデフォルト設定です。

これは正常な動作ですか、それとも他の設定を試すことができますか?もしそうなら、何か提案はありますか?両方のリンクで多くのオプションを見つけることができなかったことに注意してください...

EDIT 2:少しフォローアップするために:私が使用しているシステムは、HP ProLiant Microserver N36Lで、8GB ECC RAMにアップグレードしました。ここでは、ZFSボリュームの作成に使用したコマンドを示します。私が-o ashift=12を使用していることに注意してください(zfsonlinux FAQにあります)。これにより、ZFSが4096バイトのAdvanced Format Diskのブロックでニースを再生できるようになります。

$ zpool create -o ashift=12 -m /zpools/tank tank mirror ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0871252 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E3PKP1R0
$ zfs set relatime=on tank
$ zfs set compression=lz4 tank
$ zfs create -o casesensitivity=mixed tank/data

zfs_prefetch_disableオプションを/etc/modprob.d/zfs.confに追加して、変更を永続的にしました。

options zfs zfs_prefetch_disable=1

そのため:

$ cat /sys/module/zfs/parameters/zfs_prefetch_disable 
1

EDIT 1:要求に応じて、zpool get all出力を追加しました。プールで圧縮をオンにしたことを忘れてしまったことに注意してください...

$ zpool get all
NAME  PROPERTY               VALUE                  SOURCE
tank  size                   3.62T                  -
tank  capacity               39%                    -
tank  altroot                -                      default
tank  health                 ONLINE                 -
tank  guid                   12372923926654962277   default
tank  version                -                      default
tank  bootfs                 -                      default
tank  delegation             on                     default
tank  autoreplace            off                    default
tank  cachefile              -                      default
tank  failmode               wait                   default
tank  listsnapshots          off                    default
tank  autoexpand             off                    default
tank  dedupditto             0                      default
tank  dedupratio             1.00x                  -
tank  free                   2.21T                  -
tank  allocated              1.42T                  -
tank  readonly               off                    -
tank  ashift                 12                     local
tank  comment                -                      default
tank  expandsize             0                      -
tank  freeing                0                      default
tank  feature@async_destroy  enabled                local
tank  feature@empty_bpobj    active                 local
tank  feature@lz4_compress   active                 local
3
packoman

Pacoman、ミラーに2つのWD-REDドライブが2つあるため、IO ZILコンシステンシグループをディスクに書き込むと、IOが高くなります。ZIL(Write-キャッシュ)。LOGデバイスがない場合、ログデバイスはプール自体にあり、最大書き込み速度* 5秒まで大きくなる可能性があります。おそらくZILから読み取り、データを永続ストレージにコミットします。 5秒。質問:

  1. SLOGデバイスをお持ちですか?これは、理想的にはDRAMドライブ(HGST ZeusRAMなど)です。
  2. 読み取るキャッシュデバイスはありますか?理想的には、480GB PCIeカードのようなフラッシュの束。

私の推奨は、プール以外の場所にSLOGを作成することです(フラッシュしないことを前提として、ブートデバイスでも、どこにもないよりも優れています)。この方法では、5秒ごとにミラーに対して集中的に読み取りや書き込みを行うことはありません。

2
user1955162