我在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部分,它表示
在非常繁重的负载下,ITIMER_REAL计时器可能会在之前到期的信号发送之前到期。这种情况下的第二个信号将丢失。
我想知道ITIMER_VIRTUAL
是否也有类似的东西?有没有人遇到类似的问题,可以确认错误?
我能想到的唯一解决方法是调用setitimer(...)
并尝试自己操作计时器。但是,我希望还有另一种方法,因为我不能总是修改客户端'源代码。有什么建议吗?
答案 0 :(得分:0)
由于这个问题没有得到正式回答,我将代表Hristo(@HristoIliev:我希望你可以这样做)。正如在我的问题的第一条评论中指出的那样,Open MPI源代码中没有一个提示可能导致虚拟计时器到期。实际上,计时器问题与第三方库有关,这使得代码在不可预测的时间后崩溃(取决于机器的当前负载)。