测量内核空间中的上下文切换时间

时间:2018-12-07 13:20:11

标签: linux linux-kernel linux-device-driver

有许多可用的程序可用于从用户空间计算上下文切换时间。但是所有这些都有一些开销-例如clock_gettime()计时器的开销,管道中的读/写操作的开销。

是否可以测量Linux内核空间中的上下文切换时间

可以是两个GLOABL变量,可以添加到内核模块中,该模块将存储调用 context_switch函数时的时间,即< strong> context_switch完成。

此方法面临的挑战是上下文切换功能可以由任何进程和任何核心调用。

添加一些内容以构造task_struct或struct rq是可行还是可取的?

我正在使用Ubuntu 16.04 OS。

1 个答案:

答案 0 :(得分:0)

如果要检查线程之间的上下文切换延迟(不包括线程执行时间):

基于内核配置,您可以参考

  • __ schedule:调度程序主API
  • preempt_schedule_common
  • 时间表
  • preempt_schedule_context
  • preempt_schedule_irq

但是,由于整个调度功能似乎不受spinlock_irq_disable()上下文的保护,因此很难计算确切的延迟。如果您未禁用“本地中断”,则延迟计算将包括ISR服务时间。

__ schedule正在为某些特定的关键部分禁用local_irq。无论如何,调度的核心部分是__schedule()API。