为什么有人会选择不使用低延迟内核?

Sta*_*tec 61 kernel linux-kernel latency

我找不到关于rtlowlatencyLinux 内核的任何好的信息。

我很奇怪,为什么有人会希望使用低延时的内核。

另外,如果有人能说出具体的区别是什么,那也太好了。

Ste*_*itt 79

不同的配置,“通用”、“低延迟”(在 Ubuntu 中配置)和 RT,都是关于平衡吞吐量与延迟。通用内核支持吞吐量而不是延迟,其他内核支持延迟而不是吞吐量。因此,需要吞吐量多于需要低延迟的用户不会选择低延迟内核。

与通用配置相比,低延迟内核更改了以下设置:

  • 默认情况下,IRQ 是线程化的,这意味着更多的 IRQ(仍然不是所有的IRQ)可以被抢占,并且它们也可以被优先化并控制它们的 CPU 亲和性;
  • 整个内核都启用了抢占(CONFIG_PREEMPT而不是CONFIG_PREEMPT_VOLUNTARY);
  • 调试延迟工具的启用,使用户能够确定哪些内核操作阻碍进展;
  • 定时器频率设置为1000 Hz而不是250 Hz

RT 内核向主线内核添加了许多补丁,并进行了一些配置调整。大多数补丁的目的是通过移除或拆分锁来允许更多的抢占机会,并减少内核处理不间断任务所花费的时间(特别是通过改进日志记录机制并减少使用它们) . 所有这一切的目标是让内核满足最后期限确保当需要处理某事时,它不会忙于做其他事情;这与高吞吐量或低延迟不同,但修复延迟问题会有所帮助。

在大多数发行版中默认配置的通用内核被设计为“明智”的妥协:它们试图确保没有单个任务可以独占系统太长时间,并且任务可以合理频繁地切换,但不会影响吞吐量— 因为内核花在考虑是否切换任务(内核内部或内核外)或处理中断上的时间越多,整个系统花费在“工作”上的时间就越少。这种折衷对于延迟敏感的工作负载(例如实时音频或视频处理)来说还不够好:对于这些工作负载,低延迟内核以牺牲一些吞吐量为代价提供了较低的延迟。并且对于实时要求,实时内核会移除尽可能多的低延迟阻塞程序,但代价是增加吞吐量。

Linux 的主流发行版大多安装在服务器上,传统上认为延迟不是那么重要(虽然如果你做百分性能分析,并关心最高百分性能,你可能不同意),所以默认内核相当保守的。正如内核自己的文档所建议的那样,桌面用户可能应该使用低延迟内核。事实上,使用的低延迟内核越多,对其相关性的反馈就越多,这有助于对默认内核配置进行普遍适用的改进;RT 内核也是如此(许多 RT 补丁在某些时候是针对主流内核的)。

这个关于这个主题的演讲提供了很多背景。

  • RE: 定时器频率,内核几年前不是已经没有滴答声了吗?或者在某个时候又恢复了? (4认同)
  • RT是实时的吗? (2认同)
  • @genpfault 大多数内核使用空闲 dynticks,因此在系统繁忙时启用计时器中断。 (2认同)

gil*_*had 27

