性能调优 -- 系统篇
Posted 造夢先森
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能调优 -- 系统篇相关的知识,希望对你有一定的参考价值。
Bios
CPU的电源管理是会影响性能的。
pstate指CPU忙时的电源管理,为了省电会调节主频和电压。cstate是cpu闲时的电压管理。
CPU通过cpufreq进行频率调节,CPU频率调节有五种governor,governor的作用是:检测系统的负载状况,然后根据当前的负载,选择出某个可供使用的工作频率,然后把该工作频率传递给cpufreq_driver,完成频率的动态调节。
1.performance:只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
2.powersave:将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。
3.userspace:最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置。
4.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 将被选作降频的目标频率。
5.conservative:与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,和ondemand的区别 在于它会按需分配频率,而不是一味追求最高频率。
ps:
在ubuntu16.04修改cpu频率时失败,是因为现在intel某些cpu的pc上默认使用intel_pstate cpufreq driver。这个cpufreq driver只有performance和powersave两个governor。userspace governor仅适用于旧的acpi-cpufreq驱动程序(如果在启动时禁用intel_pstate,将自动使用该驱动程序;然后就可以使用cpupower用设置governor/frequency。
解决方法:在启动命令中加入intel_pstate=disable
$vi /etc/default/grub
写入或修改 GRUB_CMDLINE_LINUX_DEFAULT=“intel_pstate=disable”
#重启
$reboot
#查看cpu频率
$cpupower -c all frequency-info
#修改cpu频率
$cpupower -c all frequency-set -f 2200000
或者Pstate可用以下方法修改频率:
修改scaling_max_freq和scaling_min_freq为相同值
降频:先修改min,再修改max
升频:先修改max,再修改min
(PS: 服务器需要BIOS额外开启EIST Support Enabled )
for cpuX, /sys/devices/system/cpu/cpuX/cpufreq/ has the following sys files for frequency scaling:
scaling_available_governors
scaling_cur_freq
scaling_driver
scaling_governor
scaling_max_freq
scaling_min_freq
scaling_setspeed
============================================
PCIE带宽限制
# lspci -s 1e:00.0 -vvv|grep Width
LnkCap: Port #0, Speed 16GT/s, Width x8, ASPM not supported
LnkSta: Speed 8GT/s (downgraded), Width x8 (ok)
网卡插槽的带宽跟网卡支持的最大带宽不匹配;端口阀口降速:
# lspci -s 1e:00.0 -vvv|grep Width
LnkCap: Port #0, Speed 16GT/s, Width x8, ASPM not supported
LnkSta: Speed 8GT/s (downgraded), Width x4 (downgraded)
主要信息是其中的 LnkCap 为网卡理论的传输速率上限,LnkSta为网卡当前实际的传输速率
不同PCIe版本对应的传输速率如下:
吞吐量 = 传输速率 * 编码方案
所以上述3.0 8GT/s x4 理论上最大吞吐量 = 8 * 128 / 130 * 4 = 31.504Gb/s = 3.938GB/s
以上是关于性能调优 -- 系统篇的主要内容,如果未能解决你的问题,请参考以下文章
压力测试 JMeter 性能监控 jvisualvm 性能调优