2012-12-14 26 views
0

有没有办法在C中执行一段代码而不会遇到上下文切换?在没有上下文切换的情况下执行代码块

我已修改perf stat以定期对计数器进行采样。虽然这有效,但最终会给我一些不好的数据点,例如0循环x指令。

我相信这种情况发生的原因是由于上下文切换。由于我的代码总是在指令计数器之前拉出循环计数器值,如果在拉出循环计数器值之后发生上下文切换,并且如果我正在执行某个部分调度量的分析过程,那么当我终于拉出指令计数器的值,这将是我已经拉过的循环计数器值的“一个”。

有什么办法可以在不允许上下文切换的情况下执行代码块吗?

回答

1

不,没有简单的方法来实现这一点 - 在没有上下文切换的情况下执行代码 - (除非您的代码在内核中运行,但您仍然想要处理中断)。

您可以使用clock_gettime(2)来测量Linux应用程序内部的时间。仔细阅读time(7)

顺便说一句,你确实需要上下文切换。没有他们,一些电脑可能会变得太热并且被打碎。 (有些机器用软件处理他们的粉丝)。

+0

我确实尝试通过测量时间来确定是否发生了上下文切换。通常,拉一个计数器值所需的时间约为60〜80ns。但是,即使从循环计数器读数结束到指令计数器读数结束所用的时间在此时间内,我的指令计数器似乎仍在继续。 有没有一种方法可以识别上下文切换的发生而不使用时间延迟? (由于延迟不够大,无法将其置于上下文切换) –

相关问题