linux开启cpu性能模式
linux开启cpu性能模式
cpufreq 的五种模式
cpufreq 是一个动态调整 cpu 频率的模块,系统启动时生成一个文件夹 / sys/devices/system/cpu/cpu0/cpufreq/,里面有几个文件,其中 scaling_min_freq 代表最低频率,scaling_max_freq 代表最高频率,scalin_governor 代表 cpu 频率调整模式,用它来控制 CPU 频率。
cd /sys/devices/system/cpu/cpu0/cpufreq/ affected_cpus bios_limit cpuinfo_cur_freq cpuinfo_max_freq cpuinfo_min_freq cpuinfo_transition_latency freqdomain_cpus related_cpus scaling_available_frequencies scaling_available_governors scaling_cur_freq scaling_driver scaling_governor scaling_max_freq scaling_min_freq scaling_setspeed # 查看当前的调节器 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor conservative # 查看频率信息 cpupower frequency-info analyzing CPU 0: driver: acpi-cpufreq CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: 10.0 us hardware limits: 800 MHz - 2.10 GHz available frequency steps: 2.10 GHz, 2.10 GHz, 2.00 GHz, 1.90 GHz, 1.80 GHz, 1.70 GHz, 1.60 GHz, 1.50 GHz, 1.40 GHz, 1.30 GHz, 1.20 GHz, 1.10 GHz, 1000 MHz, 900 MHz, 800 MHz available cpufreq governors: conservative userspace powersave ondemand performance current policy: frequency should be within 800 MHz and 2.10 GHz. The governor "performance" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 2.10 GHz (asserted by call to kernel) boost state support: Supported: yes Active: yes - performance: 顾名思义只注重效率,将 CPU 频率固定工作在其支持的最高运行频率上,而不动态调节。
- Userspace: 最早的 cpufreq 子系统通过 userspace governor 为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节 CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
- powersave: 将 CPU 频率设置为最低的所谓 “省电” 模式,CPU 会固定工作在其支持的最低运行频率上。因此这两种 governors 都属于静态 governor,即在使用它们时 CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种 governors 对应的是两种极端的应用场景,使用 performance governor 是对系统高性能的最大追求,而使用 powersave governor 则是对系统低功耗的最大追求。
- ondemand: 按需快速动态调整 CPU 频率, 一有 cpu 计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率;ondemand:userspace 是内核态的检测,用户态调整,效率低。而 ondemand 正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的 governor。 在 ondemand governor 监测到系统负载超过 up_threshold 所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将 CPU 设置在最高频率上运行。但是当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时,到底应该降低到哪个频率呢? ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率,例如 CPU 支持三个可选频率,分别为 1.67GHz、1.33GHz 和 1GHz ,如果 CPU 运行在 1.67GHz 时 ondemand governor 发现可以降低运行频率,那么 1.33GHz 将被选作降频的目标频率。
- conservative: 与 ondemand 不同,平滑地调整 CPU 频率,频率的升降是渐变式的, 会自动在频率上下限调整,和 ondemand 的区别在于它会按需分配频率,而不是一味追求最高频率;
cpupower 设置 performance
从 conservative 或者 powersave 切换到 performance 的效果很好,对虚拟机影响很大
# CentOS 安装 kernel-tools yum install kernel-tools # Ubuntu 安装 CPU 模式无图形化切换器 apt install cpufrequtils # cpupower 设置 performance cpupower frequency-set -g performance # 查看当前的调节器 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance # 创建 cpupower 配置文件 cat << EOF | sudo tee /etc/sysconfig/cpupower # See 'cpupower help' and cpupower(1) for more info CPUPOWER_START_OPTS="frequency-set -g performance" CPUPOWER_STOP_OPTS="frequency-set -g ondemand" EOF # 创建自启动服务 cat << EOF | sudo tee /usr/lib/systemd/system/cpupower.service [Unit] Description=Configure CPU power related settings After=syslog.target [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/sysconfig/cpupower ExecStart=/usr/bin/cpupower $CPUPOWER_START_OPTS ExecStop=/usr/bin/cpupower $CPUPOWER_STOP_OPTS [Install] WantedBy=multi-user.target EOF # 刷新 system 服务 systemctl daemon-reload systemctl enable cpupower.service # systemd.service — Service unit configuration - 修改cpu为性能模式
# 设置开机启动 echo '/usr/bin/cpupower frequency-set -g performance' >> /etc/rc.local # 手动执行立即生效 /usr/bin/cpupower frequency-set -g performance - 修改OpenStack物理机内核参数
# 设置内核参数 sed -i 's/^GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX="rhgb quiet kvm-intel.nested=1 intel_iommu=pt"/g' /etc/default/grub # 更新内核参数 grub2-mkconfig -o /boot/grub2/grub.cfg 无法使用 cpupower 调整 performance
比如我们遇到相同类型 CPU 硬件和操作系统版本,但不同厂商会出现无法使用 cpupower 调整 performance 的情况
Dell R440 CPU: Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz Failed
Dell R430 CPU: Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz Success
Huawei 1288H V5 CPU: Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz Success
# 如果遇到以下报错请确认硬件厂商是否做了限制,只能通过 BIOS 调节 [root@sg-gop-10-71-14-91 wangao]# cpupower frequency-set -g performance Setting cpu: 0 Error setting new values. Common errors: Do you have proper administration rights? (super-user?) Is the governor you requested available and modprobed? Trying to set an invalid policy? Trying to set a specific frequency, but userspace governor is not available, for example because of hardware which cannot be set to a specific frequency or because the userspace governor isn't loaded? 本文由作者按照 CC BY 4.0 进行授权