转载自:https://blog.csdn.net/dengxinfa/article/details/108538951
问题描述
开发一款mt762+7615产品,发现5G tx与rx只有500多M,同时跑2G+5G也是只有600多M,达不到市场产品性能。后来发现是cpu单核负载满负荷问题造成的。
解决方法
使用cat /proc/interrupts查看linux irq发现1e100000.ethernet(以太网驱动)与ra0(mt7615驱动)在同一cpu中(CPU0),造成在跑吞吐量时cpu0满负荷,但是cpu1/cpu2/cpu3空闲
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root@GL-MT1300:/# cat proc/interrupts CPU0 CPU1 CPU2 CPU3 8: 104178 104158 104153 104144 MIPS GIC Local 1 timer 9: 52364 0 0 0 MIPS GIC 63 IPI call 10: 0 17343 0 0 MIPS GIC 64 IPI call 11: 0 0 47420 0 MIPS GIC 65 IPI call 12: 0 0 0 17015 MIPS GIC 66 IPI call 13: 2289283 0 0 0 MIPS GIC 67 IPI resched 14: 0 2353869 0 0 MIPS GIC 68 IPI resched 15: 0 0 180709 0 MIPS GIC 69 IPI resched 16: 0 0 0 331585 MIPS GIC 70 IPI resched 19: 5281 0 0 0 MIPS GIC 33 ttyS0 21: 576 0 0 0 MIPS GIC 27 1e130000.sdhci 22: 593 0 0 0 MIPS GIC 29 xhci-hcd:usb1 23: 1405 0 0 0 MIPS GIC 10 1e100000.ethernet 24: 1 0 0 0 MIPS GIC 30 gsw 25: 51606 0 0 0 MIPS GIC 11 ra0 ERR: 1 |
由上面可以知道1e100000.ethernet为23,输入命令
1 |
root@GL-MT1300:/# echo 4 > /proc/irq/23/smp_affinity |
将1e100000.ethernet的irq放到cpu2中处理。
发现跑吞吐量时,2g+5g同时跑可达850M,单跑5G也可以到600M多,吞吐量数据正常。
辅助验证工具
top命令可以显示各个cpu负载,但是要在make menuconfig时选上相应的支持
之后可以通过top -d1运行命令之后在输入1,就可以显示各个cpu的负载,方便多核cpu查看负载情况