network performance data, linux 2.4 on moto 8240 @ 266MHz

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

hi,

a few months ago i ran some rudimentary network performance tests on a
popular midrange motorola processor, the mpc8240 running at 266MHz.  i
figured the data i collected may be useful in some way to the embedded
linux crowd, so here it is...

regards,
jim

ps
yes, the throughput files are MS excel format, smartbits default. :^/

pps
i have no relationship with motorola, intel, spirent, nor linus
torvalds.  at the time i wrote the summary below my team was designing
a controller for a piece of telecommunications gear, and the software
folks were interested to know just how much data could be passed by
the proposed hardware.  below, minor edits were made to my original
summary to cull out some proprietary information, and to clarify a few
items.

ppps
note that if you are starting a new design you should probably look at
the "newer" 8245 vs the "older" 8240.


-----------
motorola 8240/266MHz network performance test results

i spent a few hours running some network performance tests on a
motorola 8240 processor mezzanine board mounted in a motorola
"sandpoint" evaluation platform.  note that these tests have
everything to do with network routing performance and nothing to do
with linux userland application performance.

test set up:

the sandpoint is a modular processor eval platform from motorola; on
it one can mount a variety of processor boards -- in this case i used
a motorola Unity 8240 processor mezzanine with clock speed of 266MHz
and 64MB of RAM.  the 8240 itself has a 603e powerpc core and an
integral 32bit PCI bus.  more info on the 8240 can be found at the
motorola web page:
http://www.mot-sps.com/webapp/sps/site/prod_summary.jsp?code=MPC8240

in short, the sandpoint + Unity 8240 had qty 2 intel 82559 PCI-based
ethernet cards in it, and it was used as a linux-based router.  that
is, the two ethernet interfaces were assigned different subnets, and
kernel routing was enabled.  no userland applications (other than the
standard command shell [busybox/bash]) were running.

the test equipment was a spirent/smartbits smb200 chassis running
routing test software.  basically the smartbits works by selecting an
IP packet size [64...1500] and pushing packets at the target using a
starting point load (say 50% of max, or in the case of 100Mbps
ethernet that would be about 12500 packets/sec when the packet size is
1000 bytes).  the smartbits ideally will receive back all of the
routed packets from the other ethernet interface. if it does not, it
starts a simple binary search at a lower rate to determine the highest
rate at which the router (i.e. sandpoint + Unity 8240) can forward all
packets.  similarly, if the initial test passes, a binary search
upward is started.  once the maximum rate for a given packet size is
found, the smartbits selects the next packet size and restarts the
tests.

note that these tests were performed both in unidirectional and
bidirectional modes.

more details (i.e., kernel startup output) of the overall linux
configuration are here:
http://losdos.dyndns.org:8080/public/linux/linux-net-perf/linux-on-sandpoint.txt

results:

FIRST TEST:

for the initial tests a "stock" linux 2.4 kernel was built, with the
standard eepro100 ethernet driver.  results were as shown in the
THROUGHPUT TAB at the following link:
http://losdos.dyndns.org:8080/public/linux/linux-net-perf/sandpoint-8240-266-eepro100-unidir-baseline.xls

in general, packets/sec performance max'd out at about 9700 pps, and
throughput scaled linearly with packet size.  at an typical TCP size
of 320 bytes, the 8240 was routing some 24Mb/s of data (~8800pps). the
aggregate data rate was not dissimilar in the unidirectional and
bidirectional tests.  thus it appeared that neither CPU nor PCI
bandwidth were not the bottlenecks, but perhaps kernel route look-up
and forwarding speed.

data from literature on the internet indicated that others had in fact
measured somewhat higher pps performance, ostensibly by various linux
kernel tweaks.  one such is the "NETFAST" buildtime option in the
kernel config.  this was employed for the following test:
http://losdos.dyndns.org:8080/public/linux/linux-net-perf/sandpoint-8240-266-eepro100-unidir-netfast.xls

as can be seen, performance at all packet sizes increased by about 10
to 15%; at 320 bytes, the 8240 was routing ~28.5Mb/s (~10500pps). this
was more in line with published (albeit informal) numbers.  there are
some disadvantages to the NETFAST-tweaked kernel, however.

it became clear from investigation into where all the CPU cycles were
going that the processor was completely interrupt bound.  in fact,
from the eepro100 driver source and documentation it could be seen
that the driver generates an interrupt for every packet that is
received.  or, put another way, at 10000 pps the 8240 processor has to
deal with an interrupt every 100us.

further investigation into improving network performance led to some
information from intel describing "hardware assist" features which are
resident on their 82559 ethernet device.  for example, the 82559 can
coalesce multiple packets and then subsequently generate a single
interrupt. interestingly, the standard issue linux ethernet drivers --
cleary in an effort to maintain full backwards compatibility with
existing (legacy) intel ethernet chipsets -- do not employ code to
take advantage of the hardware assist features found on the more
modern intel devices.

however, intel has contributed a driver, "e100", to the linux effort
which does in fact take advantage of the features of the newer intel
chipsets, including the 82559.  so i then rebuilt the sandpoint kernel
with the intel e100 driver in place of the stock eepro100 driver.
more info is available here:

ftp://aiedownload.intel.com/df-support/2896/ENG/README
http://www.intel.com/support/network/adapter/1000/linux/e100.htm
ftp://download.intel.com/design/network/datashts/73825903.pdf

SECOND TEST:

with the e100 driver in place, the following uni- and bidirectional
results were noted (again, see the THROUGHPUT TAB):
http://losdos.dyndns.org:8080/public/linux/linux-net-perf/sandpoint-8240-266-e100-unidir.xls
http://losdos.dyndns.org:8080/public/linux/linux-net-perf/sandpoint-8240-266-e100-bidir.xls

as shown in the results, the very small packet (64 byte) packet
forwarding rate increased by approximately 20%, and rates for larger
packet sizes dramatically increased by up to 100%.  again at 320
bytes, the 8240 was now routing ~52Mb/s (~19200pps).  at around 900
bytes and above, the 8240 was able to saturate the 100Mbps ethernet
link at 100Mb/s (i.e. 12.5MB/s) when forwarding unidirectionally.
when under birectional load, the 8240 could forward nearly 130Mb/s
(16.25MB/s) of traffic.

summary:

1)
the motorola 8240 at 266MHz can forward approximately 9K-10K pps using
the stock linux eepro100 driver.

2)
the intel "e100" driver gives markedly better performance with the
82559 chipset as it makes use of the hardware assist features. the
motorola 8240 at 266MHz can forward at up to 21K pps using the intel
e100 driver.  at packet sizes >64B the forwarding rate was doubled.

3)
the 8240 at 266Mhz can forward at full rate a unidirectional 100Mb/s
link with packet sizes larger than ~900B.  at 320B, the 8240 can
forward bidirectional traffic at 19300 pps, or an aggregate throughput
of 52Mb/s.

-----------

Site Timeline