发生了什么变化

发生了什么变化

2018 年 1 月 15 日更新

我创建了一个 90 秒的 Conky,.gif在启动期间显示“正常”行为:

  • 启动后几秒钟我启动了 Conky。
  • 几秒钟后,我启动 Peek,它在 3 秒后开始记录 .gif,此时系统正常运行时间约为 30 秒。
  • 当 .gif 启动时,我会加载 Firefox 10 选项卡和两个窗口,其中一个窗口带有视频(Flash 播放器)
  • 对于第一分钟的正常运行时间,.gif 显示 Turbo 模式下频率较高,CPU 负载适中。
  • cron作业(例如每日电子邮件备份)在 @reboot 时运行,使单核峰值达到 100%。
  • 一分钟后,频率降至 2.6 GHz 以下,我认为这是“正常”的非涡轮增压。
  • 当系统运行时间达到 2 分 10 秒时,.gif 结束。

正常启动.gif

Conky 启动.gif

尽管这是在同一内核下,但4.14.13它并不能解释 2018 年 1 月 13 日的异常行为,当时频率在整个会话期间保持在涡轮增压模式。

2018 年 1 月 14 日更新

我今天用内核 4.14.13 重新启动,它的行为就像昨天的 4.14.12 一样。我无法解释其中的差异,也不反对这个问题的投票结果接近。

高 CPU 百分比(低频率)与低 CPU 百分比(高频率)

这两个结果都是使用 FireFox 在笔记本电脑内置 1080p 显示屏上以非全屏方式打开 10 个选项卡,以及在通过 ThunderBolt 3 USB-C 转 HDMI 适配器连接的外部电视上以全屏方式打开 1 个选项卡流式传输电影时使用 FireFox。所有测试均在 Skylake i7 6700HQ 上进行。

内核 4.14.12

所有内核都采样了4.44.10并且4.14(直到版本 4.14.13)都表现出低频率的高 CPU % 现象。

CPU高频低.gif

内核 4.14.13

在尝试不同的内核来观察 Meltdown 安全漏洞影响时,我注意到一个不相关的变化,即时钟频率持续以 Turbo 速度运行,温度增加 10 度。

CPU低频高频.gif

发生了什么变化

唯一的区别是启动内核版本4.14.12(高CPU、低频率)和内核版本4.14.13(低CPU、高频率)。

两项测试均使用 Ubuntu 16.04.3 LTS,apt-get中间没有任何变化。

在这两项测试中,nVidia GTX 970M 均被禁用,仅使用 Intel HD530 集成显卡。当 nVidia 在 Kernel 4.14.4 上激活时,CPU 百分比似乎并没有减少那么多,但在桌面上移动 Windows 并不像 Intel iGPU 那样顺利。

我的另一台笔记本电脑配备 Ivy Bridge 3630QM CPU,在我使用它的三年中表现出截然不同的行为。 CPU % 略高,因为它是较弱的处理器,但频率会一直在低和高之间跳动,大部分时间都花在中间。我认为频率行为更可取,但这是主观的。如果有人感兴趣的话,我稍后会为 3630QM CPU 创建一些 Conky .gif。

问题

低CPU高主频好还是高CPU低主频好?

电池使用并不是真正的问题,因为这款 17 英寸笔记本电脑不能外出,因为它不像 5.5 英寸 1080p 智能手机那样容易放入外套口袋。最好知道低 CPU % 或低频率是否对电池寿命更好?

答案1

这个问题的答案实际上取决于用例,但请记住 Haswell 后核心速度可以根据每个核心的需要来提高,并且“Uncore”或非 CPU 限制(例如内存限制)可以提高速度频率而不影响核心的功率预算。

一般来说,如果增加的延迟不会影响您的交互感觉,您希望频率尽可能低。

CPU 的睿频速度受到封装的功率和热预算的限制,如果大多数核心都以较低频率运行,则单个线程可以睿频得更高、更快、时间更长。

另请注意,某些功能(例如 AVX2)需要比整数运算更多的功率,并且在大多数芯片上,如果所有内核都处于高速状态,则会将 CPU 频率降低到基本频率以下。

我不熟悉您使用的工具,但由于这一变化,有些人正在查看 TSC 频率而不是核心频率,因此可能不会观察到这一点。

不幸的是,由于 Turbo Boost 的动态特性以及一些与核心和封装温度相关的看不见的 PID 函数,%used 数字并不是很有用。

以可接受的延迟(这在 Linux 中缩放驱动程序的现代迭代中要好得多)和最低温度为目标很可能会提高单线程性能。

我会检查

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

和:

/sys/devices/system/cpu/*/cpufreq/scaling_governor

为了确保您不在表现调控器将牺牲单个线程的性能以实现延迟。

相关内容