DIR=/proc/sys/kernel/sched_domain/ print_flags() { flags[1]="SD_LOAD_BALANCE: Do load balancing on this domain" flags[2]="SD_BALANCE_NEWIDLE: Balance when about to become idle" flags[4]="SD_BALANCE_EXEC: Balance on exec" flags[8]="SD_BALANCE_FORK: Balance on fork, clone" flags[16]="SD_WAKE_IDLE: Wake to idle CPU on task wakeup" flags[32]="SD_WAKE_AFFINE: Wake task to waking CPU" flags[64]="SD_WAKE_BALANCE: Perform balancing at task wakeup" flags[128]="SD_SHARE_CPUPOWER: Domain members share cpu power" flags[256]="SD_POWERSAVINGS_BALANCE: Balance for power savings" flags[512]="SD_SHARE_PKG_RESOURCES: Domain members share cpu pkg resources" flags[1024]="SD_SERIALIZE: Only a single load balancing instance" flags[2048]="SD_WAKE_IDLE_FAR: Gain latency sacrificing cache hit" flags[4096]="SD_PREFER_SIBLING: Prefer to place tasks in a sibling domain" DEC=$1 CPU=$2 DOM=$3 [ -d $DIR/$CPU/$DOM ] || { exit 0; } NAME=$(cat $DIR/$CPU/$DOM/name) [ $DEC = "-1" ] && DEC=$(cat $DIR/$CPU/$DOM/flags) echo "{$CPU/$DOM:$NAME} SD flag: $DEC" for ((mask=1;mask<=4096;mask*=2)); do if [ "$[$mask & $DEC]" != "0" ]; then printf "+%4d: %s\n" $mask "${flags[$mask]}" else if [ $mask -le 4096 ]; then printf "%c%4d: %s\n" "-" $mask "${flags[$mask]}" fi fi done } [ $# -lt "1" ] && { echo 'usage: tune-sched-domains ' print_flags -1 cpu0 domain0 print_flags -1 cpu0 domain1 print_flags -1 cpu0 domain2 print_flags -1 cpu0 domain3 exit -1; } DOM0=$1 DOM1=${2:-$DOM0} DOM2=${3:-$DOM1} DOM3=${4:-$DOM2} cd $DIR for CPU in *; do cd $CPU for DOM in *; do FLAGS=$DOM/flags VAL=`cat $FLAGS` case $FLAGS in "domain0/flags") NEW_VAL=$DOM0 ;; "domain1/flags") NEW_VAL=$DOM1 ;; "domain2/flags") NEW_VAL=$DOM2 ;; "domain3/flags") NEW_VAL=$DOM3 ;; *) echo "error!" ;; esac echo $NEW_VAL > $FLAGS [ "$CPU" = "cpu0" ] && { echo "changed $FLAGS: $VAL => $NEW_VAL" print_flags $NEW_VAL $CPU $DOM } done cd .. done