2012-12-14 28 views
0

有沒有辦法在C中執行一段代碼而不會遇到上下文切換?在沒有上下文切換的情況下執行代碼塊

我已修改perf stat以定期對計數器進行採樣。雖然這有效,但最終會給我一些不好的數據點,例如0循環x指令。

我相信這種情況發生的原因是由於上下文切換。由於我的代碼總是在指令計數器之前拉出循環計數器值,如果在拉出循環計數器值之後發生上下文切換,並且如果我正在執行某個部分調度量的分析過程,那麼當我終於拉出指令計數器的值,這將是我已經拉過的循環計數器值的「一個」。

有什麼辦法可以在不允許上下文切換的情況下執行代碼塊嗎?

回答

1

不,沒有簡單的方法來實現這一點 - 在沒有上下文切換的情況下執行代碼 - (除非您的代碼在內核中運行,但您仍然想要處理中斷)。

您可以使用clock_gettime(2)來測量Linux應用程序內部的時間。仔細閱讀time(7)

順便說一句,你確實需要上下文切換。沒有他們,一些電腦可能會變得太熱並且被打碎。 (有些機器用軟件處理他們的粉絲)。

+0

我確實嘗試通過測量時間來確定是否發生了上下文切換。通常,拉一個計數器值所需的時間約爲60〜80ns。但是,即使從循環計數器讀數結束到指令計數器讀數結束所用的時間在此時間內,我的指令計數器似乎仍在繼續。 有沒有一種方法可以識別上下文切換的發生而不使用時間延遲? (由於延遲不夠大,無法將其置於上下文切換) –

相關問題