【问题标题】:Executing block of code without context switch在没有上下文切换的情况下执行代码块
【发布时间】:2012-12-14 20:38:56
【问题描述】:

有没有什么方法可以在 C 中执行一段代码而不会发生上下文切换?

我已修改 perf stat 以定期对计数器进行采样。虽然这可行,但它最终给了我一些不好的数据点,例如 0 个周期 x 指令。

我认为发生这种情况的原因是因为上下文切换。

由于我的代码总是在指令计数器之前提取循环计数器值,如果在提取循环计数器值之后发生上下文切换,并且如果我正在分析的进程针对调度量的某些部分执行,那么当我最终拉指令计数器值,它将比我已经拉出的循环计数器值“提前”。

有什么方法可以在不发生上下文切换的情况下执行代码块?

【问题讨论】:

    标签: linux-kernel context-switch perf


    【解决方案1】:

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

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

    顺便说一句,您确实需要上下文切换。没有它们,某些计算机可能会过热并损坏。 (有些机器用软件处理它们的风扇)。

    【讨论】:

    • 我确实尝试通过测量时间来确定是否发生了上下文切换。一般情况下,拉动一个计数器值所需的时间约为 60~80ns。但是,即使从循环计数器读取结束到指令计数器读取结束所花费的时间在这段时间内,我的指令计数器似乎也会继续。有没有一种方法可以在不使用时间延迟的情况下识别上下文切换的发生? (由于延迟不够大,无法自信地将其归因于上下文切换)
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2020-09-05
    相关资源
    最近更新 更多