我在 Hyper-v 上的 Ubuntu 20.04 LTS 上运行 ZFS。ZFS 会随机卡住,目前每 2-3 天一次。Samba 无响应,通过 smb 到 ZFS 卷的文件 I/O 停止,并且卷上的 shell 操作会导致 shell 冻结。Ubuntu 仍然有响应,只有 ZFS 会卡住。
系统日志:
10 月 31 日 13:21:07 zfs 内核:[160466.002788] INFO:任务 z_rd_int:1200 被阻止超过 120 秒。10 月 31 日 13:21:07 zfs 内核:[160466.002793] 污染:PO 5.4.0-52-generic #57-Ubuntu 10 月 31 日 13:21:07 zfs 内核:[160466.002793] “echo 0 > /proc/sys/kernel/hung_task_timeout_secs” 禁用此消息。 10 月 31 日 13:21:07 zfs 内核:[160466.002795] z_rd_int D 0 1200
2 0x80004000 10 月 31 日 13:21:07 zfs 内核:[160466.002797] 调用跟踪:10 月 31 日 13:21:07 zfs 内核:[160466.002804] __schedule+0x2e3/0x740 10 月 31 日 13:21:07 zfs 内核:[160466.002806] schedule+0x42/0xb0 10 月 31 日 13:21:07 zfs 内核:[160466.002807] io_schedule+0x16/0x40 10 月 31 日 13:21:07 zfs 内核:[160466.002809] rq_qos_wait+0x106/0x180 10 月 31 日 13:21:07 zfs 内核:[160466.002811] ? __wbt_done+0x40/0x40 10 月 31 日 13:21:07 zfs 内核:[160466.002812] ? sysv68_partition+0x2d0/0x2d0
[...]
10 月 31 日 13:21:07 zfs 内核:[160466.003297] INFO:任务 z_wr_iss:1206 被阻止超过 120 秒。10 月 31 日 13:21:07 zfs 内核:[160466.003300] 污染:PO 5.4.0-52-generic #57-Ubuntu 10 月 31 日 13:21:07 zfs 内核:[160466.003301] “echo 0 > /proc/sys/kernel/hung_task_timeout_secs” 禁用此消息。 10 月 31 日 13:21:07 zfs 内核:[160466.003302] z_wr_iss D 0 1206
2 0x80004000 10 月 31 日 13:21:07 zfs 内核:[160466.003304] 调用跟踪:10 月 31 日 13:21:07 zfs 内核:[160466.003306] __schedule+0x2e3/0x740 10 月 31 日 13:21:07 zfs 内核:[160466.003308] schedule+0x42/0xb0 10 月 31 日 13:21:07 zfs 内核:[160466.003309] io_schedule+0x16/0x40 10 月 31 日13:21:07 zfs 内核:[160466.003310] rq_qos_wait+0x106/0x180 10 月 31 日 13:21:07 zfs 内核:[160466.003312] ? __wbt_done+0x40/0x40 10 月 31 日 13:21:07 zfs 内核:[160466.003313] ? sysv68_partition+0x2d0/0x2d0
在 HTOP 中,您可以看到有 8 个任务处于 D 状态。我需要重新启动整个虚拟机才能让 ZFS 再次响应。
这种现象已知吗?可以做些什么来防止 ZFS 挂起?一些信息:
在 Hyper-V 上运行的 Ubuntu 20.04LTS
16 GB RAM,16 V 核心(3950x 带 ECC RAM)。
ZFS 卷是具有 8 个 5TB 驱动器的 ZFS-Z1 阵列。压缩为 LZ4,无重复数据删除
我调整了 L1ARC 以仅使用 6GB 的 RAM。您可以在屏幕截图中看到,当发生冻结时,VM 仍有 5 GB 的可用 RAM。因此,我不认为这是 OOM 场景。
除了 L1Arc 尺寸、“xattr=sa”和“sync=never”(我知道……)之外,没有进行任何调整,一切都开箱即用。