目录
linux cpu开启性能模式
今天我们的一台数据库服务器,业务研发反馈tp999会不时的彪高,我们查询了各种指标,发现网络重传比较高,同事cpu的load比较高,但是统一宿主机上其他的docker没有重传,因此不是网卡的问题,通过dmesg,发现有cpu降频的相关日志。
发现是cpu降频引起的。
查看,系统设置的是非高性能模式。需要设置成高性能模式。
相关日志如下:
perf: interrupt took too long (166702 > 165147), lowering kernel.perf_event_max_sample_rate to 1000
一般服务器的CPU都支持自动睿频,而服务器的CPU一般默认运行于ondemand模式,会有中断开销,睿频的时候提升下降也是有额外的开销,特别是对于一些低端cpu比如C2350,C2338,N2800这些低价独服的CPU,影响更大。
模式说明:
performance
:运行于最大频率powersave
:运行于最小频率userspace
:运行于用户指定的频率ondemand
:按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,空闲时间增加就降低频率conservative
:按需快速动态调整CPU频率, 比 ondemand 的调整更保守schedutil
:基于调度程序调整 CPU 频率
Centos7 设置方法
# yum install -y cpupowerutils # cpupower frequency-info # cat /proc/cpuinfo # cpupower frequency-set -g performance
查看方式,可以比较前后的设置
# cat /proc/cpuinfo | grep MHz
Debian设置方法
安装工具
apt install cpufrequtils
编辑 /etc/default/cpufrequtils 如不存在则创建,添加条目
GOVERNOR=”performance”
重启生效
systemctl restart cpufrequtils
linux系统调优-CPU问题
Linux下系统调优,内容总结主要来自于工作经验和参考部分网络博客及红帽官方博客的结合,主要选取了一些个人理解的以及有过实践的内容,还有一些觉得比较有价值但是没实践过的方向。
之所以要总结系统调优,是因为我们服务器厂商在硬件配置一定,BIOS选项配置一定的情况下, 再想让相关性能获得提升就只能在系统下进行设置,因此也是有必要有一个完整的了解。
因为是比较完整的,可能罗列出了许多方向,对于这些方向,怎么样调能带来怎么样的效果,肯定是需要实践后才能确认的,在遇到具体问题和需求时可以从这些方向上下手,分成五个小部分,分别是CPU、内存、存储、网络、整体工具tuned-adm
一、Cpu
1.CPU工作模式
CPU的性能设置和查询通过cpupower工具来完成,一共有下图五种模式
需要CPU时时刻刻工作在最高频率的话设置为performance就可以,如下图是查询当前频率信息和设置性能模式的方法
2.谈谈监控
简单的监控我推荐使用turbostat工具查看CPU各个核心的实时工作频率,如果用lscpu命令或者cat /proc/cupinfo查看到的CPU频率,可能不是准确的,结合实践以及查阅了一些资料基本可以确认turbostat的计算方式是更准确的。
本博客之前有一篇放了一个CPU频率监测脚本,那个脚本内是监测/proc/cpuinfo的,目前来看其实有点缺陷,但是因为这种不准确往往出现在CPU频率是最高的时候,所以用来监测频率降低这些异常还是没什么问题的。
如下图是turbostat直接敲下的例子,
还可以用sysstat工具里的mpstat命令监控各个核心的使用率,如下图是查询当前非idle的核心,这种监控方式用来帮助我们定位一些CPU性能为瓶颈时的系统性能问题,可以找到异常核心
3.优化进程
上面说的是整个系统的设置,具体到我们需要对某个进程来多分配些CPU资源,或者避免进程之间使用相同的CPU资源,影响了进程的性能,可以使用taskset工具,taskset –c 0,1 ./xxx.sh就是把0,1核心分配给了这个脚本。
这个工具相对简易一点,更推荐使用的是numactl工具。
这个工具管理的更为全面,通过numactl –hardware可以查看如下图,每个node节点分配到的内存与CPU核心
通过下图的方法可以知道某个设备所在的numa节点,并根据numa节点知道设备对应所在的CPU核心,如果是类似网卡设备调优,那么网卡测试进程就绑在网卡所在的CPU核心上,硬盘测试同理
当然如果资源比较充裕,不用管具体哪些核心,把某个numa节点下的cpu核心全绑定在某进程上也可以,通过numactl –cpubind=0 –membind=0 ./xxx.sh就可以把nudo0的资源分配给这个脚本,设置之后,也可以使用numastat命令查看各个节点的使用状态
各个具体参数可以去网上找博客查看,我了解到的就是othernode如果过高,说明你的分配或者是系统自动分配的不太合理,需要重新分配相关进程资源。
除此之外nuamctl也可以和taskset一样自由分配CPU节点,通过numactl –C 0-15 ./xx.sh即可将脚本绑定到0-15核心上。
要注意的是,我们在绑核的时候,无论是taskset还是nuamctl,都尽量不要跨numa,比如0-15要确保是一个numa节点上的,是否是一个numa节点可以通过numactl –hardware的结果里看到
4.CPU中断irqbalance
如果CPU中断没有很好的平衡,容易出现性能瓶颈,正常情况下需要启用
service irqbalacne start
在之前的工作中有印象给网卡设置过中断来提升网卡性能,下面的第一条命令可以列出所有中断号,其中第一列是中断号,第七列可以看是什么设备。
第二条命令可以查看该中断号对应的CPU核心,通过echo XX具体的核心数可以更改具体的核心,通常需要该核心同样是网口所在numa节点的核心,性能会比较好
cat /proc/interrupts cat /proc/irq/55/smp_affinity_list
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。