This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x high Ethernet SIRQ overhead

We are developing a custom board with the am335x and require a feature from the Linux 3.14 kernel. Our previous kernel 3.8 easily handled 100Mb Ethernet traffic with +50% cpu idle time. An iperf throughput test demonstrates this.

With the 3.14 kernel from ti-linux-3.14.y the same iperf test shows less than 5% cpu idle and system and SIRQs shoot up over 90% of the cpu resources. Linux kernel 3.12 was tested with similar results.

I've compared defconfigs and even tried making some small changes there to no avail. Is there a timestamping feature or setting that could be enabled/disabled or someone with insight on the recent history of the Ethernet networking code that may help us understand this considerable overhead discrepancy between kernel versions; we would really appreciate insight from TI staff, thanks!

  • Hi,

    I will forward this to the factory team.

  • Is this already running on your custom board? Since you mentioned 3.8 I am assuming that you are using a beagle bone black as your base design? Are you using a 100Mbps PHY?

  • Yes, we are running our custom board, based on Beaglebone White DDR2 design using 100Mbps PHY. A Beaglebone White exhibits the same issue. Our applications engineers experience a considerable drop in performance when switching to kernel 3.14.

    We observe +90% system and soft IRQ cpu utilization (using top) when moving data through the Ethernet interface (for example, with iperf -s running on the bb, and iperf -c IPaddr on a test workstation). The same test with kernel 3.8 shows around 50% utilization. I've tried making config file changes but haven't been able to resolve the issue and could really use your insight!

  • Are you using the omap2plus_defconfig? In this config for the am335x the SMP option needs to be disabled. After rebuilding please what performance you are able to achieve.

    Starting with the 3.12 kernel several TI ARM kernels on different IPs were combined. The omap2plus_defconfig has support for the OMAP 2,3.4,5. OMAP 4 and 5 processors have multiple cores, the SMP flag is set because of those. The SDK that TI releases for the AM335x and AM437 have this option disabled in the omap2plus_defconfig.

  • Thanks, we did have the SMP option disabled, however your suggestion had me swap in the omap2plus defconfig from SDK7 into ti-linux-3.14.y. After testing/comparing the two files, turns out the config in ti-linux-3.14 had the PROVE_LOCKING and other debug options enabled which in turn enables a number of other debugging options which generates considerable overhead on the am335x. Simply turning these options off restored performance (over 50%) to the system.
  • Hello e_man,

    We are having high sirq (softirq) CPU load with both CAN bus (when CAN is disconnected, esp.) and streaming video with gstreamer from UVC dongles through v4l2.

    Can you post which options you disabled?  I have disabled a lot of the debug options, but I'm not sure if I might be missing something.