CFS调度器的艺术–虚拟时钟从物理HZ中分离_cfs的时钟信号

如果你觉没有从cfs中看到什么,那么最简单我告诉你,就是提高了响应速度,为何呢?在shell下执行vmstat,观察cs字段,也就是1秒内进程切换的次数,然后尽量满载系统,观察cs和谁有关,它的值和进程的数量,进程的优先级有关,当进程的优先级很大的时候,cs的值就会减少,反之cs值会增加,我们看看这是为什么,O(1)调度器中,时间片的分配是绝对的分配,也就是说排除进程饥饿和内核抢占,每个进程运行的时间片是绝对的,是按照它的nice值计算出来的,如果说有变动,那也只是由于优先级动态调整导致的变化,那时的时间片只和进程的优先级有关,优先级变化幅度不大,时间片调整的也不多,因此我们不考虑优先级调整,一旦系统负载增加,调度完整个系统的所有进程的时间就会很长,活动进程数量越多,这一段时间就会越长,O(1)调度器中的时间片是固定的,那么cfs中的呢?

cfs中的时间片是动态分配的,是按照比例分配的而不是按照优先级固定分配的,其精髓就是系统拥有一个可配置的系统调度周期,在该周期内运行完所有的进程,如果系统负载高了,那么每一个进程在该周期内被分配的时间片都会减少,将这些进程减少的部分累积正好就是新进程的时间片,其实完全可以实现一个更简单的cfs版本,按照固定的顺序运行进程,就是将红黑树退化成一个先入先出的队列,每个进程都排入进程,然后运行完按比例分配给它的动态时间片之后排入队列最后,然后继续下一个进程,如此反复,但是这样实现的话很不灵活,很难实现内核的实时抢占和新进程的抢占以及进程唤醒后的补偿,于是红黑树完美的解决了这一个问题,于是就出现了虚拟时钟的概念,每一个进程都有一个虚拟时钟,按照不同的速率在每一个物理时钟节拍内向前推进,越高权值的进程的推进速率越慢,这样它就可以运行更多的物理时间。cfs调度器选择当前最慢的虚拟时钟进行推进,做到了公平。

cfs调度器中分配的动态时间片和HZ没有关系,它只和进程的权值以及当前红黑树进程的总权值还有调度周期有关,它本质上是一个相对的概念而不像以前是一个绝对的概念,相对的概念就是比绝对的概念要灵活,比如用相对目录的程序就比用绝对目录的程序拥有更好的移植性。cfs调度器将时间片的概念进行了相对了,抽象出了虚拟时钟的概念,如此一来1秒钟内的进程切换次数就不再和进程优先值有关了,而是和调度周期和进程数量有关,理论上就是(进程数量)*(1秒/调度周期)次,当然加上抢占和新进程创建就不是这么理想了,经过试验,和理论数据差别不大,在同一负载下,提高或者降低多个进程的优先级在O(1)调度器下会引起vmstat中cs的变化,但是在cfs中vmstat中的cs值却不会受到影响。

原文链接: https://blog.csdn.net/dog250/article/details/5302866

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    CFS调度器的艺术--虚拟时钟从物理HZ中分离_cfs的时钟信号

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410643

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 下午12:08
下一篇 2023年4月26日 下午12:08

相关推荐