On Sat, 11 Feb 2006, dima wrote:

The system is mainly being used as a dedicated router. It runs OSPF, BGP and IPFW (around 150 rules). OSPF and BGP are managed by Quagga. The box has 2 gigabit interfaces that handle on average 200Mbp/s - 50K packets/s (inbound and outbound combined), each one of them.

The second CPU wouldn't help you for sure. There's only one [swi1: net] kernel 
thread which deals with all the kernel traffic. The option of per-CPU [swi: 
net] threads was discussed on freebsd-arch@ several months ago, but it wouldn't 
be implemented soon. So, the only hardware option is installing the fastest CPU 
possible.
There are several software (FreeBSD specific) options though:

If you set net.isr.direct=1, the netisr workload is moved from the netisr thread to the thread performing the dispatch -- typically, the ithread. If you have multiple interfaces and they are assigned different ithreads, then the work can occur in parallel. However, there are some other properties of this setting that are important, so it affects different workloads in different ways.

Robert N M Watson

1. You should surely try polling(4). 50kpps mean 50000 interrupts and the same 
amount of context switches, which are quite expensive.
2. FastForwarding. It's the most suitable for you. As I know, Quagga inserts 
its dynamic routes to the system routing table. And FastForwarding is aware of 
routing table and firewall rules. And the most exciting: you can switch it 
on/off without reboot:
# sysctl net.inet.ip.fastforwarding=1
The only limitation is it applies to IPv4 unicast traffic only. There's no 
documentation on this feature as i know (am I wrong, or should I report this as 
a documentation bug?) but you can look at the comments in the beginning of 
/sys/netinet/ip_fastfwd.c
The authors reported up to 1Mpps (see page 10 at 
http://people.freebsd.org/~andre/FreeBSD-5.3-Networking.pdf)



Some of you have asked for the following information:


- As I indicated before, polling is currently disabled.


- Hyperthreading (HTT) is disabled.


mull [~]$vmstat -i
interrupt                          total       rate
irq1: atkbd0                        3466          0
irq6: fdc0                            10          0
irq13: npx0                            1          0
irq14: ata0                           47          0
irq21: fxp1                     20462527          8
irq28: bge0                   3511765157       1444
irq29: bge1                   3633124373       1494
irq30: aac0                      1842472          0
cpu0: timer                    566751007        233
Total                         7733949060       3181


mull [~]$netstat -m
644/646/1290 mbufs in use (current/cache/total)
643/407/1050/17088 mbuf clusters in use (current/cache/total/max)
0/5/4528 sfbufs in use (current/peak/max)
1447K/975K/2422K bytes allocated to network (current/cache/total)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
0 calls to protocol drain routines



Thank you,

--
Marcos

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to