#!/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
