nanog mailing list archives

Re: Load balancing in routers


From: Tony Tauber <ttauber () genuity net>
Date: Mon, 8 Apr 2002 14:03:17 -0400 (EDT)


On Mon, 8 Apr 2002, Chris Woodfield wrote:

If by "round-robin" you mean by destination only, then this is
correct.

The term "round-robin" refers to a schedule which cycles
through some number of things in a fixed order.

A packet arrives and the router makes a forwarding decision.
The things that it can cycle through are entries in a forwarding table.

Those entries can be either physical paths (ie. one packet
goes over this link, next packet over the next and so forth).
Call that "per-packet load-sharing"

The entries could be cached destinations.
Call that "per-destination load-sharing"

The entries could be based on source/destination pairs.
Call that "flow-based" or "src/dst-based".

The entries could be based on the whole "5-tuple" of
source and destination address, IP protocol, source
and destination port numbers (and ToS value)?
Call that "full-flow".

Now, how effective any of these schemes are at sharing load
at a bit level (how links operate) vs. packet level (how
forwarding decisions are made) has been the subject of
debate for some time.

However, if you [mean] strict per-packet load sharing regardless
of flow, then CEF does have this capability, although the default
behavior is the flow-based load sharing you describe.

http://www.cisco.com/univercd/cc/td/doc/product/software/ios120/12cgcr/switch_c/xcprt2/xccefc.htm#33184

However, IIRC, code stability issues have plagued this feature in
many IOS releases; I recall Intermedia selling a "bonded T1" product
that used this feature, and supporting it was...not pleasant.

-C

I'm not sure about stability, I think it's been stable.
However, there's a fundamental issue with the GSR architecture
which affects it's applicability there.

On the GSR, forwarding decisions are made on ingress to the router;
but, per-packet is configured on the outbound interface.  The ingress
interface has no way to keep track of which outbound interface a
packet was last sent to; that would require some kind of counter.
I believe, some kind of workaround may have been coded for this
problem recently, but it might have significant performance impact
and/or negate other "extended" feature sets.

Tony

We used CEF in 11.x and it behaved the same way.  It was never round-robin
in any way we could observe.





Current thread: