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.

USB to Gb Ethernet Throughput

Expert 4565 points

I have a customer who is wanting to use an AM335x device to take max 150Mb/s data in on USB and write out to a Gb Ethernet port. I've found some performance data here http://processors.wiki.ti.com/index.php/AM335x-PSP_04.06.00.08_Features_and_Performance_Guide#Ethernet_Driver. Looking at these metrics the bottleneck of the system appears to be the USB reads.

Although the bottleneck looks like USB reads the metrics are taken from read/writes to the peripherals and do not include memory transfers within the device. Is there a best practice for doing this? Can they use EDMA for memory transfers to avoid maxing out their CPU utilization? If so what are the performance penalties with respect to throughput?

I just want to make sure the bottleneck would in fact be the usb reads and not memory transfers within the device. Also by changing the CPU speed, will there be an increase in USB throughput? I believe in the TRM that the USB UTMI clock is fixed by the USB PHY to be 60MHz.

Thanks for the help,

Matt

  • Matt,

    Sorry for my late response.

    The usb ether gadget performance numbers in the referred wiki are measured using iperf tool. I am not an network export, but I believe there is memcpy happening when network packets transferring across user and kernel spaces.

    So in your customer's use case, the usb throughput, in theory, should be better than those in the wiki, because in this case the network packets are directly sent to the Ethernet port, and do not go into user space.

    Changing the CPU speed should improve the throughput, because the bottleneck is in the kernel network sw stack. but the usb module still runs in the same speed - 60MHz@phy, 480Mbps@bus.