2013-01-20 59 views
1

我在struct thread_info中添加了一个变量来计算某个事件。 这是在来宾操作系统中完成的。
在执行虚拟机的过程中,我每隔一段时间就从我的HOST读取这些变量。
我曾经观察过,有时我会得到预期的值,但有时候我会读取垃圾值。我认为海湾合作委员会正在优化我的变量,并且我正在阅读的内存处于垃圾状态。
我想知道可能的预防方法。
turnig关内核的GCC优化是没有问题的,因为我的目标是根据我计算的事件来加速虚拟机。
#pragma optimize("",off)
使效率降低,因为那样我就不得不将事件计数代码(只有2行)分解为一个函数。我计算的这个事件经常发生。
是否有我可以使用的#pragma技术?
将使我的变量易变的帮助原因?gcc是否优化了内核代码?

感谢

回答

3

制作volatile将防止从GCC优化出来的变量。您不需要完全禁用优化。

但是,当内核可能仍在更新时,您可能需要处理由于尝试从结构中读取而导致的竞争条件。尽管如此,我不知道如何在虚拟机环境中执行此操作。也许有一些特殊的guest虚拟机主机通信机制可以提供您正在使用的虚拟机管理程序。 VMware例如有VMCI

+0

我正在使用KVM ...虚拟机管理程序中有一些功能,它给出访客机器地址读取存储在该虚拟机中的内容。竞争条件不是问题,因为每个线程都可独占访问自己的内核堆栈而无需锁定.... – Deepthought