Part Number: AM4376
Tool/software: Linux
Hi,
Background
- Processor SDK Linux 5.0
- 2xAM4376 connected over PRU ICSS-EMAC interfaces with external PHYs in Dual EMAC mode
- Variable CPU loading with application code
The current developer's guide has an FAQ discussing throughput of the driver here which mentions ~94Mbps has been seen for both UDP and TCP connections. A previous debug guide for the ICSS EMAC LLD makes mention of the fact CPU loading would be the only cause of decreased throughput on the interface as the driver is tested during release to cope with maximum line rate.
Problem
While using the PRU-ICSS EMAC driver for sending and receiving data between AM4376 devices, throughput will drop when the A9 has an increased load from other application code. The LLD debug guide also makes mention of two potential workarounds - interrupt pacing and storm prevention. Each of these currently have a declared limitation of not being supported by Dual EMAC mode per the latest developer's guide.
When the A9 is unloaded, the ~94Mbps rate can be seen, but as the CPU is loaded with more and more processing the rate will drop significantly until ~25Mbps is seen with both TCP and UDP bi-directional connections. RX overflow errors are seen once the rate begins to drop, indicating the RX queues are not being serviced often enough.
Questions
- The FAQ addressing throughput sets up a unidirectional test. Is the ICSS EMAC tested for a bidirectional connection at this same ~94Mbps rate?
- Has any test data been taken with varying CPU loads for the ICSS EMAC performance?
- Is interrupt pacing planned to be supported in future SDK releases for the ICSS Dual EMAC mode?
- Is it possible to increase the RX queue size in prueth.c to give more time for the CPU to service the RX queue (as mentioned in the LLD debug guide here?
Thank you for any help or insight you may provide!
Best Regards,
Mark-