为什么 12.04 删除了 -server 内核版本?

为什么 12.04 删除了 -server 内核版本?

Ubuntu 正在删除 -server 风格,如 12.04 发行说明中所述:

与 Beta-1 一样,Beta-2 内核不再带有单独的 amd64 -server 和 -generic 内核风格。它们已合并为一个 -generic 内核风格,以帮助减轻此 LTS 版本生命周期内的维护负担。

-generic 和 -server 之间的区别似乎与抢占、定时器中断和 i/o 调度程序有关,如下所述:https://help.ubuntu.com/10.10/serverguide/C/preparing-to-install.html#intro-kernel-diffs

我询问的是技术规格。

  1. 那么,现在会发生什么?
  2. 服务器版本是否可以运行桌面内核而不会造成性能损失?
  3. 这是否合理?
  4. 这些差异会带来什么结果?
  5. 它们可以在用户空间中改变吗?
  6. 自 12.04 起不再适用?
  7. 如果答案是肯定的,那么这种变化是否会引起性能损失?

这些都是可以回答的问题。我要求对包裹进行特定的更改,而不是其他任何事情。

答案1

正如您在发布公告中注意到的那样,通用内核和服务器内核版本已合并到 12.04 版本中,以期在 LTS 生命周期内减少维护负担。这两个内核版本实际上仅在两个主要内核配置选项方面有所不同:默认 I/O 调度程序和抢占模型。

Ubuntu 内核团队邮件列表中对此进行了详细讨论

如该主题中所述,默认 I/O 调度程序从“deadline”更改为“cfq”。但是,任何想要保留 Deadline I/O 调度程序的人都可以在启动时通过设置 来实现elevator=deadline

抢占模型从 CONFIG_PREEMPT_NONE 更改为 CONFIG_PREEMPT_VOLUNTARY。目前,遗憾的是我手头没有任何性能基准可供参考。希望这对您有所帮助。谢谢。

答案2

您提供的引文回答了您的“为什么”问题 - 因为这样更容易维护。内核功能参数化得相当好,您可以在运行时更改诸如调度程序之类的东西,因此没有必要迫切需要编译不同的默认值。

有关确切原因和详细讨论,您可以在 Ubuntu KernelTeam 邮件列表中询问 - 请参阅信息性 KernelTeam Wiki 页面了解联系信息。

答案3

现在的情况是,服务器和桌面都只有一个内核。IO 调度程序可以在运行时更改,但 CFQ 是功能最完整且维护最积极的调度程序,因此它是一个很好的默认选项。在大多数工作负载下,使用哪一个都没什么区别。服务器内核过去甚至会禁用自愿内核抢占,因为理论上它可能会让轻微地吞吐量更高,但我不知道有任何性能测量结果显示它确实有任何好处,因此实际上,服务器不会受到迁移到桌面抢占模型的影响。内核也是无滴答的( CONFIG_NO_HZ ),这意味着它只在需要时根据当前正在运行的应用程序计时器而不是以固定间隔来安排计时器中断,我相信现在的几个版本都是这种情况,尽管服务器指南上说了什么。

TL;DR:为服务器维护另一个内核没有任何好处,因此这种做法已经停止。

相关内容