OpenWrt – Blame information for rev 4
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
4 | office | 1 | #!/bin/sh |
2 | [ "$ACTION" = add ] || exit |
||
3 | |||
4 | NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)" |
||
5 | [ "$NPROCS" -gt 1 ] || exit |
||
6 | |||
7 | PROC_MASK="$(( (1 << $NPROCS) - 1 ))" |
||
8 | |||
9 | find_irq_cpu() { |
||
10 | local dev="$1" |
||
11 | local match="$(grep -m 1 "$dev\$" /proc/interrupts)" |
||
12 | local cpu=0 |
||
13 | |||
14 | [ -n "$match" ] && { |
||
15 | set -- $match |
||
16 | shift |
||
17 | for cur in `seq 1 $NPROCS`; do |
||
18 | [ "$1" -gt 0 ] && { |
||
19 | cpu=$(($cur - 1)) |
||
20 | break |
||
21 | } |
||
22 | shift |
||
23 | done |
||
24 | } |
||
25 | |||
26 | echo "$cpu" |
||
27 | } |
||
28 | |||
29 | set_hex_val() { |
||
30 | local file="$1" |
||
31 | local val="$2" |
||
32 | val="$(printf %x "$val")" |
||
33 | [ -n "$DEBUG" ] && echo "$file = $val" |
||
34 | echo "$val" > "$file" |
||
35 | } |
||
36 | |||
37 | default_ps="$(uci get "network.@globals[0].default_ps")" |
||
38 | [ -n "$default_ps" -a "$default_ps" != 1 ] && exit 0 |
||
39 | |||
40 | exec 512>/var/lock/smp_tune.lock |
||
41 | flock 512 || exit 1 |
||
42 | |||
43 | for dev in /sys/class/net/*; do |
||
44 | [ -d "$dev" ] || continue |
||
45 | |||
46 | # ignore virtual interfaces |
||
47 | [ -n "$(ls "${dev}/" | grep '^lower_')" ] && continue |
||
48 | [ -d "${dev}/device" ] || continue |
||
49 | |||
50 | device="$(readlink "${dev}/device")" |
||
51 | device="$(basename "$device")" |
||
52 | irq_cpu="$(find_irq_cpu "$device")" |
||
53 | irq_cpu_mask="$((1 << $irq_cpu))" |
||
54 | |||
55 | for q in ${dev}/queues/rx-*; do |
||
56 | set_hex_val "$q/rps_cpus" "$(($PROC_MASK & ~$irq_cpu_mask))" |
||
57 | done |
||
58 | |||
59 | ntxq="$(ls -d ${dev}/queues/tx-* | wc -l)" |
||
60 | |||
61 | idx=$(($irq_cpu + 1)) |
||
62 | for q in ${dev}/queues/tx-*; do |
||
63 | set_hex_val "$q/xps_cpus" "$((1 << $idx))" |
||
64 | let "idx = idx + 1" |
||
65 | [ "$idx" -ge "$NPROCS" ] && idx=0 |
||
66 | done |
||
67 | done |