| Internet-Draft | Adaptive ECMP Load Balancing | October 2026 |
| Yang, et al. | Expires 3 May 2027 | [Page] |
Equal-Cost Multipath (ECMP) forwarding assigns a flow to a next-hop by computing a hash over packet header fields when the flow is first seen. Because the assignment does not change after that, the load across the paths of an ECMP group can become uneven when the set of paths changes or when traffic shifts among existing flows. This document defines procedures for adaptive ECMP load balancing in which a forwarding node periodically measures per-path load, determines whether the load is sufficiently uneven to act on, and makes a bounded number of incremental flow placement changes toward less-used paths. The procedures preserve per-flow packet ordering for all but the small number of flows that are moved in any interval, and they converge toward a balanced distribution across the group. The procedures operate within a single forwarding node and add no new packet formats or inter-node signaling.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 3 May 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Equal-Cost Multipath (ECMP) routing [RFC2991] lets a forwarding node distribute IP traffic over several next-hops of equal routing cost. The forwarding decision is commonly made by hashing selected packet header fields and mapping each flow to one path. [RFC2992] analyzes the hash-threshold algorithm that is widely used for this purpose and discusses the trade-off between distribution uniformity and the disruption that occurs when paths are added or removed.¶
Hash-based path selection gives a reasonable initial distribution and preserves per-flow packet ordering, but the assignment is fixed: once a flow is mapped to a path it stays there regardless of later changes to the group or to traffic. As a result the load across the paths of a group can become uneven over time. This is a known operational effect.¶
[RFC7424] describes techniques for identifying large ("elephant") flows and selectively moving them across LAG or ECMP component links to improve utilization. That document is Informational, addresses primarily the classification of large flows, and does not define normative requirements for general load-aware path selection.¶
This document defines normative procedures for load-aware ECMP path selection that apply to all flows in an ECMP group, not only to large flows. The procedures rest on three elements: periodic measurement of per-path load, a bounded number of flow placement changes per interval to limit the rate of path changes, and operator-controlled parameters that govern the behavior. The procedures supplement, and do not replace, the existing hash-based path selection: they add a load-aware feedback loop on top of the hash function. The procedures carry MUST-level requirements on forwarding-node behavior and are therefore on the Standards Track.¶
The relationship of these procedures to entropy-improving mechanisms and to other load-balancing work is described in Section 8.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Hash-based ECMP next-hop selection gives a one-time, deterministic mapping from a flow identifier to a path. The mapping does not account for runtime conditions, which leads to uneven load in at least the following cases.¶
In each case the forwarding node has enough local information, in the form of per-path counters and flow-table state, to detect the imbalance, but a hash-only ECMP implementation does not act on it. This document specifies how a forwarding node uses locally available load data to make incremental changes to flow placement.¶
This document uses the following terms. Where applicable, the definitions of [RFC2991] and [RFC7424] are reused.¶
The procedures defined in this document follow these objectives.¶
+---------------------+
| Evaluation Interval |
| Timer Expires |
+----------+----------+
|
v
+---------------------+
| Collect per-path |
| load metrics |
+----------+----------+
|
v
+---------------------+
| Compute Imbalance |
| Ratio (IR) |
+----------+----------+
|
+------+------+
| IR < thresh?|-----> No action; wait for
+------+------+ next interval
| no
v
+---------------------+
| Derive reassignment |
| limit from IR |
+----------+----------+
|
v
+---------------------+
| Adjust flow |
| placement (up to |
| limit) on eligible |
| events |
+---------------------+
A forwarding node that implements these procedures MUST maintain per-path load metrics for each ECMP group on which adaptive load balancing is enabled. The node MUST support at least one of the following metric types.¶
A node MAY support a weighted combination of metrics or additional implementation-defined metrics. The active metric type SHOULD be configurable per group.¶
The evaluation interval MUST be configurable with a granularity of at least 100 milliseconds. The default interval SHOULD be 1 second. An interval shorter than 100 milliseconds is NOT RECOMMENDED because of the processing cost of frequent measurement.¶
At each evaluation interval the forwarding node computes the imbalance ratio (IR) across the N paths of the ECMP group. Let U_i be the measured load metric for path i, where 1 <= i <= N.¶
U_max = max(U_1, U_2, ..., U_N)
U_min = min(U_1, U_2, ..., U_N)
U_avg = (sum of all U_i) / N
IR = (U_max - U_min) / U_avg, when U_avg > 0
IR = 0, when U_avg = 0
¶
The IR is compared with a configurable imbalance threshold (T_imb). When IR is below T_imb, the load is considered acceptable and no flow placement change is made during the interval.¶
The default T_imb SHOULD be 0.3, which corresponds to a 30 percent normalized deviation. An operator MAY change this value: a lower threshold reacts to smaller imbalances at the cost of more frequent changes, and a higher threshold reduces the frequency of changes at the cost of tolerating more skew.¶
When IR >= T_imb, the forwarding node derives a reassignment limit (R_lim) that bounds the number of flow placement changes made during the interval. The derivation of R_lim MUST satisfy the following properties.¶
The function used to map IR to R_lim is an implementation choice. Linear, piecewise-linear, and step functions are all acceptable, provided the properties above hold.¶
The following is a non-normative example of a compliant function.¶
R_lim = 0, when IR < T_imb
R_lim = min(R_max, ceil(IR * S)), when IR >= T_imb
where S is a configurable scaling factor (default: 10).
¶
This example is given for clarity only. An implementation may use any function that satisfies the stated properties.¶
Flow placement changes are made in response to specific forwarding-plane events, subject to the reassignment limit for the interval. Each change consumes one unit of the reassignment limit. The following event types are defined.¶
The set of active event types SHOULD be configurable. When more than one event type is enabled, any of them may trigger a change while the reassignment limit for the interval has not been reached.¶
When a flow placement change is made, the target path MUST be the path with the lowest current load metric in the group at the time of the decision. When more than one path shares the lowest load, the node MAY choose any of them, for example by a secondary hash or round-robin among the candidates.¶
When a change is triggered by a periodic sweep or a flow expiration, the source path from which a flow is selected MUST be the path with the highest current load metric. The choice of which flow to move from the source path is an implementation decision. A node SHOULD prefer flows with lower instantaneous rate, to limit the effect of reordering on any single flow.¶
The reassignment limit is the primary means of controlling the rate of flow placement changes. Each change reduces the remaining limit by one for the interval. When the remaining limit reaches zero, no further changes are made until the next interval begins with a freshly derived limit.¶
A node MUST NOT carry over unused reassignment capacity from one interval to the next. The limit is derived anew at each interval from the load observed for that interval. This prevents the accumulation of unused capacity that could otherwise cause a burst of path changes.¶
The combination of a bounded limit and periodic evaluation forms a self-regulating feedback loop. Over successive intervals the per-path load converges toward the threshold. Once IR falls below T_imb, the limit becomes zero and changes stop until conditions change.¶
These procedures supplement, and do not replace, the existing hash-based ECMP next-hop selection. The hash function remains the default path selection method for all flows. A load-aware placement change overrides the hash-based assignment only for a specific flow and only when the derived reassignment limit permits it.¶
When adaptive load balancing is disabled, or when the reassignment limit is zero, the node MUST use the standard hash-based path selection for all flows.¶
A LAG selects a member link by a hash in a manner analogous to ECMP next-hop selection. These procedures apply equally to LAG member selection. When applied to a LAG, the references in this document to "ECMP group" and "path" apply to the LAG and its component links respectively.¶
A node that implements adaptive load balancing for both ECMP groups and LAGs SHOULD manage them independently, since each has its own membership, load, and parameters.¶
In MPLS environments, entropy labels [RFC6790] add input to the hash and improve the uniformity of the initial flow placement. Even with entropy labels, the fixed nature of the hash assignment means that imbalance can develop over time, so these procedures remain applicable as a complementary technique.¶
Data center leaf-spine fabrics commonly use large numbers of ECMP paths [RFC7938]. The combination of high path count, a mix of flow sizes including long-lived storage and compute flows, and high utilization targets makes these environments prone to hash-induced load skew. These procedures can improve fabric-wide load balancing without a central controller.¶
In WAN environments where ECMP is used across parallel links or tunnels, the smaller number of concurrent flows and their longer lifetimes increase the effect of each flow placement decision on the aggregate load. An operator that deploys these procedures in a WAN SHOULD consider a longer evaluation interval and a lower reassignment limit, to reflect the higher cost of a path change in a wide-area topology.¶
The following parameters govern the behavior described in this document. A node MUST allow these parameters to be configured per ECMP group, or per LAG.¶
| Parameter | Description | Default |
|---|---|---|
| Enable/Disable | Activate or deactivate adaptive load balancing for the group | Disabled |
| Evaluation Interval | Time between consecutive load assessments | 1 second |
| Load Metric Type | Metric used for per-path comparison | Byte count |
| Imbalance Threshold (T_imb) | IR below which no change is made | 0.3 |
| Maximum Reassignment Limit (R_max) | Upper bound on flow placement changes per interval | 8 |
| Active Event Types | Which events may trigger a change | New flow arrival |
A parameter change SHOULD take effect at the start of the next evaluation interval, to avoid inconsistent behavior during a running interval. Disabling the feature MUST cause the node to stop making load-aware changes immediately and to revert to hash-based path selection for subsequent flows. Flows that were previously moved MAY remain on their current paths; the node is not required to return them to their hash-computed paths on disablement.¶
Some traffic classes require path persistence and MUST NOT be subject to flow placement change. A node MUST support the configuration of exclusion policies that identify flows exempt from change. Examples of traffic that requires exclusion are the following.¶
An exclusion policy SHOULD support matching on standard packet header fields, including source and destination address prefixes, protocol numbers, port ranges, and DSCP values. An excluded flow MUST NOT consume reassignment capacity and MUST remain on its hash-assigned path.¶
A node SHOULD expose the following operational state for each ECMP group on which adaptive load balancing is enabled.¶
This state SHOULD be accessible through standard management interfaces, such as a YANG-based management protocol [RFC8343], SNMP, or streaming telemetry. This document does not define a data model.¶
An operator is advised to adopt a conservative initial posture.¶
The procedures in this document constrain the forwarding-plane behavior of a single node and do not define any new packet format, header field, or inter-node protocol. The packets a conforming node emits are bit-for-bit indistinguishable from those of a node that performs only hash-based path selection; a flow placement change alters which member of an ECMP group or LAG a flow egresses on, not the contents of the flow's packets. Interoperability with neighbors, with transport endpoints, and with existing ECMP and LAG deployments is therefore preserved unconditionally.¶
The normative requirements in this document are stated as externally observable properties so that conformance can be verified without access to a node's internal implementation. In particular, a conforming implementation:¶
These properties are testable at a node's interfaces: an operator or test harness can offer a controlled traffic pattern, observe per-path load and the reported imbalance ratio, and confirm that the number and rate of flow movements respect the configured bounds and exclusions. The normative requirements thus give operators an enforceable basis for procurement and conformance testing, which is the reason this document is placed on the Standards Track even though it introduces no on-the-wire protocol element.¶
The procedures in this document operate within the local forwarding plane of a single node. They introduce no new protocol messages, packet formats, or inter-node signaling, and so do not expand the control-plane attack surface.¶
The following data-plane considerations apply.¶
This document has no IANA actions.¶
The authors thank the members of the IETF Routing Area Working Group for their review and feedback.¶