其中sched_fair.c
有:
unsigned int sysctl_sched_latency = 5000000ULL //5m
unsigned int sysctl_sched_min_granularity = 1000000ULL //1ms
我知道 Linux 公平时间片取决于 nr_running 和这个公平任务的相对权重,但通过代码研究,我发现主要思想是将时间片保持在 1 到 5 毫秒。如果我理解错了,请纠正我。我在这里一定是错的,但我就是不知道怎么做!
还知道 HZ 或每秒系统滴答数或每秒计时器中断数对于 arm 机器(以及大多数非桌面机器)通常为 200 或 100,这给了我们 5 到 10 毫秒的滴答声速度。
时间片通过启动 rq->hrtick_timer inset_next_entity()
来执行,每次公平任务被安排运行,并调用resched_task()
超时回调函数hrtick()
。该计时器只是计时器 irq 处理程序在每个滴答时处理的排队计时器之一,timer_tick()
...。run_local_timer()
似乎没有其他隐藏的秘密。
那么我们如何才能得到一个小于 5 ms 的时间片呢?请帮助我理解这一点。非常感谢!