网卡中断绑定CPU脚本

#!/bin/bash
set_affinity()
{
if [ $VEC -ge 32 ]
then
MASK_FILL=""
MASK_ZERO="00000000"
let "IDX = $VEC / 32"
for ((i=1; i<=$IDX;i++))
do
MASK_FILL="${MASK_FILL},${MASK_ZERO}"
done

    let "VEC -= 32 * $IDX"
    MASK_TMP=$((1<<$VEC))
    MASK=$(printf "%X%s" $MASK_TMP $MASK_FILL)
else
    MASK_TMP=$((1<<$VEC))
    MASK=$(printf "%X" $MASK_TMP)
fi

printf "%s" $MASK > /proc/irq/$IRQ/smp_affinity
printf "%s %d %s -> /proc/irq/$IRQ/smp_affinity\n" $DEV $VEC $MASK ;

}
network_irq(){

if [ "$1" = "" ] ; then
       ARG="$(ifconfig  | grep '^[[:alpha:]]' | awk '$1!~/^(lo|bond|br|docker|virbr)/{print $1}')"
else
    ARG="$*"
fi

IRQBALANCE_ON=`ps ax | grep -v grep | grep -q irqbalance; echo $?`
if [ "$IRQBALANCE_ON" == "0" ] ; then
    service  irqbalance stop
fi
CPU=$(( $((`cat /proc/cpuinfo |grep processor|wc -l`)) - 1 ));
VEC=$CPU;
for DEV in $ARG
do
  for IRQ in `cat /proc/interrupts |grep ${DEV}| cut  -d:  -f1| sed "s/ //g"`;
  do
    DIR=`cat /proc/interrupts | egrep -i -e "^$IRQ|^\s+$IRQ"| awk '{print $NF}'`;
    if [ -n  "$IRQ" ]; then
          set_affinity;
          VEC=$(($VEC - 1));
          if [ "$VEC" -lt 0 ]; then
              VEC=$CPU;
          fi
    else
           echo -e "["`date "+%F %T"`"]\tget $DIR IRQ Failed.";
    fi
  done

done
echo -e "["`date "+%F %T"`"]\tSet down over." ;

}

network_irq

转载于:https://blog.51cto.com/buguoruci/2125602

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值