#!/bin/sh # this scripts is used for adjust cpu's choice of interrupts. # ################################################ # Adjust smp_affinity of edma # Globals: # None # Arguments: # None # Returns: # None # Remark: # execute only once on start-up. ################################################ adjust_edma_smp_affinity() { grep -q edma_eth_ /proc/interrupts || return 0 local nr=`cat /proc/cpuinfo | grep processor | wc -l` local cpu=0 local tx_irq_num for tx_num in `seq 0 1 15` ; do cpu=`printf "%x" $((1<<((tx_num/4+0)%nr)))` tx_irq_num=`grep -m1 edma_eth_tx$tx_num /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '` [ -n "$tx_irq_num" ] && echo $cpu > /proc/irq/$tx_irq_num/smp_affinity done for rx_num in `seq 0 1 7` ; do cpu=`printf "%x" $((1<<((rx_num/2)%nr)))` rx_irq_num=`grep -m1 edma_eth_rx$rx_num /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '` [ -n "$rx_irq_num" ] && echo $cpu > /proc/irq/$rx_irq_num/smp_affinity done } ################################################ # Adjust smp_affinity of ath10k for 2G and 5G # Globals: # None # Arguments: # None # Returns: # None # Remark: # execute only once on start-up. ################################################ adjust_radio_smp_affinity() { local irqs="`grep -E 'ath10k' /proc/interrupts | cut -d ':' -f 1 | tr -d ' '`" local nr=`cat /proc/cpuinfo | grep processor | wc -l` local idx=2 for irq in $irqs; do cpu=`printf "%x" $((1<<((idx)%nr)))` echo $cpu > /proc/irq/$irq/smp_affinity idx=$((idx+1)) done } ################################################ # Adjust queue of eth # Globals: # None # Arguments: # None # Returns: # None # Remark: # Each network reboot needs to be executed. ################################################ adjust_eth_queue() { local nr=`cat /proc/cpuinfo | grep processor | wc -l` local idx=0 for epath in /sys/class/net/eth[0-9]*; do test -e $epath || break echo $epath | grep -q "\." && continue eth=`basename $epath` idx=0 for exps in /sys/class/net/$eth/queues/rx-[0-9]*/rps_cpus; do test -e $exps || break cpu=`printf "%x" $((1<<((idx+1)%nr)))` idx=$((idx+1)) echo $cpu > $exps echo 256 > `dirname $exps`/rps_flow_cnt done which ethtool >/dev/null 2>&1 && ethtool -K $eth gro off done echo 1024 > /proc/sys/net/core/rps_sock_flow_entries }