File: //usr/bin/virtio-irq-check.sh
#!/bin/bash
#
# check virtio irq
# Baidu @2021
function r_net_info(){
# runtime or statistics
irq_ctx=`cat /proc/interrupts|grep -E "CPU|PCI-MSI.*edge|xgbe|eth"|grep -E "CPU|mlx5_comp|mlx6_comp|virtio.*(input|output)|virtio.*req|xgbe|eth"`
cpus=(`echo "$irq_ctx"|sort|grep CPU|xargs`)
cpus_num=${#cpus[*]}
for p in `ls -1 --sort=version /proc/irq/|grep [0-9]`; do
p_path=/proc/irq/$p
irq=`basename $p_path`
irq_hit_count=(`echo "$irq_ctx"|sed 's/^[ \t]*//g'|grep "^$irq:"|xargs`)
queue_id=`echo ${irq_hit_count[*]}|awk -F ' ' '{print $NF}'`
[[ -z "$queue_id" ]] && continue
cpu_hit_detail=""
for i in `seq 0 $((cpus_num-1))`; do
hit_count=${irq_hit_count[$((i+1))]}
[[ $hit_count -eq 0 ]] && continue
cpu_hit_detail="${cpu_hit_detail} ${cpus[$i]}: $hit_count"
done
hit_info=""
[[ -n "$cpu_hit_detail" ]] && hit_info=", hit count: ${cpu_hit_detail}"
printf "%20s irq %3d affinity CPU:%7s%s\n" $queue_id $irq `cat $p_path/smp_affinity_list` "$hit_info"
done
}
r_net_info