use*_*162 7 linux zfs cache zfsonlinux
遇到写 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
---------------- ----- ----- ----- ----- ----- -----
Run Code Online (Sandbox Code Playgroud)
我的 /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
Run Code Online (Sandbox Code Playgroud)
有什么方法可以配置 ZFS 以缓存对日志设备的写入以加快确认速度?
谢谢
我相信您误解了 ZIL 的目的。你将它描述为一个写缓存,但它不是。ZIL 上没有活动可能只是正常行为,具体取决于您的机器上运行的内容。
从来没有从 ZIL 读取任何内容,这是一个只写设备。唯一的例外可能发生在崩溃后的池导入期间。
如果应用程序正在执行同步写入,则只有对其进行写入。像移动文件这样的常规 I/O 不使用 ZIL。
您可以sync=always在数据集上进行设置以强制所有写入行为就好像它们是同步的一样。