if_bridge performance

I have a setup with a bridge0 (if_bridge) running between members vr0 and vr1. The box runs a FreeBSD 7.1-RELEASE on a Geode LX800 processor. I observed a surprising demand of CPU when enabling the bridge. I enabled polling on vr0 and vr1 in the hope of mitigating this effect, expecting to observe a narrower variance in CPU load (sligtly more in idle, visibly less on peaks).
Instead, I practically observe a (steady) impressive load on the CPU while in idle, and a higher load on peaks.

This is what top reports in either case:

Without polling:
traffic ~ 100mbps
CPU: 0.0% user, 0.0% nice, 1.2% system, 57.1% interrupt, 41.7% idle

idle traffic
CPU: 0.0% user, 0.0% nice, 1.9% system, 0.0% interrupt, 98.1% idle


With polling:
traffic ~ 100mbps (polling)
CPU: 0.0% user, 0.0% nice, 1.2% system, 58.7% interrupt, 40.2% idle

idle traffic
CPU: 0.0% user, 0.0% nice, 0.8% system, 7.4% interrupt, 91.8% idle


I have these sysctl settings:
kern.clockrate: { hz = 1000, tick = 1000, profhz = 1024, stathz = 128 }
kern.polling.idlepoll_sleeping: 1
kern.polling.stalled: 0
kern.polling.suspect: 2
kern.polling.phase: 0
kern.polling.enable: 0
kern.polling.handlers: 2
kern.polling.residual_burst: 0
kern.polling.pending_polls: 0
kern.polling.lost_polls: 8
kern.polling.short_ticks: 208
kern.polling.reg_frac: 20
kern.polling.user_frac: 50
kern.polling.idle_poll: 0
kern.polling.each_burst: 5
kern.polling.burst_max: 150
kern.polling.burst: 150


I'm particularly impressed to see almost 10% of the CPU taken when the traffic is totally idle if POLLING is on. Ideas for the possible causes of this behavior, and how to improve the performance?
 
You should probably ask this on the freebsd-net mailing list. This is a bit advanced for the forum.
 
Back
Top