为什么选择低延迟内核而不是通用内核或实时内核?

Sta*_*arx 125 kernel

安装 Ubuntu Studio 12.04 后,我发现它使用了低延迟内核。

我搜索了解释以及如何将其改回实时或通用解释。但是,Linux 的这一部分似乎没有被涵盖来解释详细信息。

问:为什么选择低延迟内核而不是通用内核或实时内核?

PS:我已经阅读了这个问题和这篇文章的答案。

小智 71

这些是一些简单的指南,可帮助您了解应该测试哪个内核以及以何种顺序适合您的用例。

  • 如果您的系统不需要低延迟,那么请使用 -generic 内核。
  • 如果您需要低延迟系统(例如用于录制音频),请使用 -preempt 内核作为首选。这会减少延迟,但不会牺牲省电功能。它仅适用于 64 位系统(也称为 amd64)。
  • 如果 -preempt 内核不能为您的需要提供足够低的延迟(或者您有 32 位系统),那么您应该尝试 -lowlatency 内核。
  • 如果 -lowlatency 内核还不够,那么你应该尝试 -rt 内核
  • 如果 -rt 内核对您来说不够稳定,那么您应该尝试 -realtime 内核

Ubuntu 帮助源

所以这取决于你将用你的工作室发行版做什么。对于需要快速最终用户响应时间的大多数用户来说,通用就可以了,对于需要进行专业视频编辑的其他用户来说,即使是简单的丢帧也是不可接受的,则需要实时内核。

如需更详尽、易于理解的博客文章,请阅读此链接

  • 这些在 2015 年仍然成立吗?`-preempt`、`-rt` 和 `-realtime` 内核不再存在 (12认同)
  • 不。。我不认为问题解决了。如果你的回答有什么作用,那就更增加了我的好奇心。 (5认同)

小智 59

我是 ubuntu 粉丝链接的博文的作者:http : //sevencapitalsins.wordpress.com/2007/08/10/low-latency-kernel-wtf/

那篇博文没有提出任何事实,只是理论。这就是它的工作方式,实际上:处理器更频繁地“停止”以查看是否有一些进程需要立即关注。这意味着这些进程将在其他进程之前执行,因此您在编码时不会跳帧,或者在鼠标点击和敌人死亡之间有巨大的延迟时间。这并不意味着所有进程都会更快结束:实际上 CPU 正在浪费更多时间来决定接下来将执行哪个进程,并进行上下文切换。所以总执行时间更长,这就是为什么没有人在网络服务器或数据库机器上运行抢占式内核的原因。但是抢占式 300Hz(甚至 1000Hz)内核最适合游戏服务器。

但是现在处理器有很多内核,所以当需要注意的进程很少时,它们可以很容易地分配到不同的内核上,而不是等待一个内核来处理它。

