我在 Gentoo 3.13 上使用 Open MPI 1.8 通过服务器/客户端概念管理从一个程序到另一个程序的数据传输。服务器和客户端都作为单独的进程通过 mpiexec 启动。几天后(这是一个相当繁重的计算......),我有时会收到错误
mpiexec noticed that process rank 0 with PID 17213 on node XXX exited on signal 26 (Virtual timer expired).
不幸的是,该错误无法以可靠的方式重现,即该错误并不总是出现,也不总是出现在程序流中的同一点。我在其他机器上也遇到过这个错误。我已经将问题追溯到 ITIMER_VIRTUAL
,它在到期时会传递 SIGVTALRM
(例如,参见 http://man7.org/linux/man-pages/man2/setitimer.2.html )。在手册页的 BUGS 部分,它说
Under very heavy loading, an ITIMER_REAL timer may expire before the signal from a previous expiration has been delivered. The second signal in such an event will be lost.
我想知道类似的情况是否也适用于 ITIMER_VIRTUAL
?有没有人遇到过类似的问题并可以确认错误?
我能想到的唯一解决方法是调用setitimer(...)
并尝试自己操作计时器。但是,我希望有另一种方法,因为我不能总是修改客户的源代码。有什么建议吗?
最佳答案
由于这个问题尚未得到正式回答,我将代表 Hristo 回答(@HristoIliev:我希望这对您来说没问题)。正如我的问题的第一条评论中指出的那样,Open MPI 源代码中没有任何可能导致虚拟计时器到期的提示。事实上,计时器问题与第三方库有关,该库导致代码在不可预测的时间后崩溃(取决于机器的当前负载)。
关于linux - 打开 MPI 虚拟定时器已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734729/