2013-01-20 57 views
1

我在struct thread_info中添加了一個變量來計算某個事件。 這是在來賓操作系統中完成的。
在執行虛擬機的過程中,我每隔一段時間就從我的HOST讀取這些變量。
我曾經觀察過,有時我會得到預期的值,但有時候我會讀取垃圾值。我認爲海灣合作委員會正在優化我的變量,並且我正在閱讀的內存處於垃圾狀態。
我想知道可能的預防方法。
turnig關內核的GCC優化是沒有問題的,因爲我的目標是根據我計算的事件來加速虛擬機。
#pragma optimize("",off)
使效率降低,因爲那樣我就不得不將事件計數代碼(只有2行)分解爲一個函數。我計算的這個事件經常發生。
是否有我可以使用的#pragma技術?
將使我的變量易變的幫助原因?gcc是否優化了內核代碼?

感謝

回答

3

製作volatile將防止從GCC優化出來的變量。您不需要完全禁用優化。

但是,當內核可能仍在更新時,您可能需要處理由於嘗試從結構中讀取而導致的競爭條件。儘管如此,我不知道如何在虛擬機環境中執行此操作。也許有一些特殊的guest虛擬機主機通信機制可以提供您正在使用的虛擬機管理程序。 VMware例如有VMCI

+0

我正在使用KVM ...虛擬機管理程序中有一些功能,它給出訪客機器地址讀取存儲在該虛擬機中的內容。競爭條件不是問題,因爲每個線程都可獨佔訪問自己的內核堆棧而無需鎖定.... – Deepthought