web-dev-qa-db-ja.com

Linux ZFSは書き込みを書き込みバッファー(SLOG / ZIL)にバッファーしませんか?

書き込みI/Oが発生すると、zpool iostat -vのログ列にZILアクティビティが表示されなくなります。これにより、データをディスクに書き込むときに予想よりも長い待機時間が発生します(競合中に80ミリ秒を超える場合があります)。

                     capacity     operations    bandwidth
    pool              alloc   free   read  write   read  write
----------------  -----  -----  -----  -----  -----  -----  
storage           1.88T  2.09T      3  3.01K   512K  39.3M
  mirror           961G  1.05T      0  1.97K   128K  20.8M
    mpathf            -      -      0    393      0  20.8M
    mpathg            -      -      0    391   128K  20.6M
  mirror           961G  1.05T      2  1.04K   384K  18.5M
    mpathi            -      -      1    379   256K  21.1M
    mpathj            -      -      0    281   128K  18.3M
logs                  -      -      -      -      -      -
  /zlog/zilcache      0  15.9G      0      0      0      0
cache                 -      -      -      -      -      -
  mpathk           232G     8M      1      0   130K      0
  mpathl           232G     8M      1      0   130K      0
----------------  -----  -----  -----  -----  -----  -----

/ zlog/zilcacheデバイスにIOがありません。非常に高速なフラッシュ上のファイルです。 ZFSストアから削除すると、書き込みと読み取りはできますが、ZFSはそれを無視しているようです。

デバイスは利用可能に見えます:

  pool: storage
 state: ONLINE
  scan: scrub repaired 0 in 19h31m with 0 errors on Wed Nov 19 07:39:03 2014
config:

    NAME              STATE     READ WRITE CKSUM
    storage           ONLINE       0     0     0
      mirror-0        ONLINE       0     0     0
        mpathf        ONLINE       0     0     0
        mpathg        ONLINE       0     0     0
      mirror-1        ONLINE       0     0     0
        mpathi        ONLINE       0     0     0
        mpathj        ONLINE       0     0     0
    logs
      /zlog/zilcache  ONLINE       0     0     0
    cache
      mpathk          ONLINE       0     0     0
      mpathl          ONLINE       0     0     0

errors: No known data errors

より高速な確認のためにログデバイスへの書き込みをキャッシュするようにZFSを構成する方法はありますか?

ありがとう

7
user1955162

ZILの目的を誤解していると思います。あなたはそうではない書き込みキャッシュとしてそれを説明します。マシンで何が実行されているかによっては、ZILでのアクティビティは通常の動作ではない場合があります。

ZILからは何も読み取られません。これは書き込み専用デバイスです。唯一の例外は、クラッシュ後のプールのインポート中に発生する可能性があります。

アプリケーションが同期書き込みを実行している場合のみ、書き込みが行われます。ファイルの移動などの通常のI/OはZILを使用していません。

sync=alwaysデータセットに対して、すべての書き込みを同期のように動作させる。

6
jlliagre