固定CPU负载

        测试需要,需要测试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
       

你可能感兴趣的:(固定CPU负载)