在lvm分区下, 使用机械硬盘 qemu-img 写入大文件的时候, 出现hung_task_timeout_secs报错的情况, 需要做一些处理..

报错内容 🔗︎

dmesg 中看到以下报错.

1
2
3
[  363.902278] INFO: task qemu-img:1402 blocked for more than 120 seconds.
[  363.902293]       Tainted: P           O      5.13.19-6-pve #1
[  363.902298] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

出现这种情况的时候 qemu-img 进程直接卡死. 这时候 free 中看到内存使用率的 "free" 空间已经所剩不多(不是"used").

不单独是在使用 qemu-img 的情况, 任何大文件写入lvm的动作都可能出现这种情况.

这种情况应该是内核缓存了过多. 想起在GPT分区后, lvcreate 创建的时候有一个 2M ChunkSize 块大小警告.

解决方法 🔗︎

删除逻辑卷, 重新 lvcreate 的时候带上 -c 64K 参数, 使用较小块大小. 该值必须在 64KiB 和 1GiB 之间, 且必须为 2 的幂, 关于如何优化到机械盘缓存相匹配的最优效率本人还未研究.