Yep, with or without irqbalance the results for me are the same though, one curious thing, if i ping the wan interface from and to mi public IP, there are no spikes, but if i ping internally, between my wired lan clients, the spikes become noticeable. It can go from 0,8ms to 43ms.
About irqbalance and oneshot option, nice point @hnyman i've noticed that eth0 is assigned to core1 and eth1 to core2, wifi0 to core2 and wifi1 to core1. If i remember correctly dissent pointed out that both eth should be assigned to the same core ... but i will test with this config to see if there is some performance increase noticeable, due to the cache misses that @dissent1 pointed out could occur if irqbalance was always "on".
BTW if anybody wants to assign the irqs manually i've adapted @dissent1 script to the R7800 board. It can be executed after the irqbalance --oneshot option if the irqs are not balanced as expected.
#!/bin/sh /etc/rc.common
# First start irqbalance with the --oneshot option
# Try to balance manually both eth to core2 and wifi0 to core2 ifthey are not balanced correctly
# Startup command for openwrt/lede
# /usr/sbin/irqbalance --oneshot --debug > /var/log/irqbalance.log
START=99
set_irq_affinity() {
local name="$1"
local val="$2"
case "$name" in
wifi0)
local irq_wifi0=`grep -E -m1 'qcom-pcie-msi' /proc/interrupts | cut -d: -f1 | tail -n1 | tr -d ' '`
[ -n "$irq_wifi0" ] || echo "$name irq not found."
echo "$val" > "/proc/irq/$irq_wifi0/smp_affinity"
;;
wifi1)
local irq_wifi1=`grep -E -m2 'qcom-pcie-msi' /proc/interrupts | cut -d: -f1 | tail -n1 | tr -d ' '`
[ -n "$irq_wifi1" ] || echo "$name irq not found."
echo "$val" > "/proc/irq/$irq_wifi1/smp_affinity"
;;
eth0)
local irq_eth0=`grep -E -m3 'eth0' /proc/interrupts | cut -d: -f1 | tail -n1 | tr -d ' '`
[ -n "$irq_wifi1" ] || echo "$name irq not found."
echo "$val" > "/proc/irq/$irq_eth0/smp_affinity"
;;
eth1)
local irq_eth1=`grep -E -m3 'eth1' /proc/interrupts | cut -d: -f1 | tail -n1 | tr -d ' '`
[ -n "$irq_wifi1" ] || echo "$name irq not found."
echo "$val" > "/proc/irq/$irq_eth1/smp_affinity"
;;
*)
local irq=`grep -m 1 "$name" /proc/interrupts | cut -d: -f1 | sed 's, *,,'`
[ -n "$irq" ] || echo "$name irq not found."
echo "$val" > "/proc/irq/$irq/smp_affinity"
;;
esac
}
start() {
. /lib/functions.sh
set_irq_affinity eth0 2
set_irq_affinity eth1 2
set_irq_affinity wifi0 2
}