(stackexchange 需要我的参考资料/个人经验:我是一名电子工程师,嗜血的 noobgamer 在http://www.gamezoo.it 上管理着几个游戏服务器)。

因此,根据经验,我会说:如果您的处理器是强大的数字运算高频四核,并且您通常不会在编码/解码/游戏时打开大量网页(呵呵),那么您可以只需尝试通用(或 i686,或 amd64,如果它们存在)内核并具有最高可能的吞吐量(即,处理器能够执行的原始数字处理)。如果您遇到问题(它们确实应该是次要的)或者您的机器比市场上的顶级机器稍弱,请选择-preempt。

如果您使用的是只有一个或两个内核的低端机器,请尝试使用 -lowlatency。您也可以尝试 -realtime,但您会发现它往往会阻塞进程,直到“实时”进程完成其工作。我相信实时内核不是“vanilla”内核,而是应用了 CONFIG_PREEMPT_RT 补丁。我认为实时内核只适用于那些必须在嵌入式系统上构建单个应用程序的人,所以普通桌面用户不应该有真正的好处,因为他们通常同时运行相当数量的应用程序。

最后,如果您想自己重新编译内核以获得低延迟桌面,最相关的内核选项是:

PREEMPT=y
Run Code Online (Sandbox Code Playgroud)

和:

CONFIG_1000_HZ=y
Run Code Online (Sandbox Code Playgroud)

要添加一些省电功能,您可以查看这个:

CONFIG_NO_HZ=y
Run Code Online (Sandbox Code Playgroud)


小智 8

我有这台旧笔记本电脑,双 AMD A6-4400M,频率为 1600MHz,我外出时很少使用它,主要用于阅读电子邮件和浏览休闲网站。有一些东西,可能与软件更新有关,导致它没有响应。就像在没有看到第一个字符的情况下输入十几个字符一样。通常小部件询问我是否应该强制退出进程。

sudo apt-get install linux-lowlatency并重新启动,它变得平滑和响应。(uname -r 5.0.0-20-lowlatency.) 太好了,我几年前就该换了。让我强调 Seven 的回答:除非您想从数字运算服务器中榨取最大,否则请选择 -preempt


eth*_*han 7

控制内核优化的三个主要性能参数,其中一个很少在其他两个的上下文中进行讨论,而且几乎从未进行过基准测试。这降低并扭曲了我们对绩效的看法:

  1. 吞吐量:媒体对哪些内容进行基准测试和讨论。衡量给定时间范围内有多少数据可以通过处理器的数据。
  2. 能源效率:也经常进行基准测试;取决于您如何测量它,处理一定量的数据或保持系统在给定时间段内运行的成本(能源或热量)是多少。这对笔记本电脑的电池寿命以及运行服务器或其他“始终在线”硬件的成本都有影响。
  3. 延迟:几乎从未进行过基准测试,但同样重要。它是对信号或数据通过路径传输的平均时间的度量,通常以毫秒为单位。“抖动”一词描述了延迟随时间的变化,并且是延迟性能的一个子组成部分。

这是“这里有 3 个选项,选任意两个”的经典案例。您可以获得吞吐量和能源效率,但会牺牲延迟。您可以拥有吞吐量和低延迟,但会牺牲能源效率。您可以拥有低延迟和能源效率,但这会牺牲吞吐量。

这种权衡的一个例子是“race-to-sleep”: https: //en.wikipedia.org/wiki/Race_to_sleep(由于某种原因不再存在,但https://www.quora.com/What-is-race-停止策略以使处理器节能)。不幸的是,CPU 仍然需要几毫秒才能从各种级别的睡眠状态“唤醒”(睡眠越深,唤醒所需的时间越长),这使得 CPU 频率缩放对于延迟性能来说非常可怕,并且可能是最大的单一延迟性能之一。罪犯。这就是为什么即使是 Mac OS 系统也可以通过禁用 CPU 频率缩放来防止缓冲区溢出和欠载而受益匪浅(缓冲区溢出是指进程需要很长时间才能完成和重新路由,因此当缓冲区重新填充时,最后一位会被丢弃;而欠载是指未能及时充分填充缓冲区以进行处理。两者通常称为“xruns”并表示潜在的数据丢失)

另一个是逻辑核心和对称多线程,这是通过更有效地使用所有核心来“竞争睡眠”的子集,但代价是增加任何单个进程完成所需的时间。这对能源效率和吞吐量也有好处,但对延迟没有好处,延迟与单个“关键任务”任务完成的可靠性和速度有关,而不是一组任务的总和。

-generic:适用于不处理延迟以及保证将一定量的信息路由到处理器并路由到其目的地的任何用例。一般而言,通用可提供最大的吞吐量性能和能源效率,但会降低延迟的优先级

-lowlatency、-rt 和 -realtime 内核提供了不同程度的对延迟的更多关注,同时增加了吞吐量和/或能源效率的牺牲或降低优先级。用例决定了哪些最适合哪种情况,并且这些并不是唯一的选择。例如,还有https://liquorix.net/声称针对最常见的使用场景进行了优化,通过在吞吐量上做出较小的牺牲来获得相对较大的延迟性能增益。

这个问题的某些组成部分与其他问题令人困惑地重叠,并且随着内核行之间的性能差异消失,这个问题的部分内容正在变得过时。例如,通用内核包含许多低延迟优化(例如 PREEMPT),这使得其他专用内核更加专用。很难给出具体数字,但在我的系统上,-generic 现在可以处理低至约 20 毫秒的延迟,并且具有一定的可靠性(最小或没有缓冲区溢出或欠载)。

老实说,我认为这种碎片化存在于

  1. 开源软件的副产品,通常可以对内核线和软件进行分叉,以针对特定用例优化它们(是的,“-generic”是一种特定用例,只是一个恰好涵盖大多数用例的用例:)
  2. 几乎完全忽略了低延迟性能调整对 Linux 和 Windows 范例中通用用户体验的重要性。

Mac OS X 是不同的,你可以在这里阅读原因: https: //www.cse.unsw.edu.au/~cs9242/10/lectures/09-OSXAudiox4.pdf(这是政治和经济,而不是天才和远见) !)。结果是系统吞吐量性能略有下降,可以更好地处理延迟问题。因此,Mac OS X 及其 iOS 衍生产品最终垄断了数字多媒体制作市场。具有一个内核。非多媒体用户不会抱怨 Mac OS X 一贯较低的吞吐量性能,因为没有人真正关心文件转码时间是 29 秒还是 30 秒,或者启动程序是 4.75 秒还是 5 秒(即使是基准测试者和“性能怪胎”)在日常、现实世界中不会注意到这些差异),每个人都关心用户体验是否卡顿和音频故障。这是一个与延迟和响应能力的重要性相关的心理问题,而不是吞吐量性能问题(这是基准测试战争唯一考虑的问题),到目前为止,只有 Mac OS X 真正认真考虑了整个操作系统的设计。

https://liquorix.net/在调整的性能优先级方面可能更符合 Mac 内核(我现在正在确认这一点)。我相信(并且希望)这就是通用内核的发展方向。这对于 90% 的用户来说已经足够了,除了那些真正需要的用户。他们可以获得的所有吞吐量或 b.极低的无干扰延迟和抖动。对于这些情况,总会有某种自定义内核或多个内核。我相信 NASA 会推出自己的产品,但我可能是错的:)