IT资讯 Linus 礼貌回应开发者对 Linux 调度器存在问题的批评

egbert · 2020-01-09 11:00:06 · 热度: 16

几天前,一名使用 C++ 的游戏开发者 Malte Skarupke 发表博客称在为 Google 的云游戏服务平台 Google Stadia 提供 Linux 游戏时遇到了问题,并表示问题显然来自 Linux 内核的调度程序,尤其是 Linux 内核的自旋锁(Spinlock)。

Malte 在这篇批评 Linux 内核调度程序糟糕的文章中指出:“我发现大多数互斥锁的实现都非常好,而大多数自旋锁的实现都非常差,虽然 Linux 的调度程序还算可以,但远未达到理想状态。最受欢迎的替代方案 MuQSS 调度程序也还存在其他问题。另外,Windows 调度程序的表现也非常好。”

对于 Malte 的这篇文章,Linus Torvalds 也发表了自己的评论。在交流的过程中,变得慈祥的 Linus 虽然不同意文章的观点,但他的言语也不再那么激烈。通篇看下来,"Pure Garbage" 应该是唯一一个比较符合 Linus 以前“暴躁”风格的词。

Linus Torvalds 写道:“整篇文章似乎都是错误的,并且作者所测量的内容与他认为并声称的完全不同。首先,自旋锁只能是如果你实际上知道自己在使用它们时未安排时间才使用...基本上是在释放锁之前读取时间,然后在再次获取锁之后读取时间,并声称时间差是没有锁之后的时间。这简直是愚蠢和毫无意义且完全是错误的,纯属胡扯!”

Linus 继续补充说:“那么,解决此问题的方法是什么?告诉系统你正在等待锁的地方使用锁,并在锁线程完成时告知你解锁线程,以便调度程序合理运行,而不是(随机)运行……再重复一次:除非你真正知道自己在做什么,否则不要在用户空间中使用自旋锁,并且要认识到能搞清楚自己在做什么的可能性基本上为零。”

有关更多有趣的技术细节,请参阅 Linus 的文章全文

在另一篇文章中,Linus 继续指出游戏开发者的锁从根本上是错误的。换句话说,从他的角度来看,Linux 内核至少不应该背全部责任。但是,如在其他实例中所示,Linux 内核的调度程序代码仍有改进的空间。更重要的是,Linus 的回应不再像以前那样充满“对抗性”,他不同意开发者的观点,于是指出并一直在耐心解释那篇博文错误的地方。

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册