ac27391efc
Add a do-nothing policy script as an example, pre-implement some basic logic that could be used for applying affinity_hinting setting strictly for IRQs of certain drivers.
40 lines
1.3 KiB
Bash
40 lines
1.3 KiB
Bash
#!/bin/sh
|
|
# Do not edit this file, create your own policy script and make it
|
|
# executable for irqbalance process, you can use this file as an
|
|
# boilerplate.
|
|
|
|
SYS_DEV_PATH=$1
|
|
IRQ_NUM=$2
|
|
|
|
IRQ_PATH=/proc/irq/$IRQ_NUM
|
|
UEVENT_FILE=$SYS_DEV_PATH/uevent
|
|
|
|
# Scripts below is an example for banning certain IRQs from
|
|
# irqbalance and strictly apply their affinity_hint setting
|
|
[[ ! -e $UEVENT_FILE ]] && exit 1
|
|
|
|
# IRQs from following drivers will be handled by this script
|
|
# Driver names should be separated by space
|
|
AFFINITY_WHITELIST=""
|
|
|
|
while read line; do
|
|
if [[ $line == "DRIVER="* ]] && \
|
|
[[ " $AFFINITY_WHITELIST " == *" ${line#DRIVER=} "* ]]; then
|
|
affinity_hint=$(cat $IRQ_PATH/affinity_hint 2>/dev/null)
|
|
# Check if affinity_hint value have at least one bit set
|
|
if [[ ! "$affinity_hint" =~ ^[0,]*$ ]]; then
|
|
# Ban it from irqbalance so it won't get balanced,
|
|
# we'll follow its affinity_hint setting
|
|
echo "ban=true"
|
|
# If the affinity_hint value is valid, kernel would set
|
|
# the same value for smp_affinity. But force to set that
|
|
# again in case the IRQ was balanced before.
|
|
echo "$affinity_hint" > $IRQ_PATH/smp_affinity
|
|
# Stop further script processing
|
|
exit 0
|
|
fi
|
|
fi
|
|
done <<< "$(cat $UEVENT_FILE)"
|
|
|
|
exit 1
|