This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SV: Gigabit Ethernet throughput on XScale


Eric Doenges wrote:

Andrew Lunn wrote:

[ ... ]

It sounds reasonable, but it will depend on a number of things eg the
the choice of Ethernet chip, the size of the packets you send, the
available CPU bandwidth, etc.
I would ask around and see if anybody else has a similar setup and see
what performance they get.


Just want to add some numbers here: I use a 216MHz Equator BSP-15, which
is a RISC/DSP hybrid that should roughly compare to other 200MHz RISC
architectures for tasks like networking, with a RealTek 8139 100MBit
PCI ethernet controller. Using TFTP to download images from, I get
around 500kByte/s throughput (this is not a typo, unfortunately). Using
the eCos test programs, I got around 1.8 MByte/s maximum (if I remember
correctly; it may have been half that). Linux on the same architecture
is only marginally faster, so I don't think it's a driver issue (note that I'm biased, since I wrote the driver 8^).

TFTP is not a good comparison. TFTP sends one data packet, and then waits for an ACK. This is why the performance is very bad. If you wrote your own protocol using a UDP connection you can get huge performance gain. The downside is that you have to handle dropped packets, which you can do in a simple fashion (like TFTP does), or you can do something much more fancy like TCP which is probably way overkill.


The biggest factor will be packet size. If you write your own protocol you can guarantee the size packets that you are sending. If you choose a MAC that supports Jumbo frames you can easily reach the datarates you want. Most networking type applications can handle a fixed number of frames/second. Double your frame size, and you can double your throughput.

For comparison, I have a 12.5Mhz part (yes, 12.5) that can send/receive data at over 50Mb/s with 512 byte frame size. With Jumbo frames I can saturate a 100Mb/s line. Assuming it scales with frequency, than you would get a 32x 1.6Gb/s throughput at 400Mhz with 512b frames. Now this is without an OS, just a simple main(), and my own interrupt handlers. There will be some performance hit for using an OS.

Another performance hit is that the ECOS network drivers do a copy on both send and receive. If you're looking for max performance I suggest finding an OS that has a zero-copy driver, those copies kill performance. It's been awhile since I wrote a network driver for ECOS, so this may not be an issue (Someone will correct me if I am wrong. :) )

-john



--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]