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