2017-6-15
East:我发现centos 7.2的cpu 频率有些问题,centos 6.3 系统中所有的process都是2400MHz左右,但是centos7.2 系统中,有超过一半的process频率在1200左右,麻烦找SYS同事看一下什么原因?
2017-6-16
Kirin:East,cpuinfo看到的数据不一定是实际频率,请提供几台物理机的权限给我验证下这些机器目前是否是降频运行状态。
East:已授权,我看了几台之前安装的centos6.3机器,cpuinfo看到的频率都是正常的,如果cpuinfo不准应该显示都有问题吧?
Kirin:用Intel官方工具验证经确认,这些机器均开启了节电设置,请检查机器BIOS出厂设置@Zack跟进下:
Zack:已关闭节电设置,请East测试。
2017-06-20
East:HI,Zack,调整BIOS节电之后,性能反而比之前用命令调整的降低了。麻烦把42这台机器恢复之前的配置,我再比较一下找找原因。
此刻Zack处于蒙蔽状态。。。。。。
Kirin:我们很想知道,你们用的是什么命令方式调的处理器节电?@Zack和East确认下两种调优方案的之间的性能差异的百分比,具体是哪个方面的性能细节有差异(延迟还是QPS)?
East:$ for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done
$ x86_energy_perf_policy performance
之后可以看到cpu频率大部分都到2400MHz,偶尔有一两个会变为1200Mhz但立刻恢复。
通过服务的监控可以看到延时降低了(蓝线,14:00-16:00),但是没有达到预期(当时怀疑是频率变化导致的),但是BIOS调了之后,延时又升高了。
QPS基本一样,延时有差异,从监控看两种调整大概差10%。
Kirin:这个差异很有可能是处理器Turbo的贡献,另外将处理器的HT关闭预期可以进一步降低延迟,Zack找一台机器和East一起验证下这两个设置的对延迟影响。
Zack:已开启Turbo,关闭超线程HT。
2017-06-22
East:HI。Kirin、Zack
从服务监控看到,调整确实对计算性能有优化。
从曲线看,对decode(解码,解压缩)的提升明显,对encode(编码压缩)和resize(矩阵计算)的优化较小。
请教一下,通过这些现象分析出一些原因吗?如果进一步优化,我还可以从哪些方面去调试?
另外,这次的几台机器之前装的都是centos 6.3,性能跟其他为升级OS的机器差不多。
同样的机器,装了centos 7.2之后性能就下降了。
2017-06-23
East:hi, 这个事情不用做了,我用命令行修改了thumb42机器的cpufreq,性能与6.3持平了。
我直接修改/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor文件为performance,性能就上来了,这与之前修改BIOS调整频率有什么区别吗?
另外,尝试用x86_energy_perf_policy performance 修改,没有效果,这个策略的优先级低吗?
2017-06-26
Kirin:上周我们调华为BIOS的时候发现有个问题,就是无论怎么设置都无法使得处理器的P-State状态稳定到最大2.5Ghz,但是C-State状态已恢复正常。之前的性能差异是因为P-State状态不稳定,目前临时解决方案就只能靠修改scaling_governor了。
@Zack继续跟进,其他方案。
2017-07-03
East:Hi,Kirin、Zack
关于CPU 频率的不稳的问题,厂商那边有什么反馈吗?有更好的解决方法吗?
我发现之前调整CPU后,机器的CPU使用率比未调整的centos7.2和之前的centos6.3高了很多,从曲线上看,CPU使用率比其他机器高100%。
出现变化的时间大概在6.21号17:00左右,应该跟Zack的BIOS调整有关。
2017-07-04
今天Zack整理了厂商提供的解释与查询到的资料,与East沟通调节OS与BIOS设置,终于达到了预期。观察一天后CPU运行稳定。
2017-07-05
Zack:Hi,各位以下是最近CentOS 7.2 调优总结。
b42(CentOS 7.2)以下简称42
b03 (CentOS 6.3)以下简称03
目前我将我们IDC CentOS 7.2优化的参数用在了42上,比03延迟在10ms左右,相比之前有明显效果,East表示可以接受,根据业务不同,East可以在对参数上进一步调整
优化前后对比:(调整时间为2017-07-04 17:10 02、03为CentOS6.3, 42为调整后的CentOS7.2 ,43为未调整的CentOS7.2)
BIOS设置项
两台机器BIOS已调整为相同设置已03机器设置为准,但是建议将Power Performance Tuning 设置为BIOS Control (当前为OS Control)关闭mwait/monitor (当前为Enabled)以上为BIOS设置的建议
——————————————————————————–万恶分割线—————————————————————————————-
OS调整影响CPU频率背景:
CentOS6.3 OS使用CPUfreq 对CPU频率调控,但是我们6.3 OS没有加载CPUfreq 所以6.3上没有OS调节CPU频率的问题。
而CentOS7.2 OS中使用了 Intel P-state (可以理解为CPUfreq 的新版),而且这个是直接集成在3.04之后kernel中的,7.2 默认kernel使用的3.10的版本 ,这样才有了East通过调整scaling_governor 为performance 而影响CPU频率的情况。加入了 Intel P-state OS必然会对CPU频率有一定影响,(哪怕调整为performance )我们通过的方案是禁用掉 Intel P-state ,这样CPU会在更稳定频率中工作。禁用操作Intel P-state我会写在下面。
——————————————————————————–万恶分割线—————————————————————————————-
CentOS 7.2 优化操作:
我们IDC CentOS 7.2初始化中会对kernel升级为3.18 版本
还有一些内核参数优化设置如下
cat >> /etc/sysctl.conf <<_EOF
net.ipv6.conf.all.disable_ipv6 = 1
fs.nr_open = 12453500
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_tw_buckets = 10000
fs.file-max = 12553500
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 15000 65000
net.ipv4.tcp_tw_recycle = 0
fs.nr_open = 12453500
EOF
rm -rf /etc/security/limits.d/*
cat >> /etc/security/limit.conf <<EOF
* hard nproc 3000240
* soft nproc 1500240
* soft core unlimited
* hard nproc 3000240
* soft nproc 1500240
* soft core unlimited
EOF
sysctl –p
禁用Intel P-state
sed -i ‘/GRUB_CMDLINE_LINUX/{s/”$//g;s/$/ intel_pstate=disable”/}’ /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
如有疑问,可继续与我沟通。
2017-07-07
East:HI all
感谢Zack和Kirin对这个问题的持续跟进,感谢Zack的分析总结!
使用Zack提供的修改方法,我们又升级了一批机器。经过这两天的观察,新系统CPU使用率与Centos6.3相同,延时大概相差10-20ms左右(之前相差40ms左右)。后续我们会升级所有服务器。
如果以后发现进一步提高性能的方法,也请通知我们一下~
谢谢~!
——————————————————————————–万恶分割线—————————————————————————————-
最后如果不需要那10%的性能可以直接把CPU Turbo关闭,设置Power Performance Tuning 设置为BIOS Control,关闭节电设置。可以省去做禁用Intel P-state的操作。