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¶
orchagent/main.cpp の getCfgSwitchType() が CONFIG_DB DEVICE_METADATA|localhost の switch_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¶
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¶
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_typeをsonic-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¶
- 関連 CONFIG_DB:
DEVICE_METADATA,DPU/REMOTE_DPU/VDPU/ENI - 関連 YANG:
sonic-device_metadata
フィールド暗黙デフォルト (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-103 — get_feature_status(ORCH_NORTHBOND_DASH_ZMQ_ENABLED, true) の第 2 引数 |
orch_northbond_route_zmq_enabled |
"false" |
false |
省略可 | orch_zmq_config.cpp:81-103 — get_feature_status(ORCH_NORTHBOND_ROUTE_ZMQ_ENABLED, false) の第 2 引数 |
補足¶
-
switch_type: YANG にdefault文はなく、コード (getCfgSwitchType()) が DB 不在時に"switch"へフォールバックする。DPU として動作させるには"dpu"を明示的に設定する必要がある。通常platform.json/config_samples.pyがSmartSwitchDPU型のサンプル設定生成時に自動投入する。 -
orch_northbond_dash_zmq_enabled: YANG default"true"はコードの default_valuetrueと一致する。フィールドが存在しない環境でも ZMQ が有効になる。DPU orchagent が ZMQ なしで動作するには明示的に"false"を設定する必要がある。 -
ZMQ sync mode:
switch_type = "dpu"のときorchagent.shは-z zmq_syncを無条件付与する。これはsynchronous_modeフィールドの値に関係なく ZMQ sync mode が強制されることを意味する。この挙動はシェルスクリプトレベルで決定されるため CONFIG_DB のフィールドで上書きできない。
引用元¶
-
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 ↩↩ -
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 ↩ -
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 ↩ -
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 ↩