freebsd router project. Problems with polling?
Thomas Vogt
freebsdlists at bsdunix.ch
Fri Jan 28 09:19:00 PST 2005
Hello
Overview:
ATM, I've a 4.10 router (xeon 2.4ghz UP, dual on board em gigE
interfaces) in a productive enviroment. The routing software is quagga.
It's doing quite well.
It has an average of 200k pakets per seconds with the full routing
table. The System has polling enabled and interrupt is almost idle and
cpu too.
New one:
Now I'm building a FreeBSD 5.3 or -Stable based router system on CF
cards too. Intel whitepaper shows a max pps for the em cards at 1.4mpps.
I doubt that I can reach more than ~600k pps with the fully routing
table loaded! But this would be ok great.
My system: Xeon 2.4Ghz UP, 2x onboard em GigE interface, 5.3-RELEASE-p4
with if_em.c,v 1.44.2.4.
my configs:
sysctl.conf:
vm.swap_enabled=0
kern.ipc.somaxconn=1024
kern.polling.enable=1
kern.random.sys.harvest.ethernet=0
kern.random.sys.harvest.interrupt=0
net.inet.udp.recvspace=65536
net.inet.tcp.sendspace=65536
net.inet.tcp.delayed_ack=0
net.inet.tcp.msl=5000
net.inet.ip.maxfragpackets=40
net.inet.ip.maxfragsperpacket=4
net.inet.ip.fw.one_pass=0
net.inet.ip.fw.dyn_max=8192
net.inet.ip.fw.dyn_udp_lifetime=15
net.inet.ip.fastforwarding=1
loader.conf:
kern.ipc.nmbclusters=32768
Kernel config:
http://www.bsdunix.ch/public/ROUTER5
Setup:
I've 3 similar machines.
I use my own udpsend.c and udprec.c to send packages and to count the
pakages. It can send up to 300-330k pps (udp size 64 bytes)
ATM, the full routing table is not loaded. It's a very basic setup. The
goal is to find the maximum pps throughput for the router with small
pakets.
But atm I've problems with device polling.
Graphic:
------------------
|10.0.1.2 udp send |
------------------
|
|
-------em0------
|freebsd router |
-------em1------
|
|
-----------------------
| 192.168.1.2 udp recv |
------------------------
netstat -w 1 (polling disabled)
input (Total) output
packets errs bytes packets errs bytes colls
300531 0 23441438 300585 0 23444792 0
300939 0 25872898 300895 0 25870184 0
300738 0 23457584 300768 0 23460626 0
300304 10 25826466 300304 0 25826876 0
...
Interrupt load is about 70% with net.inet.ip.fastforwarding enabled. If
I disable this the system becomes unusable.
The system hasn't reach the limit yet. But the interrupt is much to
high. It's not worthy to add a second udp sender machine, at the moment.
netstat -w 1 (polling enabled)
input (Total) output
packets errs bytes packets errs bytes colls
150151 47647 12910330 150150 0 12911806 0
150151 0 11711798 150152 0 11711876 0
150151 47665 12910986 150151 0 12911810 0
150151 0 11711798 150151 0 11711798 0
...
Interrupt load is about 10%. CPU is about 60% and with
kern.polling.idle_poll enabled it goes to 100% (as expected).
As you see the speed is droping down to 50% with polling enable and and
I got a lot of errors.
kern.polling.lost_polls: 188748 and kern.polling.suspect: 186919 are
also very high. I don't know why polling is so bad on this machine. All
SMP option are disabled in the kernel and bios.
I tried to do as much as in
http://lists.freebsd.org/pipermail/freebsd-questions/2004-November/064427.html described.
I will prepare others tests with -STABLE and -CURRENT in the next few
days. At the mean time, are they some other magic things config option I
can try? Perhaps increase the HZ to 2000 in the kernel or remove polling
and try smp machine? I doubt that I can run the machine without polling.
If you see 70% interrupt load with 300k pps without polling.
regards
Thomas Vogt
More information about the freebsd-net
mailing list