#!/bin/awk -f BEGIN { if (debug != "") print "[, ]: "; "ls -1d /sys/devices/system/node/node* 2>&1 | wc -l" | getline nodes if (nodes > 1) { for (i = 0; i < nodes; i++) { cpus_per_node = 0 while (("cd /sys/devices/system/cpu && ls -d cpu*/node" i " | sed 's/^cpu//;s,/.*,,'|sort -n" | getline j) > 0) { if (debug != "") print "[" i ", " cpus_per_node "]: " j cpu[i, cpus_per_node++] = j } } } else { cpus_per_node = 0 while (("cd /sys/devices/system/cpu && ls -d cpu[0-9]* | sed 's/^cpu//'|sort -n" | getline j) > 0) { if (debug != "") print "[0, " cpus_per_node "]: " j cpu[0, cpus_per_node++] = j } } for (i = 0; i < nodes; i++) nextcpu[i] = 0 while (("sed -n 's/.*mlx4-ib-\\([0-9]*\\)-[0-9]*@\\(.*\\)$/\\1 \\2/p' /proc/interrupts | uniq" | getline) > 0) { port = $1 bus = substr($0, length($1) + 2) if (debug != "") print "HCA port = " port "; bus = " bus irqcount = 0 while (("sed -n 's/^[[:blank:]]*\\([0-9]*\\):[0-9[:blank:]]*[^[:blank:]]*[[:blank:]]*\\(mlx4-ib-" port "-[0-9]*@" bus "\\)$/\\1 \\2/p' 0) { irq[irqcount] = $1 irqname[irqcount] = substr($0, length($1) + 2) irqcount++ } for (i = 0; i < nodes; i++) { ch_start = i * irqcount / nodes ch_end = (i + 1) * irqcount / nodes for (ch = ch_start; ch < ch_end; ch++) { c = cpu[i, nextcpu[i]++ % cpus_per_node] if (nodes > 1) nodetxt = " (node " i ")" else nodetxt = "" print "IRQ " irq[ch] " (" irqname[ch] "): CPU " c nodetxt cmd="echo " c " >/proc/irq/" irq[ch] "/smp_affinity_list" if (debug != "") print cmd system(cmd) } } } exit 0 }