Startec Asked: 2019-11-26 00:19:44 +0800 CST2019-11-26 00:19:44 +0800 CST 2019-11-26 00:19:44 +0800 CST 为什么有人会选择不使用低延迟内核? 772 我找不到任何关于Linux 内核的rt好信息。lowlatency 我想知道为什么有人不想使用低延迟内核。 另外,如果有人能说出具体的区别是什么,那也很好。 linux-kernel kernel 4 个回答 Voted Best Answer Stephen Kitt 2019-11-26T01:41:22+08:002019-11-26T01:41:22+08:00 不同的配置,“通用”、“低延迟”(在 Ubuntu 中配置)和 RT(“实时”),都是为了平衡吞吐量与延迟。通用内核更倾向于吞吐量而不是延迟,其他内核更倾向于延迟而不是吞吐量。因此,需要吞吐量超过需要低延迟的用户不会选择低延迟内核。 与通用配置相比,低延迟内核更改了以下设置: 默认情况下,IRQ 是线程化的,这意味着更多的 IRQ(仍然不是所有的 IRQ)可以被抢占,并且它们也可以被优先处理并控制它们的 CPU 亲和性; 在整个内核中启用了抢占(CONFIG_PREEMPT而不是CONFIG_PREEMPT_VOLUNTARY); 启用延迟调试工具,以便用户可以确定哪些内核操作正在阻塞进度; 定时器频率设置为1000 Hz而不是250 Hz。 RT 内核为主线内核添加了许多补丁,并进行了更多配置调整。大多数补丁的目的是通过删除或拆分锁来提供更多抢占机会,并减少内核处理不间断任务所花费的时间(特别是通过改进日志机制并减少使用它们) . 所有这一切的目标是让内核满足最后期限,即确保在需要处理某些事情时,它不会忙于做其他事情;这与高吞吐量或低延迟不同,但解决延迟问题会有所帮助。 在大多数发行版中默认配置的通用内核被设计为一种“明智的”折衷方案:它们试图确保没有单个任务可以长时间独占系统,并且任务可以合理频繁地切换,但不会影响吞吐量——因为内核花在考虑是否切换任务(内核内部或外部)或处理中断上的时间越多,整个系统“工作”的时间就越少。对于实时音频或视频处理等对延迟敏感的工作负载,这种折衷方案还不够好:对于这些工作负载,低延迟内核以牺牲一些吞吐量为代价来提供更低的延迟。对于实时要求,实时内核会以更高的吞吐量为代价,尽可能多地移除低延迟阻塞器。 Linux的主流发行版大多安装在服务器上,传统上延迟并没有被认为是那么重要(尽管如果您进行百分位性能分析,并且关心最高百分位性能,您可能会不同意),因此默认内核相当保守的。正如内核自己的文档所建议的那样,桌面用户可能应该使用低延迟内核。事实上,使用的低延迟内核越多,关于它们的相关性的反馈就越多,这有助于对默认内核配置进行普遍适用的改进;RT 内核也是如此(许多 RT 补丁在某些时候是针对主流内核的)。 这个主题的演讲提供了相当多的背景。 从 Linux 内核 5.12 版本开始,可以启用“动态抢占” ;这允许使用参数在内核命令行上覆盖默认的抢占模型preempt=。目前支持none(服务器)、voluntary(桌面)和full(低延迟桌面)。 gilhad 2019-11-26T10:05:26+08:002019-11-26T10:05:26+08:00 Stephen Kitt 解释了配置和平衡以及所有技术参数都很好。我只想提供一个小小的直观区别: 你在野生动物园,骑着吉普车穿越地形。你的猎物正在奔跑。当猎物处于准星中时,您扣动扳机,步枪射击-计算很简单-准星中的猎物=命中,准星中的猎物=未命中-您迫切需要低延迟-然后您恢复,重新加载步枪,找到另一个猎物- 不需要额外的速度,不需要规律性。延迟就是一切。 您正在转换来自该 Safari 的视频。它很长,需要几个小时。您不在乎何时处理特定帧以及某些帧是否比其他帧花费更多时间来处理。您需要尽快完成流程 - 更好的吞吐量意味着更少的时间,其他都不重要 您正在收到电报 - 只是短裤,长款和空格 - 莫尔斯很容易破译,并且您不需要每个脉冲开始或结束的确切时间,但您需要保证,您不会错过任何一个 - 您需要实时(它可能很慢,电报没有那么快,但它必须是定期的 在这三个示例中,您清楚地选择了延迟、吞吐量或规律性中的一个,而牺牲了其他两个——原因很明显。如果你不能同时拥有所有三个,那么只有一个你真的想要低延迟。 Thmtrhxsu 2020-01-28T21:57:45+08:002020-01-28T21:57:45+08:00 通俗地说: 如果您不经常让您的 PC 工作完成,那么低延迟内核适合您。 如果您经常让您的 PC CPU 密集型任务完成,那么通用内核适合您。 如果您只是随意使用 PC 浏览、播放视频、音乐……那么低延迟非常适合您。 如果您正在玩游戏,那么低延迟和通用之间的理论差异将是低延迟将在除一种情况之外的所有情况下获胜;级加载,但这更多地取决于您是否有 SSD,以及 SSD 的质量,因为您的基本 SSD 以 1X 速度运行,而您的最高 PCI-Express SSD 以 6X 速度运行。传统硬盘驱动器的速度为 0.1 倍。所以是的,SSD 可以比传统硬盘快 60 倍。 基本上,通用内核在最短的时间内完成最多的工作,而低延迟内核使 PC 响应最快;假设在内核或系统中没有遇到错误。 对于大多数人来说,低延迟内核是最有意义的。但是,如果您总是让您的 PC 有很多工作要做,那么通用内核就适合您。 另一种说法是,如果 90% 的时间你的 CPU 在所有内核上的负载小于 60%,那么低延迟内核就适合你。另一方面,如果您在所有内核上的 cpu 负载在 80%、90% 或更多时间都大于 80%、90% 或更多,那么通用内核就适合您。 测验:哪个内核在基准测试中得分更高?只要延迟作为基准参数被忽略,通用总是赢得比赛,但低延迟就像在你身边准备好委托的章鱼一样。 Michael 2019-11-28T08:11:40+08:002019-11-28T08:11:40+08:00 因为有取舍。切换进程或进入/退出中断需要时间。例如,以 1000Hz 而不是 250Hz 运行调度程序意味着您将有一个计时器中断,并且可能会频繁地切换进程四次。这可以让进程更快地做出反应,因为它更经常被允许执行。但是,作为人类,您可能不会注意到任何差异(250Hz 意味着每 4 毫秒,这已经比任何人类反应时间都要快得多)。 处理能力或 I/O 吞吐量的总量是有限的,更频繁地调用调度程序仅意味着您将浪费其中的一部分。
不同的配置,“通用”、“低延迟”(在 Ubuntu 中配置)和 RT(“实时”),都是为了平衡吞吐量与延迟。通用内核更倾向于吞吐量而不是延迟,其他内核更倾向于延迟而不是吞吐量。因此,需要吞吐量超过需要低延迟的用户不会选择低延迟内核。
与通用配置相比,低延迟内核更改了以下设置:
CONFIG_PREEMPT
而不是CONFIG_PREEMPT_VOLUNTARY
);RT 内核为主线内核添加了许多补丁,并进行了更多配置调整。大多数补丁的目的是通过删除或拆分锁来提供更多抢占机会,并减少内核处理不间断任务所花费的时间(特别是通过改进日志机制并减少使用它们) . 所有这一切的目标是让内核满足最后期限,即确保在需要处理某些事情时,它不会忙于做其他事情;这与高吞吐量或低延迟不同,但解决延迟问题会有所帮助。
在大多数发行版中默认配置的通用内核被设计为一种“明智的”折衷方案:它们试图确保没有单个任务可以长时间独占系统,并且任务可以合理频繁地切换,但不会影响吞吐量——因为内核花在考虑是否切换任务(内核内部或外部)或处理中断上的时间越多,整个系统“工作”的时间就越少。对于实时音频或视频处理等对延迟敏感的工作负载,这种折衷方案还不够好:对于这些工作负载,低延迟内核以牺牲一些吞吐量为代价来提供更低的延迟。对于实时要求,实时内核会以更高的吞吐量为代价,尽可能多地移除低延迟阻塞器。
Linux的主流发行版大多安装在服务器上,传统上延迟并没有被认为是那么重要(尽管如果您进行百分位性能分析,并且关心最高百分位性能,您可能会不同意),因此默认内核相当保守的。正如内核自己的文档所建议的那样,桌面用户可能应该使用低延迟内核。事实上,使用的低延迟内核越多,关于它们的相关性的反馈就越多,这有助于对默认内核配置进行普遍适用的改进;RT 内核也是如此(许多 RT 补丁在某些时候是针对主流内核的)。
这个主题的演讲提供了相当多的背景。
从 Linux 内核 5.12 版本开始,可以启用“动态抢占” ;这允许使用参数在内核命令行上覆盖默认的抢占模型
preempt=
。目前支持none
(服务器)、voluntary
(桌面)和full
(低延迟桌面)。Stephen Kitt 解释了配置和平衡以及所有技术参数都很好。我只想提供一个小小的直观区别:
你在野生动物园,骑着吉普车穿越地形。你的猎物正在奔跑。当猎物处于准星中时,您扣动扳机,步枪射击-计算很简单-准星中的猎物=命中,准星中的猎物=未命中-您迫切需要低延迟-然后您恢复,重新加载步枪,找到另一个猎物- 不需要额外的速度,不需要规律性。延迟就是一切。
您正在转换来自该 Safari 的视频。它很长,需要几个小时。您不在乎何时处理特定帧以及某些帧是否比其他帧花费更多时间来处理。您需要尽快完成流程 - 更好的吞吐量意味着更少的时间,其他都不重要
您正在收到电报 - 只是短裤,长款和空格 - 莫尔斯很容易破译,并且您不需要每个脉冲开始或结束的确切时间,但您需要保证,您不会错过任何一个 - 您需要实时(它可能很慢,电报没有那么快,但它必须是定期的
在这三个示例中,您清楚地选择了延迟、吞吐量或规律性中的一个,而牺牲了其他两个——原因很明显。如果你不能同时拥有所有三个,那么只有一个你真的想要低延迟。
通俗地说:
基本上,通用内核在最短的时间内完成最多的工作,而低延迟内核使 PC 响应最快;假设在内核或系统中没有遇到错误。
对于大多数人来说,低延迟内核是最有意义的。但是,如果您总是让您的 PC 有很多工作要做,那么通用内核就适合您。
另一种说法是,如果 90% 的时间你的 CPU 在所有内核上的负载小于 60%,那么低延迟内核就适合你。另一方面,如果您在所有内核上的 cpu 负载在 80%、90% 或更多时间都大于 80%、90% 或更多,那么通用内核就适合您。
测验:哪个内核在基准测试中得分更高?只要延迟作为基准参数被忽略,通用总是赢得比赛,但低延迟就像在你身边准备好委托的章鱼一样。
因为有取舍。切换进程或进入/退出中断需要时间。例如,以 1000Hz 而不是 250Hz 运行调度程序意味着您将有一个计时器中断,并且可能会频繁地切换进程四次。这可以让进程更快地做出反应,因为它更经常被允许执行。但是,作为人类,您可能不会注意到任何差异(250Hz 意味着每 4 毫秒,这已经比任何人类反应时间都要快得多)。
处理能力或 I/O 吞吐量的总量是有限的,更频繁地调用调度程序仅意味着您将浪费其中的一部分。