コンテンツにスキップ

ECMP Family

ECMP は「複数 next hop に分散する」だけなら単純ですが、SONiC には用途に応じて複数の拡張があります。まず通常 ECMP を基準にし、重み、bucket 安定性、順序、hash 入力、traffic class による path 選択を別々の問題として分けます。

方式比較

方式 解きたい問題 主な入力 向いている場面
ECMP 同じ cost の複数 next hop へ分散する。 route の nexthop set 一般的な L3 冗長 / 分散。
WCMP next hop ごとに重みを付ける。 weight 付き nexthop link 容量や意図した比率が異なる経路。
Fine Grained ECMP member 変化時の flow 移動を抑える。 FG_NHG bucket / member / prefix appliance 経由、flow stickiness が重要な構成。
Ordered ECMP ECMP member の順序を揃える。 ordered NHG / sequence id 複数装置で同じ flow を同じ上流へ寄せたい構成。
Generic Hash hash field / algorithm を制御する。 SWITCH_HASH ECMP / LAG の分散キーを設計したい場合。
CBF forwarding class ごとに path を変える。 DSCP/EXP to FC、class-based NHG traffic engineering。

通常 ECMP を基準にする

通常 ECMP は route の next-hop set から SAI next hop group を作り、ASIC の hash によって flow を member に割り振ります。運用上は、route の nexthop set、neighbor 解決、hash field、member の up/down を確認します。

この基準を理解してから、重み付けや bucket 固定のような拡張を読むと混乱しにくくなります。

WCMP は比率の問題

Weighted ECMP は、next hop の選択比率を重みで変える機能です。同じ経路数でも、全 member を等確率にしたくない場合に使います。単に member を増減するのではなく、ASIC の next hop group member に weight を反映できるかが前提になります。

詳細は Weighted ECMP を参照してください。

Fine Grained ECMP は flow 移動の問題

Fine Grained ECMP は、固定数 bucket を使って flow の割り当てを安定させます。member 障害や復旧時に全 flow を再分散するのではなく、影響する bucket だけを動かすことで、stateful appliance や load-balanced VM のような構成で flow stickiness を維持しやすくします。

設定面では FG_NHGFG_NHG_PREFIXFG_NHG_MEMBER を読みます。動作面では fgnhgorch が bucket と member を SAI FG ECMP group に反映します。詳細は Fine Grained ECMPFG_NHG テーブル を参照してください。

Ordered ECMP は装置間の一貫性の問題

Ordered ECMP は、複数の ToR や tier で ECMP member の順序を揃え、同じ hash 結果が同じ論理 path を選びやすくするための方式です。通常の ECMP では member set が同じでも内部順序の差で flow が別 path に行くことがあります。

plan 上の docs/routing/high-level-design-document.md はこの Ordered ECMP 系の既存ページとして扱います。ページ名が一般的なので、章内では Ordered ECMP HLD として参照します。

Generic Hash は分散キーの問題

ECMP の偏りを見たとき、next hop group だけでなく hash field も確認します。Generic Hash は ECMP / LAG の hash field と algorithm を SWITCH_HASH で制御する機能です。inner / outer IP、L4 port、IPv6 flow label など、どのフィールドを hash 入力にするかは overlay や traffic pattern に強く影響します。

CBF は path を traffic class で選ぶ問題

Class Based Forwarding は、DSCP / MPLS EXP から Forwarding Class を決め、その FC に応じて異なる child NHG を選ぶ traffic engineering です。ECMP の hash で均等に分散する話ではなく、「この class はこの path set」を選ぶ機能です。

詳細は クラスベース転送 を参照してください。

関連ページ