Linux调度分析(8)调度core之调度时钟

调度时钟为调度的硬件基础,它为per-CPU设备。在ARM64中为arch_timer,13号中断。

调度时钟的模式arch_timer

CONFIG_HZ_PERIODIC=y: 不忽略任何调度时钟,导致比较耗电
CONFIG_NO_HZ_IDLE=y:对于idle CPU忽略调度时钟
CONFIG_NO_HZ_FULL=y:对于idle CPU或只有一个runnable task运行的CPU忽略调度时钟

调度时钟中断处理

当tick时钟中断到达时,处理如下:
image

  • 调用run_local_timers处理timer,如果有超时timer,触发TIMER_SOFTIRQ软中断处理;
  • 处理IRQ WORK
  • 调用sched_tick处理调度相关
  • 调用run_posix_cpu_timers处理posix cpu timer

IRQ WORK

IRQ WORK线程为Per-CPU内核线程,FIFO,处理每个CPU上的IRQ WORK。
当IRQ WORK为IRQ_WORK_LAZY时,放到lazy_list中,待tick时钟达到时在时钟中断处理函数中处理irq_work_tick;
否则放入到raised_list中,发送IPI中断,在IPI中断处理函数处理raised_list上的IRQ WORK(同时也处理可能存在的lazy_list)
image
内核中其他模块可以通过init_irq_work()初始化IRQ WORK, 通过irq_work_queue()触发IRQ WORK。

sched_tick调度相关的处理

在调度时钟中断中主要处理调度相关的事情如下:

  • 负载更新和计算
  • CPU时钟更新
  • 检查是否调度(进程时间片)
  • 负载均衡
posted @ 2026-01-19 20:22  耳朵一样  阅读(0)  评论(0)    收藏  举报