有时,由于架构设计或其他业务本身特点原因,导致有些应用是由cpu很不均衡;处理集中在一个cpu是上;白白浪费其他CPU在睡觉。一个简单办法就是绑定到多个CPU;
绑定 CPU 是一个不错技巧,但是不是杀手锏,一般能提高10%性能;更好地办法是优化架构,对于网络处理性程序,绑定网卡中断。
这里分享一个小小的shell,绑定制定程序均匀负载到各个CPU上:
#!/bin/bash
pids=`/sbin/pidof $1`
cpus=`nproc`
cpuidx=0
for pid in $pids; do
taskset -cp ${cpuidx} ${pid}
cpuidx=$(($cpuidx+1))
cpuidx=$(($cpuidx%$cpus))
echo $cpuidx
done
用法:
./bindcpu2p.sh progressname