tenta ativar o package steering como foi falado e ativar também o software e hardware flow offloading se estiver disponível.
Só está usando dois cores dos 4 cores.
Senão der certo, a gente faz um ajuste manual. Essa é a beleza do openwrt, tudo é possível!
Eu mesmo aqui estou testando o CPU affinity e ajustando ele manualmente, porque quero fazer uma build do friendlywrt com ele arrumado:
Da para ver que tem bastante CPU livre!
Para quem tem o nanopi r4s e está usando o friendlywrt e quer o mesmo setup de carga da cpu, ou seja, 1 core a53 cuidando do irq do eth0 | 1 core a72 cuidando das queues do eth0 e 1 core a53 cuidando do irq do eth1 | 1 core a72 cuidando das queues do eth1...
Use o comando ''grep eth /proc/interrupts'' para pegar os numeros do IRQ:
Da para ver ai na imagem os números do IRQ e a qual eth eles pertencem.
Ai vamos aos comandos:
## IRQ do eth0 no core 2 ##
echo -n 4 > /proc/irq/31/smp_affinity
## IRQ do eth1 no core 3 ##
echo -n 8 > /proc/irq/88/smp_affinity
## Queues do eth0 no core 4 ##
echo 10 > /sys/class/net/eth0/queues/rx-0/rps_cpus
## Queues do eth1 no core 5 ##
echo 20 > /sys/class/net/eth1/queues/rx-0/rps_cpus
OBS: Esse parâmetro "-n" que eu usei para setar o IRQ do eth0 e eth1, só é para ser usado na build do friendlywrt! Pois o friendlywrt usa kernel linux 5.15, já na snapshot direto do master do openwrt, que é kernel linux 5.10, não precisa usar esse parâmetro.
O número que você usa no "echo" e no arquivo, define quais CPUs usar. É basicamente um número binário onde cada bit representa uma CPU, após isso é só converter para hexadecimal. O bit mais à direita é CPU 0...
Logo temos:
00000001 = hex 1 = cpu 0
00000010 = hex 2 = cpu 1
00000100 = hex 4 = cpu 2
00001000 = hex 8 = cpu 3
00010000 = hex 10 = cpu 4
00100000 = hex 20 = cpu 5
Vou rodar uma build do friendlywrt daqui a pouco com essa carga desse tipo configurada por default