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

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

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

我想知道为什么有人会不是想要使用低延迟内核。

另外,如果有人能说出具体差异是什么,那就太好了。

答案1

不同的配置,“通用”、“低延迟”(如 Ubuntu 中的配置)和 RT(“实时”),都是为了平衡吞吐量与延迟。通用内核更看重吞吐量而不是延迟,其他内核更看重延迟而不是吞吐量。因此,对吞吐量的需求大于对低延迟的需求的用户不会选择低延迟内核。

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

  • 默认情况下,IRQ 是线程化的,这意味着更多的 IRQ(仍然没有全部IRQ)可以被抢占,它们也可以被优先化并控制它们的CPU关联性;
  • 抢占在整个内核中启用(CONFIG_PREEMPT代替CONFIG_PREEMPT_VOLUNTARY);
  • 延迟调试启用工具,以便用户可以确定哪些内核操作正在阻止进度;
  • 定时器频率设置为1000赫兹代替250赫兹

RT 内核添加一些补丁主线内核,以及一些配置调整。大多数这些补丁的目的是通过删除或分割锁来允许更多的抢占机会,并减少内核处理不间断任务所花费的时间(特别是通过改进日志记录机制并减少使用它们) 。这一切的目标是让内核按时完成任务,IE确保当需要处理某件事时,它不会忙于做其他事情;这与高吞吐量或低延迟不同,但解决延迟问题会有所帮助。

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

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

本次演讲主题为提供了相当多的背景。

从 Linux 内核 5.12 版本开始,“动态抢占”可以启用;这允许在内核命令行上使用以下命令覆盖默认抢占模型preempt=范围。目前支持none(服务器)、voluntary(桌面)和full(低延迟桌面)。

答案2

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

  • 您正在狩猎,乘坐吉普车穿越地形。你的猎物正在逃跑。当猎物位于十字准线中时,你扣动扳机,步枪射击 - 计算很简单 - 猎物在十字准线中 = 击中,猎物不在十字准线中 = 未击中 - 你迫切需要低延迟- 然后你恢复,重新装弹步枪,寻找另一个猎物 - 不需要额外的速度,不需要规律性。潜伏是全部。

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

  • 你收到的是电报 - 只是短、长和空格 - 莫尔斯电报很容易破译,你不需要知道每个脉冲到底何时开始或结束,但你需要一个保证, 你所做的不要错过其中任何一个 - 你需要即时的(它可能很慢,电报没那么快,但它必须是有规律的

在这三个示例中,您显然只选择了其中之一潜伏,吞吐量或者规律性,牺牲其他两个 - 原因显而易见。如果您无法同时拥有这三项,那么只有其中一项您真正需要低延迟。

答案3

通俗地说:

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

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

对于大多数人来说,低延迟内核最有意义。但是,如果您总是给您的 PC 分配大量工作要做,那么通用内核就适合您。

换句话说,如果 90% 的时间所有内核的 CPU 负载 < 60%,那么低延迟内核就适合您。另一方面,如果您的所有内核的 cpu 负载在大部分时间都大于 80%、90% 或更多,那么通用内核就适合您。

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

答案4

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

处理能力或 I/O 吞吐量的总量是有限的,更频繁地调用调度程序仅意味着您将浪费其中的一部分。

相关内容