adrian at freebsd.org
Fri Feb 22 23:08:48 PST 2008
On 20/02/2008, Bill Hacker <wbh at conducive.org> wrote:
> Routing and firewalling is a specialty that has become a very
> high-volume hardware/ASIC/RTOS field where any router a PC could at one
> time match on speed has become so cheap and flexible off-the-shelf it is
> no longer worth the bother to roll yer own *and maintain it* for any
> serious throughput.
Thing is, there are people who report doing 10ge (almost) line rate 64
byte pps on current PC hardware, with the "right" combination of PCIe,
decent chipsets and crazy tuned forwarding code complete with
Its just not being done in open source.
I've seen a few 10ge PC routers recently, which can do 10ge at 1500
byte frames with out of the box Linux/FreeBSD. Its not that hard.
What the PC/FOSS world is missing is a small group of people focused
on high pps throughput code. There's no reason a current generation PC
with PCIe, MSI, and decent eth drivers can't push > mil pps. The bus
and cards certainly support it.
Now, to answer the GP's question - the reason its "bad" to overload
PCI busses requires understanding of the actual PCI architecture. I
don't pretend to be an EE, but desktop motherboards tended to whack
all the PCI slots on the same bus so they're effectively on the same
channel, limiting throughput. Reading/writing data on the PCI bus also
has minimum latencies regardless of data transfer size, so even in
burst mode you could only do a fixed amount of transactions per bus
before things got out of hand.
Empirically, on 32 bit PCI; 33mhz (standard PCI); you can push a
single gige NIC to about 70,000 pps. Thats 35,000 in, 35,000 out. I
couldn't get it faster than that on FreeBSD. I -think- that was
saturating the PCI bus, I'd have to sit down and do the math to see
exactly what the ideal situation is. PCIx, et al are "just" faster
with some restrictions (I think PCIx stated that each port must be on
a seperate bridge, no hubbing allowed) and PCIe is a completely new
If someone would like a fun project, sit down with some decent gige
hardware thats well documented (eg the e1000 cards) and see how fast
you can tx/rx packets from the driver. Ignore doing routing table
lookups, queueing, touching mbufs, etc. The results might be fun. :)
Adrian Chadd - adrian at freebsd.org
More information about the Users