Stephen Kitt 解释了配置和平衡以及技术参数方面的所有内容。我只想提供一个小的直观区别:

  • 你是在野生动物园,乘坐吉普车穿越地形。你的猎物正在奔跑。当猎物在十字准线中时,您扣动扳机并射击 - 计算很简单 - 十字准线中的猎物 = 命中,猎物不在十字准线 = 未命中 - 你迫切需要低延迟- 然后你恢复,重新装填步枪,找到另一个猎物- 不需要额外的速度,不需要规律。延迟就是全部。

  • 您正在转换来自该 safari 的视频。它很长,需要几个小时。您不在乎何时处理特定帧以及某些帧是否比其他帧花费更多时间来处理。您需要尽快完成流程 - 更高的吞吐量意味着更少的时间,其他都不重要

  • 您正在收到电报 - 只是短线,长线和空格 - 莫尔斯很容易破译,您不需要每个脉冲开始或结束的确切时间,但是您需要保证,您不会错过任何一个 - 您需要实时(可能慢,电报没那么快,但一定是有规律的

在这三个示例中,出于显而易见的原因,您清楚地选择了延迟吞吐量规律性中的一个,而牺牲了其他两个。如果您不能同时拥有所有三个,那么只有其中一个才是真正想要低延迟的。

  • 如果您需要吞吐量,您可以让每个任务尽可能长时间运行,只花一小部分时间来管理切换。如果您需要非常低的延迟,您可能(在极端情况下)花费更多时间在任务之间跳过,然后执行这些任务。刚才我的系统几乎什么都不做,我有 149 个任务“同时”运行——每个任务都有自己的一套权限、映射的内存页面等。想象一下你在做你的工作并等待纸质电子邮件——如果你每天检查它(下班起床,走到邮箱,看,回去)= 高延迟。低延迟 = 每 5 分钟检查一次 (5认同)
  • @OlegV.Volkov 如果 OP 问,它们之间有什么区别,为什么有人甚至想要别的东西,然后是延迟,那么我想,这些词对他来说并不像我们两个那样简单直观。如果 OP 说,它有助于为他澄清事情,那么我想,我的解释对他来说更直观,而不是简单的词。 (5认同)
  • 实时的黄金法则:性能并不意味着什么,重要的是保持你的最后期限 (4认同)
  • @ rasmus91 我将其改写为“如果您错过了截止日期,则性能没有任何意义”。你仍然更喜欢早点得到答案,它不应该导致你的火箭坠毁,因为另一个模块没有足够快地运行:) (4认同)
  • 系统“同时”运行许多任务,但仔细观察它只是从一个跳到另一个非常快。要跳过(切换内容),它必须保存一项任务的所有寄存器、程序计数器、统计信息等,并加载下一项任务的所有寄存器、程序计数器、统计信息等。这需要时间。此外,它还必须决定下一步是什么(基于优先级、已经消耗的资源等)——另一个时间花费。您需要读取键盘、鼠标、以太网、wifi、从磁盘接收数据、将缓存数据保存到磁盘(如果可能)、交换未使用的内存,也许您有桌面,其中显示时间和日期以及系统统计信息 - 很多任务 (3认同)
  • 这次真是万分感谢。它有助于澄清事情。但是(从相当低的水平)什么是“扳机射击”。换句话说,操作系统正在执行/处理哪些任务会牺牲延迟与吞吐量? (2认同)
  • @Startec 基本上运行操作系统。您愿意等待服务事件的时间越少,您最终停止运行进程并运行操作系统来处理事件的时间就越多。这意味着您为操作系统而不是程序使用了更多百分比的 CPU 周期。这是延迟和吞吐量之间的基本权衡 (2认同)

小智 6

通俗地说:

  • 如果您不经常让您的 PC 工作完成,那么低延迟内核适合您。
  • 如果您经常为 PC 分配 CPU 密集型任务,那么通用内核适合您。
  • 如果您只是随意使用 PC 浏览、播放视频、音乐……那么低延迟适合您。
  • 如果您正在玩游戏,那么低延迟和通用之间的理论差异将是低延迟在所有情况下都会获胜,除了一种情况;级别加载,但这更多地取决于您是否有 SSD,以及 SSD 的质量,因为您的基本 SSD 以 1X 速度运行,而最高 PCI-Express SSD 以 6X 速度运行。传统硬盘驱动器的速度为 0.1 倍。所以是的,SSD 可以比传统硬盘驱动器快 60 倍。

基本上,通用内核在最短的时间内完成最多的工作,而低延迟内核使 PC 响应最快;假设内核或系统中没有遇到错误。

对于大多数人来说,低延迟内核最有意义。但是如果你总是给你的 PC 做很多工作,那么通用内核就是为你准备的。

如果 90% 的时间跨所有内核的 CPU 负载 < 60%,那么另一种说法是低延迟内核适合您。另一方面,如果您在所有内核上的 CPU 负载超过 80%、90% 或更多时间,那么通用内核适合您。

测验:哪个内核在基准测试中得分更高?只要延迟作为基准参数被忽略,泛型总是会赢得比赛,但低延迟就像你身边有一只准备委托的章鱼。


Mic*_*ael 5

因为有取舍。切换进程或进入/退出中断需要时间。例如,以 1000Hz 而不是 250Hz 的频率运行调度程序意味着您将有一个计时器中断,并且可能会以四倍的频率切换进程。这可以让进程更快地做出反应,因为它更经常地被允许执行。但是,作为人类,您可能不会注意到任何差异(250Hz 意味着每 4 毫秒一次,这已经比人类的任何反应时间快得多)。

处理能力或 I/O 吞吐量的总量是有限的,更频繁地调用调度程序只会浪费一部分。