大量时间花费在 intel_idle 上

大量时间花费在 intel_idle 上

在撰写本文时,htop显示两个内核的内核线程利用率约为 50%(红色条)。从之前的启动中我知道,随着时间的推移,这将增加到 3 个甚至 4 个核心,每个核心的利用率为 50%。 htop 显示的任何线程的 cpu 使用率都没有超过 1%。这有点奇怪不是吗?

我尝试进一步调查它,并perf record -a以 root 身份使用,发现所有样本的 11.3% 位于swapper函数中命令的内核线程中intel_idle

我假设这个swapper命令对应于我在 htop 中看到的奇怪的 cpu 占用,但是有人可以向我解释以下一些问题:

  • 是什么原因造成的?是bug还是我的设置有问题?
  • 这会影响我系统的整体性能吗?
  • 我怎样才能摆脱这个?

有关我的系统的更多详细信息:

$ uname -a
Linux [...] 4.8.0-0.rc2.git2.2.fc26.x86_64 #1 SMP Wed Aug 17 22:16:04 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 94
Model name:            Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
Stepping:              3
CPU MHz:               799.804
CPU max MHz:           4200.0000
CPU min MHz:           800.0000
BogoMIPS:              8016.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7
Flags:                 [...]

更新:在负载下,行为有点不同。 (首先请注意,我现在处于三个核心,每个核心的利用率为 50%,性能将在内部报告 27% intel_idle)。我将我的 cpu 置于压力之下,sysbench --test=cpu --num-threads=8 --max-requests=1000000 run并进行htop检查perf。 Htop 报告 3 个核心在内核中处于 100%(与空闲期间显示为 50% 的核心相同),5 个核心在 100% 用户空间。 Perf 报告 sysbench 占用了我的 cpu 的 85%,并且没有解释剩余的 15%...我不确定这意味着什么。我的 CPU 性能是否有效降低至 85%?

答案1

这个答案主要是推测性的,因为我对英特尔处理器上的电源管理一无所知,也没有看过 Linux 代码,但我认为这是合理的。

我认为derobert 对电源管理的解释这是正在发生的事情。电源管理是功耗和性能之间的折衷。当处理器没有以 100% 的峰值性能使用时,降低其频率是有益的,这会使其速度更慢但温度更低。

Linux 会随时间变化 CPU 频率。它如何做到这一点是由称为州长。总体思路是,当系统一段时间没有充分利用 CPU 性能时,就会降低 CPU 频率。相反,如果CPU持续忙碌一段时间,内核就会提高频率。

看到intel_idle调度意味着核心没有执行代码,但实际上处于“挂起”模式,消耗很少的电量。这比仅仅降低频率带来更大的节能效果,但成本更高:尽管 CPU 在打断发生,这需要一些时间(几十微秒?更多?)。

intel_idle当你没有充分利用你的所有核心时,这是完全正常的。与 CPU 始终全速运行相比,这可以节省大量电量(无论是处理器本身还是冷却设备)。您可能必须禁用此机制的唯一原因是如果您需要非常低的潜伏。如果您运行 CPU 密集型应用程序,您会看到越来越少的intel_idle.使用 CPU 空闲模式不会影响性能,除非在内核尚未完全确定系统需要大量 CPU 功率的过渡期间。

如果你的核心完全饱和,你将达到 0% intel_idle。请注意,可能很难使所有核心饱和(尽管专门设计的基准测试可以做到这一点),因为正在执行的所有代码和数据都不适合 CPU 缓存,限制因素将是 RAM 访问速度。 “所有代码和数据”包括机器上运行的所有内容,包括您的用户界面;实际上,使所有核心饱和的情况很少见。

相关内容