Linux设备驱动程序不安全FXSAVE / FXRSTOR错误 – 任何先例?

有一个令人讨厌的问题,暂时难倒了我公司的一些工程师试图进行debugging。

C ++程序通常运行在具有MPI的多核计算机集群上。

它会跑很长一段时间 – 也许是几天 – 然后突然失败。

大多数工程师已经消除了程序本身出现任何错误的合理可能性,所以他们开始将责任归于可能的硬件问题,但是我怀疑在Linux内核模块或者设备中必定存在软件问题驱动程序。

令人怀疑的是内核模块或设备驱动程序为了执行一些浮点计算,正在以对SMP系统不安全的方式执行FXSAVE / FXRSTOR。 这可能与FXS​​AVE在需要重入的内核例程中的静态缓冲区一样简单。 这将创build一个竞争条件错误,很less会损坏线程的浮点上下文。

在应用程序层面,似乎发生的情况是MXCSR的一个或多个位(即FXSAVE / FXRSTOR上下文的一部分)突然更改,但没有应用程序代码可以对其进行更改。

我在Windows上遇到了类似的问题,最终在video驱动程序中出现了一个错误,例如当应用程序代码被操作系统抢占时,该线程上下文中的某些MXCSR位已损坏。

我不是Linux Kernel黑客或设备驱动程序开发方面的专家,但是我正在读的是重入规则已经发生了很大的变化。 在非SMP和SMP(多核)系统之间; 在内核版本之间; 等等。所以种族条件错误的可能性似乎是合理的。

所以我的问题是: 是否有任何已知的Linux驱动程序(或内核)错误符合该描述?

如果他们有类似的症状,我可以引用任何先例都是有帮助的。 在这一点上,很多涉及到的人都是(IMHO)浪费时间思考“好吧,我的代码中没有错误,所以它肯定是坏的硬件”。 我想让他们超越这个,寻找更有可能成为真正原因的东西。

Solutions Collecting From Web of "Linux设备驱动程序不安全FXSAVE / FXRSTOR错误 – 任何先例?"

内核的源代码可用,通常是src.rpm。 你可以提取这个(和.tgz里面),然后grep一切fxsave asm指令等。 如果你发现了什么,我会很惊讶,但谁知道? 如果您正在运行任何二进制视频驱动程序,然后看看是否问题仍然没有加载。

  1. 下载kernel-2-whatever.src.rpm
  2. mkdir temp; CD温度
  3. rpm2cpio ../kernel*rpm | cpio -id
  4. tar xvf linux – *。tgz
  5. grep -ri fxsave *