遇到写入 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 来缓存对日志设备的写入,以便更快地确认?
谢谢
答案1
我认为您误解了 ZIL 的用途。您将其描述为写入缓存,但事实并非如此。ZIL 上没有活动可能只是正常行为,具体取决于您的机器上运行的内容。
ZIL 中不会读取任何内容,这是一个只写设备。唯一的例外可能发生在崩溃后的池导入过程中。
只有当应用程序执行同步写入时才会对其进行写入。常规 I/O(例如移动文件)不使用 ZIL。
您可以sync=always
在数据集上进行设置,强制所有写入操作像同步一样进行。