我想了解在 cpu cgroup 子系统中设置 cpu.cpu_quota_us 对应用程序性能的影响。本质上,通过减少 CPU 配额,但增加 CPU 数量以使“有效”CPU 仍然相同,这会影响应用程序吗?例如,4 CPU 100% 配额配置是否与 8 CPU 50% 配额配置相同?
我已经编写了一个简单的 CPU 密集型程序 https://github.com/ashu-mehra/cpu-quota-test并在以下 cgroup 配置下运行它:
1)在具有 4 个 CPU 且无配额限制的 cgroup 中
2)在具有 8 个 CPU 和 50% 配额的 cgroup 中
当以 32 个线程运行该程序时,我注意到两种配置的程序报告的吞吐量存在以下差异:
4CPU@100 8CPU@50 176236 87252.5
8CPU@50 的性能还不到 4CPU@100 的一半。
在进一步调试时,我注意到我的系统配置为使用“powersave”CPU 频率调节器。在此模式下,当程序在 4CPU@100 上运行时,内核的 CPU 频率达到最大值,但对于 8CPU@50,内核的 CPU 频率要低得多。
当我将 CPU 频率调节器更改为“性能”(这是唯一可用的其他频率调节器)时,由于内核开始以最大频率运行,因此 8CPU@50 的性能显着提升:
4CPU@100 8CPU@50 175804 163831
我的系统详细信息是:
Ubuntu 16.04.2 LTS
内核 4.4.0-103-通用
关于 CPUFreq 调节器,我有以下问题:
1)此链接https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt说明:“CPUfreq 调节器“powersave”将 CPU 静态设置为 scaling_min_freq 和 scaling_max_freq 边界内的最低频率。”但是,我注意到频率会随着负载的增加而变化。“powersave”实际上如何工作?
2) 为什么在使用“powersave” CPU 频率调节器并设置 CPU 配额时,CPU 频率不会增加到最大值。设置 CPU 配额是否会导致“powersave”出现异常?
答案1
您的问题 1 中引用的文档适用于 acpi-cpufreq CPU 频率调节驱动程序。我认为,但不确定,您正在使用 intel_pstate CPU 频率调节驱动程序。确定的方法是询问您的系统:
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate 驱动程序中的 powersave 调节器与 acpi-cpufreq 驱动程序中的 ondemand 调节器的行为类似。控制算法一直在变化,但如果您有足够新的内核,则应该基于负载。
当将使用率限制为 50% 时,CPU 频率不会增加太多,甚至根本不会增加,因为基于负载的算法没有足够的负载来保证提高 CPU 频率。