测试需要,需要测试CPU利用率在80%时的工作情况,懒得写C代码,直接shell实现了一个。
使用以下代码设定单个CPU的使用率为80%,传入参数为CPU计数值(如,0,1,2等),表示第几个CPU。
#!/bin/sh
tag=$1
t_user_old=0
t_nice_old=0
t_sys_old=0
t_idle_old=0
t_iowait_old=0
t_irq_old=0
t_sirq_old=0
cpu_load_old=0
cpu_idle_old=0
t_user=0
t_nice=0
t_sys=0
t_idle=0
t_iowait=0
t_irq=0
t_sirq=0
cpu_load=0
cpu_idle=0
function cal_cpuload()
{
cpu_stat=`cat /proc/stat|grep "cpu$tag"`
t_user=`echo $cpu_stat|cut -d " " -f2`
t_nice=`echo $cpu_stat|cut -d " " -f3`
t_sys=`echo $cpu_stat|cut -d " " -f4`
t_idle=`echo $cpu_stat|cut -d " " -f5`
t_iowait=`echo $cpu_stat|cut -d " " -f6`
t_irq=`echo $cpu_stat|cut -d " " -f7`
t_sirq=`echo $cpu_stat|cut -d " " -f8`
t_total=$((t_user+t_nice+t_sys+t_idle+t_iowait+t_irq+t_sirq-t_user_old-t_nice_old-t_sys_old-t_idle_old-t_iowait_old-t_irq_old-t_sirq_old))
t_use=$((t_user+t_nice+t_sys+t_iowait+t_irq+t_sirq-t_user_old-t_nice_old-t_sys_old-t_iowait_old-t_irq_old-t_sirq_old))
t_user_old=$t_user
t_nice_old=$t_nice
t_sys_old=$t_sys
t_idle_old=$t_idle
t_iowait_old=$t_iowait
t_irq_old=$t_irq
t_sirq_old=$t_sirq
if [ $t_total -ne 0 ]
then
cpu_load=$((t_use*100/t_total))
cpu_load_old=$cpu_load
fi
}
a=0
b=1
while true
do
cal_cpuload
if [ "$cpu_load" -lt 80 ]
then
let a+=1
else
sleep 0.004
fi
done
运行多个进程,并设置CPU亲和性,设置每一个CPU的负载为80%
#!/bin/sh
core_num=`cat /proc/cpuinfo |grep -c "model name"`
i=0
chmod +x ./set_cpuload.sh
while [ "$i" -lt "$core_num" ]
do
taskset -c $i ./set_cpuload.sh $i&
let i+=1
done