两个非常有意思的适合桌面使用的Linux task调度器: BFS和MuqSS

本文介绍了Linux内核之外的两个适用于桌面环境的task调度器BFS和MuqSS,BFS追求简单,MuqSS在BFS基础上解决了查找效率和多CPU锁问题,提供更优的桌面交互体验。
摘要由CSDN通过智能技术生成

大家都知道Linux内核task调度器经历了O(n)O(1)调度器,目前是CFS,期间也出现了几个优秀的候选调度器,但最终都没能并入内核,我们只能从一些零散的patch和文章中知道它们的存在。

但Linux内核的世界乃是非常之宽广,在主线内核之外还有很多支线可供观摩。

本文我来介绍Linux主线内核之外的两个非常有意思的适合桌面使用的task调度器BFS和MuqSS。


Linux内核其实有很多支线分支,其中Linux-CK就是著名的一支:

Con Kolivas的信仰是 万事不能一刀切,没有放之四海而皆准的真理! 所以,他主要关注Linux桌面,他不相信存在one-size-fits-all的调度器,所以他设计了专门适用于桌面交互的BFS。

BFS不是一个普适的task调度器,相反,它仅仅适用于桌面交互的环境。所以,为你的水冷游戏机使用BFS,而不是在携带众核CPU嗡嗡作响的2U服务器上使用它。

MuqSS则是BFS的改进版。MuqSS的全称是 Multiple Queue Skiplist Scheduler

有必要先介绍一下什么是BFS,然后我们看MuqSS进行了什么改进。

简单来讲,BFS是一种向O(n)算法的回归,Con Kolivas认为:

  • 桌面系统的task数量不会太多。

  • 对于主线内核的调度算法太复杂。

基于这种认知,Con Kolivas设计了BFS。他认为 让一个支持4096个CPU的调度器去调度桌面交互应用的task是错误且可笑的做法 ,下面的BFS宣传漫画说明了这一点:640?wx_fmt=png

本文主要概括BFS以及其增强版MuqSS的核心思路而不是实现细节。

关于BFS的细节请参考下面的一篇文章:

https://blog.csdn.net/dog250/article/details/7459533

BFS的核心数据结构非常简单,就是普通双向链表,每次选择task时,该链表会被遍历,具有最小 Virtual Deadline 的task将会被选中。

显然,这个过程的时间复杂度是O(n)。其中, Virtual Deadline 的计算方法如下:

BFS虽然简单,但是两个问题却非常明显:

  1. 遍历查找的O(n)问题。

  2. 多CPU操作全局链表的锁问题。

众所周知, O(n)时间复杂度和锁” 在计算机领域一直饱受诟病,它们似难兄难弟一般的存在。BFS却毫不忌讳地同时将它们采纳到自己的核心算法中。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值