Equal-Cost Multi-Path (ECMP) is a forwarding mechanism for routing packets along multiple paths of equal cost with the goal to achieve almost equally distributed link load sharing. This, of course, significantly impacts a router's next-hop (path) decision.
For further details, look at RFC 2991, "Multipath Issues in Unicast and Multicast Next-Hop Selection," and RFC 2992, "Analysis of an Equal-Cost Multi-Path Algorithm."
ECMP is available only for Linux in the open-source UNIX world; it solely is a feature of the underlying network stack. The terminology stems from the world of link-state routing protocols, which facilitate a cost-based metric; OSPF and Intermediate System-to-Intermediate System (IS-IS) explicitly allow ECMP routing. Load balancing can be carried out based on equal cost or unequal cost, per packet or per destination.
Because of the absence of a metric (weight), static routes under Cisco IOS Software support only equal-cost load sharing. To disable destination-based fast switching, you can force Cisco IOS Software to process switch on a per-packet basis with the interface command no ip route-cache. However, this does not affect CEF. Use ip load-sharing per-packet in that case.
As previously mentioned, UNIX stacks in general have a per-packet-based view of the world, in contrast to the Cisco default per-connection view (CEF, fast-switching cache). This behavior changes when enabling ECMP in the Linux kernel or deploying a route cache. In that case, the Linux OS performs per-flow balancing that can be changed to per-packet behavior with the equalize flag of the ip route command. Besides its merits, it can introduce performance issues because of stream rearrangement, in particular when dealing with real-time Voice over IP (VoIP) traffic. This has to be taken into consideration as well when changing Cisco forwarding settings from per destination to per packet. Figure 8-4 shows a possible scenario for ECMP where load balancing is desirable.