减少 Ubuntu 15.04 低延迟时的抖动

减少 Ubuntu 15.04 低延迟时的抖动

使用 ubuntu 15.04 我发现每 1000 微秒就会出现大约 10-11 微秒的抖动。

我绘制了 i7-3970X 上至少 1 微秒的跳转分布图,Ubuntu 15.04 具有低延迟。该程序在 RDTSC 上旋转并将跳转记录到数组中,以便在最后打印。

在此处输入图片描述

似乎有两种模式,分别为 1 毫秒和大约 60 - 75 微秒。

有时候数百毫秒内都不会出现这种抖动。

我在用

linux   /boot/vmlinuz-3.19.0-22-lowlatency root=UUID=f5747871-dfe2-46bf-b6e5-a6cd474adaf7 
ro  quiet splash isolcpus=2,3,8,9 $vt_handoff

我正在绑定到隔离的 CPU 2。IrqBalance 已关闭。我的电源管理设置为性能。我试过使用,chrt但这没有帮助。

有人认识到这种行为吗?有没有办法知道如何诊断并修复它?

我所做的只是在一个 CPU 上旋转 RDTSC。

编辑:我也尝试添加,intel_pstate=disable但这似乎没有帮助。

@mjpt777 建议我看一下idle=poll,乍一看,情况变得更糟,但从最糟糕的 50% 延迟来看,情况有了很大的改善。

使用idle=poll,绘制延迟的长度

在此处输入图片描述

这显然是内核正在做的事情。这可以进一步调整吗?也就是说,它必须每毫秒发生一次吗?Linux 应该是无滴答的,但它似乎不是完全无滴答的。

$ grep NO_HZ /boot/config-3.19.0-22-lowlatency 
CONFIG_NO_HZ_COMMON=y
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set
CONFIG_NO_HZ=y
CONFIG_RCU_FAST_NO_HZ=y

我已经添加了nohz_full=rcu_nocbs=这些似乎有帮助,但抖动的频率并没有改变。

@DougSmythies 建议我恢复到通用内核,这显著减少了中断的数量和长度。

这是中断之间的空间示例(请注意,它们并非全部都是 4000 微秒,并且它们的长度较短)请参阅我的回答。

答案1

看起来在这种情况下,-generic内核的虚假中断比-lowlatency内核少。启动命令行参数和机器相同。

在 85 秒内,低延迟内核中断测试 85K 次,而通用内核中断测试 7K 次。此外,中断长度更短。

在此处输入图片描述

低延迟内核始终高于 2.5 微秒,而通用内核约有 20% 的时间高于 2 微秒。

在此处输入图片描述

相关内容