You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

perf stat如何统计上下文切换?与sched_switch事件有何差异?

perf stat上下文切换计数相关问题解答

1. context-switches计数的统计逻辑

perf stat的context-switches统计的是完整的上下文切换动作次数——每发生一次从进程A切换到进程B的操作,计数加1,既不是单独统计调度入,也不是单独统计调度出。

内核kernel/sched/core.c中的__schedule()函数,在prev != next时递增的switch_count计数器,就对应这个完整切换动作。而task_struct里的nvcsw(自愿上下文切换)和nivcsw(非自愿上下文切换)是进程级计数器,统计的是当前进程被调度出去的次数:比如调用阻塞read触发自愿切换时nvcsw加1,时间片耗尽被抢占时nivcsw加1,这和perf stat的全局/进程关联的完整切换计数维度不同。

2. context-switches与sched:sched_switch的计数差异

两者统计范围存在本质区别:

  • context-switches:默认仅统计与目标应用相关的上下文切换——只有当切换涉及目标进程(要么是目标进程被调度入,要么是被调度出)时,才会被计入。
  • sched:sched_switch:这个tracepoint会捕获系统中所有的上下文切换,包括其他无关进程之间的切换,所以计数远高于context-switches。

如果需要让sched:sched_switch仅统计目标应用相关的切换,可以使用过滤条件:

perf stat -e 'sched:sched_switch.prev_comm=my_application' -e 'sched:sched_switch.next_comm=my_application' -- my_application

此时统计结果会和context-switches接近(可能存在微小误差,源于统计机制的细节差异)。


内容的提问来源于stack exchange,提问作者Bahamas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:25:29