コンテンツにスキップ

DPU Orchagent 設定 (DEVICE_METADATA — DPU 固有フィールド)

概要

SmartSwitch の DPU (Data Processing Unit) 上で動作する orchagent は DpuOrchDaemon として起動する。通常の NPU orchagent (OrchDaemon) とは異なり、DPU_APPL_DB / DPU_APPL_STATE_DB を購読して DASH ワークロードを処理する1

DpuOrchDaemon が選択される唯一の条件は CONFIG_DB DEVICE_METADATA|localhost.switch_type = "dpu"。その他の DPU 固有動作は同フィールドの orch_northbond_dash_zmq_enabled で制御される。

本ページは DPU orchagent に直接関係する DEVICE_METADATA|localhost フィールドに絞ったリファレンスである。DEVICE_METADATA 全体のリファレンスは device-metadata.md を参照。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>DEVICE_METADATA|localhost")]
  Main["orchagent<br/>main.cpp<br/>getCfgSwitchType()"]
  Daemon["DpuOrchDaemon"]
  DASH_DB[("DPU_APPL_DB<br/>DASH テーブル群")]
  ZMQ["ZMQ チャネル<br/>(gNMI → orchagent)"]
  SAI["SAI / ASIC<br/>(DPU 側)"]

  CDB -->|switch_type=dpu| Main
  Main --> Daemon
  CDB -->|orch_northbond_dash_zmq_enabled| Daemon
  ZMQ -->|DASH イベント| Daemon
  DASH_DB --> Daemon
  Daemon --> SAI

凡例

switch_type の読み取りは orchagent 起動時に一度のみ。orch_northbond_dash_zmq_enabled は DpuOrchDaemon::init() でも一度読み取られ、ZMQ サーバの有無が決定する。

フィールド

対象テーブル: DEVICE_METADATA|localhost

フィールド YANG default コード由来デフォルト 説明
switch_type enum string なし "switch" (コード fallback) orchagent デーモン種別を決定。"dpu" を指定すると DpuOrchDaemon が選択される
orch_northbond_dash_zmq_enabled boolean "true" true (get_feature_status fallback) gNMI サービスが DASH イベントを ZMQ チャネルで orchagent に送信するか否か
orch_northbond_route_zmq_enabled boolean "false" false (get_feature_status fallback) fpmsyncd が ROUTE イベントを ZMQ チャネルで送信するか否か (DPU 上では通常不使用)

フィールド詳細

switch_type

DEVICE_METADATA|localhost
  switch_type = "dpu"

orchagent/main.cppgetCfgSwitchType()CONFIG_DB DEVICE_METADATA|localhostswitch_type を読み取る1

// main.cpp:990-994
if (gMySwitchType == "dpu")
{
    dpu_app_db = make_shared<DBConnector>("DPU_APPL_DB", 0, true);
    dpu_app_state_db = make_shared<DBConnector>("DPU_APPL_STATE_DB", 0, true);
    orchDaemon = make_shared<DpuOrchDaemon>(...);
}

switch_type が存在しない場合は "switch" (= 通常 NPU モード) にフォールバックされ、DpuOrchDaemon は選択されない。

switch_type = "dpu" のとき orchagent.sh が付与する追加引数:

引数 効果
-b (pop batch size) 65536 通常 NPU の 1024 より大幅に増加。DPU の高ボリューム処理に対応
-z zmq_sync 固定 synchronous_mode フィールド値によらず ZMQ sync mode を強制
-k (ZMQ max bulk limit) 65536 ZMQ バルク送信上限
# orchagent.sh:27-39
elif [[ x"$LOCALHOST_SWITCHTYPE" == x"dpu" ]]; then
    ORCHAGENT_ARGS+="-b 65536 "
fi
if [ "$LOCALHOST_SWITCHTYPE" == "dpu" ]; then
    ORCHAGENT_ARGS+="-z zmq_sync -k 65536 "
fi

orch_northbond_dash_zmq_enabled

DEVICE_METADATA|localhost
  orch_northbond_dash_zmq_enabled = "true"   # or "false"

DpuOrchDaemon::init() が起動時に一度読み取り、ZMQ サーバを DASH orch に渡すかどうかを決定する2:

// orchdaemon.cpp:1329-1333
if (get_feature_status(ORCH_NORTHBOND_DASH_ZMQ_ENABLED, true))
{
    dash_zmq_server = m_zmqServer;
}

get_feature_status() の実装 (orch_zmq_config.cpp:81-103): - CONFIG_DB.hget("DEVICE_METADATA|localhost", "orch_northbond_dash_zmq_enabled") を読む - フィールド欠如時: default_value = true を返す - 値が "true"true 返却、それ以外 ("false" 等) → false 返却

ZMQ サーバ割り当て DASH イベント送信経路
"true" (YANG default) あり (m_zmqServer を渡す) gNMI → ZMQ → DashOrch
"false" なし (nullptr) APPL_DB ProducerStateTable 経由のみ
欠如 あり (コード default = true) gNMI → ZMQ → DashOrch

orch_northbond_route_zmq_enabled

DEVICE_METADATA|localhost
  orch_northbond_route_zmq_enabled = "false"   # YANG default

YANG default は "false"。DPU 上では RouteOrch が OrchDaemon::init() 経由で初期化されるが、通常 DPU では Route イベントを ZMQ 経由で送信しない構成が想定される。

購読者

  • orchagent (DpuOrchDaemon): 起動時に switch_type を読み取って DpuOrchDaemon として動作; orch_northbond_dash_zmq_enabled を読み取って DASH ZMQ を有効化
  • orchagent.sh: switch_typesonic-db-cli で読み取り、-b 65536 -z zmq_sync -k 65536 を orchagent 起動引数に付与
  • bfdmon.py (sonic-buildimage): switch_type = "dpu" のとき BFD モニタリングをスキップ
  • enable_counters.py (sonic-buildimage): switch_type = "dpu" のときカウンタ設定を分岐

関連 CONFIG_DB / YANG / CLI

フィールド暗黙デフォルト (Phase A — コード由来)

DPU orchagent が参照する DEVICE_METADATA|localhost フィールドのデフォルト値まとめ。

フィールド YANG default コード由来デフォルト 必須区分 fallback 源
switch_type なし "switch" (NPU モード) 実質必須 main.cpp getCfgSwitchType():251 — DB hget 失敗時 "switch" を代入
orch_northbond_dash_zmq_enabled "true" true 省略可 orch_zmq_config.cpp:81-103get_feature_status(ORCH_NORTHBOND_DASH_ZMQ_ENABLED, true) の第 2 引数
orch_northbond_route_zmq_enabled "false" false 省略可 orch_zmq_config.cpp:81-103get_feature_status(ORCH_NORTHBOND_ROUTE_ZMQ_ENABLED, false) の第 2 引数

補足

  • switch_type: YANG に default 文はなく、コード (getCfgSwitchType()) が DB 不在時に "switch" へフォールバックする。DPU として動作させるには "dpu" を明示的に設定する必要がある。通常 platform.json / config_samples.pySmartSwitchDPU 型のサンプル設定生成時に自動投入する。

  • orch_northbond_dash_zmq_enabled: YANG default "true" はコードの default_value true と一致する。フィールドが存在しない環境でも ZMQ が有効になる。DPU orchagent が ZMQ なしで動作するには明示的に "false" を設定する必要がある。

  • ZMQ sync mode: switch_type = "dpu" のとき orchagent.sh-z zmq_sync を無条件付与する。これは synchronous_mode フィールドの値に関係なく ZMQ sync mode が強制されることを意味する。この挙動はシェルスクリプトレベルで決定されるため CONFIG_DB のフィールドで上書きできない。

引用元


  1. DpuOrchDaemon クラス定義と起動条件: sonic-swss/orchagent/orchdaemon.h:150-158, sonic-swss/orchagent/orchdaemon.cpp:1313-1419, sonic-swss/orchagent/main.cpp:981-994. https://github.com/sonic-net/sonic-swss/blob/master/orchagent/orchdaemon.cpp 

  2. ZMQ 機能フラグ実装: sonic-swss/lib/orch_zmq_config.h:21, sonic-swss/lib/orch_zmq_config.cpp:81-103. https://github.com/sonic-net/sonic-swss/blob/master/lib/orch_zmq_config.cpp 

  3. YANG 定義: sonic-buildimage/src/sonic-yang-models/yang-models/sonic-device_metadata.yang:217-224, 340-350. https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-device_metadata.yang 

  4. orchagent.sh DPU 固有引数: sonic-buildimage/dockers/docker-orchagent/orchagent.sh:22-42. https://github.com/sonic-net/sonic-buildimage/blob/master/dockers/docker-orchagent/orchagent.sh