コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 04 章: VRF / ECMP / 経路選択 を参照。

裏取りステータス: code-verified

Verifier 2026-05-09: sonic-swss/orchagent/pbhorch.{cpp,h}sonic-swss/orchagent/pbh/pbhmgr.cpp を確認。pbhmgr.cpp:36-42INNER_DST_IPV4 / INNER_SRC_IPV4 / INNER_DST_IPV6 / INNER_SRC_IPV6 / INNER_L4_DST_PORT / INNER_L4_SRC_PORT / INNER_IP_PROTOCOLSAI_NATIVE_HASH_FIELD_* マッピングと VxLAN/NVGRE 用 case が実装済み。CLI は sonic-utilities/config/plugins/pbh.py および utilities_common.helper.get_port_pbh_binding で取り込み済み。HLD と整合。

ECMP inner packet hashing テストプラン(PBH 経由の VxLAN/NVGRE 内側 5-tuple ハッシュ)

概要

ECMP nexthop の選択を outer ヘッダではなく inner パケットの 5-tuple(src/dst IP、L4 port、IP proto)でハッシュさせる動作を T0 上で検証するテスト1。dynamic Policy Based Hashing (PBH) を使って ECMP ハッシュキーを上書きし、4 種の outer (IPv4/IPv6 × VxLAN/NVGRE) × 2 種の inner (IPv4/IPv6) を網羅する。

動作仕様

PBH 構成1

構成要素 内容
PBH table T0 トポロジの VLAN 内 PTF ポートを bind(Up かつ非 LAG
hash field inner_ip_proto/inner_l4_dst_port/inner_l4_src_port/inner_dst_ipv4/inner_src_ipv4/inner_dst_ipv6/inner_src_ipv6。L4 port と IP は symmetric=Yes
hash 上記 7 フィールドをまとめた inner_hash
rule outer encap ごとに 8 ルール(NVGRE × {v4,v6}×{v4,v6} priority=2、VxLAN × {v4,v6}×{v4,v6} priority=1)。action=SET_ECMP_HASH、counter=ENABLED

VxLAN は L4 dst port = 0x3412 (4789) をマッチ条件に含める。NVGRE は IP proto/IPv6 next header = 0x2f1

測定方法1

flowchart LR
  PTF[PTF: 4000 packets / dst prefix] --> DUT
  DUT -->|inner 5-tuple<br>variation| ECMP[(4 ECMP next-hop = T1)]
  ECMP --> P1[port1] & P2[port2] & P3[port3] & P4[port4]
  • ECMP nexthop あたり 1000 パケット 送出 → 4 nexthop で 4000 packets
  • 期待値からの ±25% 偏差以内 で OK
  • inner 5-tuple のうち 1 要素ずつ変えた 7 ケース実施

逆検証

inner tuple を固定し outer tuple を変えた 4000 packets を流すと すべて単一 nexthop に着弾しなければならない。outer がハッシュに混ざっていない確認1

symmetric / warm-boot

オプションで symmetric ハッシュ確認(往復で同じ nexthop に landing)1。warm-boot 中に inner ハッシュテストを継続して通常時と同じ分布になることも確認1

制限事項

  • T0 トポロジ前提。他トポロジは将来拡張1
  • ハッシュ偏差許容は 25%。少サンプルでは偏差が大きいので 1000 packets/nexthop が下限
  • VxLAN dst port は 0x3412 固定(little-endian で 4789)

干渉する機能

  • 既存 hash_test: outer 5-tuple ECMP のテスト。本テストは inner 版
  • ECMP / Overlay ECMP: PBH で書き換えられる ECMP ハッシュキーに依存
  • warm-boot: トラフィック継続テストの対象

引用元