Every routing protocol can load balance across equal-cost paths. EIGRP is the only IGP on Cisco routers that can load balance across unequal-cost paths, and the knob that unlocks it is a single number called variance. It is a favorite CCNP ENCOR exam topic precisely because it forces you to actually understand feasible successors, feasibility, and the metric math from the EIGRP complete guide.
This article walks through variance on a live CML lab: the topology table before, the feasibility check, the variance 2 command in named mode, and the traffic share counters that prove the router is really splitting load in proportion to metric. All output is real IOS XE.
The Rule Variance Cannot Break
Variance does not let EIGRP use just any backup path. It only installs routes that already qualify as feasible successors. The feasibility condition, straight from DUAL: a neighbor's reported distance (RD) must be strictly less than your current feasible distance (FD). That guarantee is what makes the whole feature loop-free. If a path fails the feasibility condition, no variance value will ever install it, no matter how large.
Successor
The best loop-free path. Its metric is the feasible distance (FD). Installed in the routing table by default.
Feasible successor
A backup whose reported distance is less than the FD. Pre-validated as loop-free, ready for instant failover, and the only candidate variance can promote.
Variance
A multiplier (1 to 128). Any feasible successor whose total metric is less than FD x variance gets installed and carries traffic. Default is 1: equal cost only.
The Lab: Two Unequal Paths to the Same Loopback
R2 can reach R3's loopback (3.3.3.3/32) two ways: the short path through hub R1, or the longer path through R4 and R5. The R2-R4 link carries extra configured delay, so the paths are deliberately unequal. Before touching variance, the topology table on R2:
R2# show ip eigrp topology 3.3.3.3/32
EIGRP-IPv4 VR(PINGLABZ) Topology Entry for AS(100)/ID(2.2.2.2) for 3.3.3.3/32
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 524288000, RIB is 4096000
Descriptor Blocks:
10.0.12.1 (Ethernet0/1), from 10.0.12.1, Send flag is 0x0
Composite metric is (524288000/458752000), route is Internal
Vector metric:
Minimum bandwidth is 10000 Kbit
Total delay is 7000000000 picoseconds
Hop count is 2
10.0.24.2 (Ethernet0/2), from 10.0.24.2, Send flag is 0x0
Composite metric is (589824000/458752000), route is Internal
Vector metric:
Minimum bandwidth is 10000 Kbit
Total delay is 8000000000 picoseconds
Hop count is 3Read the two composite metrics as (total metric / reported distance):
- Via R1: 524288000 / 458752000. Lowest total metric, so this is the successor and FD = 524288000.
- Via R4: 589824000 / 458752000. The RD (458752000) is less than the FD (524288000), so the feasibility condition holds and this is a feasible successor.
Those big numbers are 64-bit wide metrics with delay in picoseconds, because R2 runs named mode. If they look unfamiliar, the EIGRP wide metrics article decodes them. Only one path is in the routing table right now:
R2# show ip route 3.3.3.3
Routing entry for 3.3.3.3/32
Known via "eigrp 100", distance 90, metric 4096000, type internal
Routing Descriptor Blocks:
* 10.0.12.1, from 10.0.12.1, 00:00:48 ago, via Ethernet0/1
Route metric is 4096000, traffic share count is 1
Total delay is 7000 microseconds, minimum bandwidth is 10000 Kbit
Loading 1/255, Hops 2Do the Math Before You Configure
The variance value you need is the ratio between the worst path you want to use and the FD, rounded up:
589824000 / 524288000 = 1.125 -> variance 2Any feasible successor whose metric is under FD x 2 = 1048576000 will be installed. Our alternate path at 589824000 clears that bar easily. Variance is an integer between 1 and 128, and it applies to the whole EIGRP process, not per prefix, so check the topology table for other destinations before turning it up in production.
Configuring Variance (Named Mode)
In named mode, variance lives under the topology base section:
R2(config)# router eigrp PINGLABZ
R2(config-router)# address-family ipv4 unicast autonomous-system 100
R2(config-router-af)# topology base
R2(config-router-af-topology)# variance 2Classic mode is the same keyword directly under router eigrp 100. The running config confirms placement:
R2# show run | section router eigrp
router eigrp PINGLABZ
!
address-family ipv4 unicast autonomous-system 100
!
topology base
variance 2
exit-af-topology
network 2.2.2.2 0.0.0.0
network 10.0.0.0
exit-address-familyVerifying with Traffic Share Counts
Both paths are now installed, and this is the capture that matters:
R2# show ip route 3.3.3.3
Routing entry for 3.3.3.3/32
Known via "eigrp 100", distance 90, metric 4096000, type internal
Routing Descriptor Blocks:
10.0.24.2, from 10.0.24.2, 00:00:25 ago, via Ethernet0/2
Route metric is 4608000, traffic share count is 71
Total delay is 8000 microseconds, minimum bandwidth is 10000 Kbit
Loading 1/255, Hops 3
* 10.0.12.1, from 10.0.12.1, 00:00:25 ago, via Ethernet0/1
Route metric is 4096000, traffic share count is 80
Total delay is 7000 microseconds, minimum bandwidth is 10000 Kbit
Loading 1/255, Hops 2The traffic share counts, 80 via R1 and 71 via R4, are the proof of proportional load balancing. EIGRP does not split flows 50/50 across unequal paths; it forwards in inverse proportion to metric, so the better path carries more. The ratio 80:71 tracks the metric ratio 4608000:4096000 almost exactly. CEF then maps flows onto the two paths per-destination by default, preserving packet ordering within a flow.
The topology table now reports two successors for the prefix:
R2# show ip eigrp topology 3.3.3.3/32
EIGRP-IPv4 VR(PINGLABZ) Topology Entry for AS(100)/ID(2.2.2.2) for 3.3.3.3/32
State is Passive, Query origin flag is 1, 2 Successor(s), FD is 524288000, RIB is 4096000When Variance Does Nothing
The most common variance complaint is "I configured it and nothing happened." Almost always, the alternate path is not a feasible successor: its RD is equal to or higher than the FD, usually because the paths share too much of the same geometry. In our lab this was true with all-default delays, where the alternate's RD exactly equaled the FD, and equal is not less than. We tuned interface delay on the alternate path (delay, not bandwidth, is the right knob per the K values guide) until feasibility held. Check show ip eigrp topology all-links first, do the RD versus FD comparison yourself, and only then reach for variance. If the neighbor is not even in the topology table, that is an adjacency problem, and the EIGRP neighbor troubleshooting guide is the place to start.
Also know the interaction with maximum-paths (default 4): variance selects candidates, maximum-paths caps how many get installed.
How the Split Actually Happens: CEF and Traffic Share
The routing table entry defines the ratio; CEF implements it. By default CEF shares per destination (strictly, per source-destination hash), so each flow sticks to one path and packets within a flow never reorder. The traffic share counts translate directly into CEF hash bucket allocations: with counts of 80 and 71, roughly 80 of every 151 flow hashes land on the R1 path and 71 on the R4 path. You can inspect the resulting distribution:
R2# show ip cef 3.3.3.3 internalTwo operational consequences follow. First, with only a handful of large flows (a nightly backup, a couple of iperf streams), the split can look nothing like 80:71, because each elephant flow hashes onto one path and stays there. Proportional sharing is a statistical promise that needs flow diversity to hold. Second, if you want the classic traffic-share min across-interfaces behavior (install all paths for fast failover but only forward on the best), that knob still exists: it gives you variance's convergence benefit without its load-sharing behavior, which is sometimes exactly right for latency-sensitive networks.
There is also a subtle stability win hiding here: every path variance installs is already in the RIB and FIB. When the successor dies, forwarding shifts to the surviving path with no DUAL computation, no query, not even the feasible-successor promotion delay. Variance is, among other things, a convergence feature.
Variance Alongside the Rest of the Toolkit
Variance interacts with several neighbors in the EIGRP feature family, and the combinations matter more than the individual knobs:
- maximum-paths caps installed routes (default 4, up to 32). Variance nominates candidates; maximum-paths decides how many survive. On a router with many parallel paths, check both.
- Offset lists let you nudge metrics per prefix without touching interface delay, which is handy when you want feasibility to hold for one destination but not another. Blunt delay changes affect every prefix crossing the interface.
- Summarization can silently change the math: a summary's metric tracks its best component, so a summary learned over two paths may have a different FD/RD relationship than the components did. If variance behaves oddly for a summarized prefix, inspect the components on the far side of the summary (the mechanics are in the summarization guide).
- Stub spokes and variance rarely mix: a stub site with two unequal WAN uplinks is better served by variance on the hub side pointing in, plus stub on the spoke to contain queries.
Should You Use It in Production?
Variance is one of the few features OSPF simply cannot match, since OSPF load balancing is strictly equal-cost (a fuller comparison lives in EIGRP vs OSPF). It shines when you have two WAN circuits of different speeds and you are paying for both: variance puts the slower circuit to work instead of leaving it idle as a pure backup. The trade-offs are real, though. Unequal paths mean unequal latency, which can upset jitter-sensitive traffic, and per-destination CEF sharing can be lumpy with few flows. Measure before and after, and prefer it for bulk data over voice.
Key Takeaways
- Variance multiplies the FD; any feasible successor with a metric below FD x variance is installed. Default is 1, maximum 128.
- Only feasible successors qualify. The feasibility condition (RD strictly less than FD) is non-negotiable, which keeps every extra path loop-free.
- Compute the value: worst acceptable metric divided by FD, rounded up. Do not just set a big number and hope.
- Verify with
show ip route <prefix>and read the traffic share counts: EIGRP balances proportionally to metric, not evenly. - If variance does nothing, the backup path failed the feasibility check. Fix the geometry or the delay values, not the variance number.
Unequal-cost load balancing is EIGRP flexing the one muscle no other IGP has. For the DUAL machinery that makes it safe, and everything else in the protocol, the EIGRP complete guide ties it all together.