OpenWrt 5G/4G modems M.2 Speed Issue

Continue to main subject , I bought new modem with PCIe mode for this modem 5G

I did some test (PCIe ) between MCUZONE and OpenWrt

MCUZONE PCIe
i'm getting 800mb/s to 900mb/s like USB Speeds (before)

image


Where The PCIe for OpenWrt
i'm getting 550 mb/s

image


So I started searching to know why ? I found CPU utilization ( when Its running for all CPUs 0,1,2 & 3) IRQ .......only CPU 0 is running and reaching up to 75% utilization where other CPUs 1,2 and 3 are almost sleeping (:arrow_down:low utilization) :expressionless:


So I tried to let all CPUs run at same time on PCIe mode but no luck ... still system is assigning load to CPU 0 also when I activated IRQ package to disrepute load but no luck

Also with this

echo f > /sys/class/net/usb0/queues/rx-0/rps_cpus
only CPU 0 is running


I did one thing made a big different on speed and utilization

echo 2 > /proc/irq/116/smp_affinity

Where CPU 1 gave a good speeds

root@OpenWrt:~# cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
 11:      64144      84579     104371      92990     GICv3  30 Level     arch_timer
 16:          0          0          0          0   mt-eint   1 Edge      sfp2-tx-fault
 17:          0          0          0          0   mt-eint   2 Edge      sfp2-los
 27:          0          0          0          0   mt-eint  12 Edge      11230000.mmc cd
 29:          0          0          0          0   mt-eint  14 Edge      gpio-keys
 69:          0          0          0          0   mt-eint  54 Edge      sfp1-los
 84:          0          0          0          0   mt-eint  69 Edge      sfp1-tx-fault
 97:          0          0          0          0   mt-eint  82 Edge      sfp1-mod-def0
 98:          0          0          0          0   mt-eint  83 Edge      sfp2-mod-def0
 99:         16          0          0          0     GICv3 155 Level     ttyS0
102:      14309          0          0          0     GICv3 172 Level     11007000.spi
104:    1026399    2105448    2378418          0     GICv3 229 Level     15100000.ethernet
105:     615057    1210835          0    1210491     GICv3 230 Level     15100000.ethernet
106:         31          0          0          0     GICv3 168 Level     11003000.i2c
107:         18          0          0          0     GICv3 177 Level     11005000.i2c
108:          0          0          0          0     GICv3 170 Level     1100a000.lvts
109:          0          0          0          0     GICv3 142 Level     wdt_bark
110:       3963        353          0          0     GICv3 175 Level     11230000.mmc
111:          5          0          0          0     GICv3 241 Level     mt7530
112:          0          0          0          0    mt7530   0 Edge      mt7530-0:00
113:          0          0          0          0    mt7530   1 Edge      mt7530-0:01
114:          3          0          0          0    mt7530   2 Edge      mt7530-0:02
115:          2          0          0          0    mt7530   3 Edge      mt7530-0:03
116:          0    3754489          0          0     GICv3 204 Level     xhci-hcd:usb1
IPI0:    112362       8141       7366       7552       Rescheduling interrupts
IPI1:   5522892     352854    2373571    1606272       Function call interrupts
IPI2:         0          0          0          0       CPU stop interrupts
IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
IPI4:         0          0          0          0       Timer broadcast interrupts
IPI5:         0          0          0          0       IRQ work interrupts
IPI6:         0          0          0          0       CPU wake-up interrupts


20:32:31     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20:32:32     all    0.00    0.00    3.98    0.00    5.22   15.17    0.00    0.00    0.00   75.62
20:32:32       0    0.00    0.00   14.85    0.00    1.98    7.92    0.00    0.00    0.00   75.25
20:32:32       1    0.00    0.00    0.96    0.00   18.27   31.73    0.00    0.00    0.00   49.04
20:32:32       2    0.00    0.00    0.00    0.00    0.00   19.19    0.00    0.00    0.00   80.81
20:32:32       3    0.00    0.00    0.00    0.00    0.00    1.02    0.00    0.00    0.00   98.98

CPU 1 and 2 are giving a higher speeds
CPU 0 and 4 are giving a lower speeds


I appreciate answering on these questions :point_down:

How I can let the OpenWrt use all CPUs ? only CPU 0 will work .... echo f > /proc/irq/116/smp_affinity

root@OpenWrt:~# echo 3f > /sys/class/net/usb0/queues/rx-0/rps_cpus
ash: write error: Value too large for data type
root@OpenWrt:~# echo f > /sys/class/net/usb0/queues/rx-0/rps_cpus <<<---- (This only worked , where only CPU 0 will run  )

How I can let OpenWrt use CPU 1 and 2 same time ?

echo 6 > /proc/irq/116/smp_affinity

I tried this echo and didn't work for dual cores (1 & 2) only core 1 was running and core 2 idle


When I tried with ChatGPT 4 ,each step with sharing results with GPT ... he/it felt there is something wrong with Kernel or Network Drivers :thinking: