同步系统调用和不间断睡眠

同步系统调用和不间断睡眠

我的应用程序进入不间断睡眠状态。进程卡在了linkat

❯ sudo cat /proc/1308028/syscall
265 0xffffffffffffff9c 0x7fbd9f32a120 0xffffffffffffff9c 0x7fbd9f395930 0x400 0x7fbd9f3c1c70 0x7ffff745b7c0 0x7fbda231b1fd

❯ sudo cat /proc/1308028/stack
[<0>] cv_wait_common+0xaa/0x130 [spl]
[<0>] txg_wait_synced_impl+0xcb/0x110 [zfs]
[<0>] txg_wait_synced+0x10/0x40 [zfs]
[<0>] zfs_link+0x611/0x740 [zfs]
[<0>] zpl_link+0xa2/0x120 [zfs]
[<0>] vfs_link+0x278/0x3b0
[<0>] do_linkat+0x2f7/0x320
[<0>] __x64_sys_linkat+0x5a/0x70
[<0>] do_syscall_64+0x3e/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x6e/0xd8

根本原因可能是 HDD 损坏,但这让我想知道是否有任何应用程序应该避免同步 IO,因为它们都有机会永远挂起,就像在这种情况下一样。或者是 ZFS 负责向其所有 API 添加默认超时,而我应该使用到处都有超时的文件系统?

(+ 另外,我可以退出此状态而不重新启动吗?)

答案1

我已经发现这个 GitHub 问题,所以这看起来不是内核的限制。

ZFS 可以使用异步实现和适当的超时,但它现在使用同步实现。

相关内容