调优指南
中心思想
首先确定网络实验是否正常,使用qperf,iperf等工具对比网络传输实验是否正常,如果网络时延在正常范围的话可能是其他配置(bios)或者软件栈的原因
1. qperf使用方法
#服务端
qperf
#客户端
qperf -t 60 --use_bits_per_sec 192.168.11.1 tcp_bw tcp_lat
2. 网卡调优
查看网卡中断
cat /proc/interrupts|grep $1|awk -F ':' '{print $1}'
查看网卡所在的numa node
cat /sys/class/net/$1/device/numa_node
查看某一个中断绑核
cat /proc/irq/$1/smp_affinity_list
查看一个网卡所有中断绑定在那些核上
ints=`cat /proc/interrupts|grep $1|awk -F ':' '{print $1}'`
cores=$(for i in $ints;do
cat /proc/irq/$i/smp_affinity_list
done)
printf "%s\n" "${cores[@]}" | sort -n
将网卡的中断均匀绑定到所在numa对应的cores上
ints=`cat /proc/interrupts|grep $1|awk -F ':' '{print $1}'`
#获取对应的cores
j=${core[0]}
num=${ #core[@]} #这里{ #需要空格分开,否则页面render出错?
for i in $ints
do
echo $j > /proc/irq/$i/smp_affinity_list
((j++))
((j=j%num+base))
done
3. 查看进程具体的线程情况
ps -hH -p <pid>
#查看瞬时值
top -H -p <pid>
#持续查看
top -p <pid> 之后点击H
# 或者
cat /proc/<pid>/status
ls /proc/<pid>/task
# 或者使用树状查看
pstree -p <pid>
# 查看当前进程的树状图
pstree $$
# 查指定用户的所有进程
pstree -u <user_name>
查看当前线程总数
pstree -p | wc -l
#查看当前内核允许的最大线程数
sysctl -a|grep pid_max
#更改最大允许的线程数
echo "kernel.pid_max=65536" >> /etc/sysctl.conf
sysctl -p
- 工具使用教程
#htop
4.1 htop
4.11 显示进程当前所在核
F2进入setup,选择screen,只有方向右键选择到available columns中的processor之后回车,processor就出现在了active columns中了,
我们可以选择active columns中的processor然后按下面指示的功能键F7(上移),F8(下移)来将processor固定在command附近
设置好之后对应的界面设置会保存下来,下次htop进入界面之后会看到我们之前的更改
4.2 top
点击f可以进入设置显示列,这里我们以设置显示进程所在核为例
vmstat
vmstat -n 2 10 #以2s的频率显示前10个输出结果
pidstat
strace
查看软件调用栈
- 先ps -efL|grep processName找到对应thread的id使用gdb
- 使用gstack
gstack threadId
cpu高性能模式
#开启cpu高性能模式,即提高cpu的频率
cpupower frequency-set -g performance
#查看当前是否设置生效
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 查看当前可选的模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# 使用工具cpupower查看汇总信息
cpupower frequency-info