Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る

データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る

Network Developer Night #1

2025/06/04(水) 18:15 〜 19:45
https://net-dev-night.connpass.com/event/348135/

データプレーンプログラミングとは?
DPU&スイッチASICの開発経験から語る

Avatar for ebiken

ebiken

June 04, 2025
Tweet

More Decks by ebiken

Other Decks in Technology

Transcript

  1. データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る Network Developer Night #1 海老澤 健太郎|プリンシパル エンジニア| Arrcus,

    Inc. Twitter: @ebiken データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc
  2. Network Developer Night #1 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night

    #1| 海老澤健太郎 Arrcus, Inc • https://net-dev-night.connpass.com/event/348135/ • 2025/06/04(水) 18:15 〜 19:45 • 主催者:田島照久さん @NTTコム|仲松匠さん @KDDI|渡部友也さん @ Sony Network Communications • twitter: @netdevnight | discord: net-dev-night https://discord.gg/nxjzDuz35z 時間 内容 登壇者 18:15 - 18:45 NW運用の工夫と発明 ~現場ならではの3つの事例~ 金井 瑛 18:45 - 19:15 ライブ動画配信による輻輳に対するECNの効果検証 本橋 宏彰 19:15 - 19:45 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る 海老澤 健太郎
  3. Abstract • パケット変換&転送処理を高速に実行するハードウェアのプログラミングは、スイッチ ASICベンダ(Broadcom等)との高額なライセンス&NDA契約が必要となり、興味があっ ても知る機会がなかなかない技術分野でした。しかし、近年SDKやドキュメントが公開され たDPU (Data Processing Unit)や、パケット処理パイプラインプログラミングが可能なP4 言語などの登場により、高速パケット処理プログラミング方法が少し身近になってきました。

    • 本セッションでは、まずデータプレーンプログラミングとは?(ハードウェアパケット処理のし くみ)と、DPUの一例としてNVIDIA BlueFieldのDOCAライブラリを利用したプログラミング 手法を解説します。その後、データプレーンプログラミングに興味を持った人が「データー プレーンプログラミングに必要な技術知識は何か?」を理解できるように、開発で実際に苦 労しているポイントを解説します。 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc
  4. データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc

    Research & Support Engineer Netmarks Mar 1998 ~ Jun 2001 Regional manager, Global Support Center Network Appliance Jul 2001 ~ Dec 2006 Director of Service Development Operation SGI Japan Feb 2007 ~ Sep 2008 • Product Intro and Support for Operators • Data Center Operation (energy efficiency) • Technical Team Management Network (Enterprise / Telecom / ISP) ATM, VPN(IPsec), xDSL, MPLS Content Delivery Network & Storage Web/Streaming Cache & LB, NFS/SAN Data Center & SaaS (MEX/SGI) Energy Efficiency, DesktopVPN (SaaS) ~10 years Senior Product Manager Sable Networks Apr 2008 ~ Nov 2010 Solution Architect Parallels Dec 2010 ~ Mar 2014 VP of Technology Riava Jul 2014 ~ Sep 2015 Principal Engineer Lumina Networks Nov 2018 ~ Aug 2020 Co-Founder, CTO Ponto Networks Dec 2015 ~ Jun 2018 Network Automation SDN Controller, Orchestrator OpenFlow, FPGA, WhiteBox NOS Switch Design & Development Flow Router, IPv6/v4 Translation (nat64) Service Automation & Container Operation/Business Support System • Product Design and Development • Management and Board member of Startup Companies • Support Japan Market Entry • Technical Consulting / Support • Open-Source Community 10~20 years Lagopus OF Switch Kentaro Ebisawa(海老澤 健太郎) https://www.linkedin.com/in/ebiken/ Principal Researcher TOYOTA Motor Corp. Nov 2016 ~ Dec 2023 Network Infra for Connected Cars Research Professor NTT Ltd. Dec 2020 ~ Nov 2023 Operator Network Technology TOYOTA InfoTechnology (Nov 2016 ~ Mar 2019) Merged to TOYOTA Mortor Corp on Mar 2019 ~25 years Principal Engineer | Arrcus, Inc. Jan 2024 ~ current Virtualization of Data Plane
  5. • 創業:2016年 • 本社:北米 カリフォルニア(サンノゼ) • 社員数:約140名(2024年10月) • Founder and

    CTO: Keyur Patel • Ex-Cisco, Distinguished Engineer • Co-Chair IETF BGP & Sidrops WG • Chairman and CEO: Shekar Ayyar • Ex-VMware EVP & GM (14 years) 事業内容・特徴 • ホワイトボックススイッチを初め、様々なプラットフォーム上 でネットワーク機能を提供する “ネットワークOS” を開発 • 創業者CTO Keyur Patelを筆頭に、長年IETFで Working Group Chair などを務めているメンバーが多数在籍 • ユーザ企業と共同での研究開発、製品実装、IETFでの標準化 、などを通じて新しい技術を生み出している Arrcus, Inc. 概要 (アーカス) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc 本社:サンノゼ空港近く(SFOから35分)
  6. データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc

    大規模言語モデル(LLM: Large Language Model)などの生成AIの急速な発展と普 及により、大規模なAI計算基盤が整備されています。大規模AI計算基盤では、これ までのデータセンターネットワーク技術との親和性や規模対応性からEthernetや Internet Protocolをベースとした技術も広く採用されています。LLMなどの基盤モデ ルの大規模分散学習に用いられる分散技術と推論(生成)で用いられる分散技術 とでは、ユースケースだけでなく、そのアルゴリズムの違いからネットワークに対す る要件も大きく変わってきます。 本セッションでは、まずネットワークエンジニア視点から見た生成AI分散アルゴリズ ムを解説し、大規模分散学習から推論までの生成AIのライフサイクルを支えるAI計 算基盤におけるデータセンターネットワーク技術を紹介します。また、昨年の本カン ファレンス「Gen AI時代のデータセンターネットワーク最新動向」で紹介したUltra Ethernet Consortium (UEC)についても、最新動向を紹介する予定です。 <要旨> •生成AIの大規模分散学習と推論(分散アルゴリズムと通信) •AI計算基盤を支えるデータセンターネットワーク技術 •AI向けスケールアウトネットワーク技術Ultra Ethernetの最新動向 AIデータセンターネットワーク101:基礎から最新のUltra Ethernet動向まで https://f2ff.jp/introduction/10379?event_id=conf-2025-06 2025年6月13日
  7. データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc

    エンジニア選書 シリーズ 実践 SONiC入門 海老澤健太郎 著 定価 3,520円(本体3,200円+税10%) 発売日 2025.5.26 判型 B5変形 頁数 368ページ ISBN 978-4-297-14943-7(紙) 978-4-297-14944-4(電子) 技術評論社 書籍WEB https://gihyo.jp/book/2025/978-4-297-14943-7 レビューご協力 ありがとうございました!
  8. 実践 SONiC入門 (各章の内容) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1|

    海老澤健太郎 Arrcus, Inc 第1章 ホワイトボックススイッチとSONiCアーキテクチャ 第2章 SONiCの機能とユースケース 第3章 コミュニティ運営と開発プロセス 第4章 商用版SONiCと有償サポート 第7章 SONiCの内部構造:アーキテクチャとサブシステム 第8章 SONiCの内部構造:ステートの流れとモジュール連携 第9章 SAI詳細解説 [API・オブジェクト・データプレーンパイプライン] 第10章 高度な設定と利用法 第11章 SONiCのトラブルシューティング Appendix 1 ソースコードからのビルド Appendix 2 SONiCで利用されているオープンソースプロジェクト ハンズオンして感触を掴みたい SONiCを動かしてみる(仮想環境のサンプルあり) 第5章 SONiCの入手とインストール 第6章 SONiCの基本操作と設定方法 SONiCに興味を持ち始めた SONiCやホワイトボックススイッチとは何か? 歴史、ユースケース、コミュニティ、サポート状況を 理解する。 SONiCの内部構造を理解したい バグ修正や機能追加したい SONiCの内部構造やSAIを理解する。 ソースコードを読む入り口となる情報も解説。 ティップスや参考情報 詳細は日々更新されていくので、あくまでも参考とし て参照してください !SONiCを学ぶことで ”スイッチASIC+NOS” の動作を理解できるよう解説しました!
  9. 実践 SONiC入門 (目次) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1|

    海老澤健太郎 Arrcus, Inc 第1章 ホワイトボックススイッチとSONiCアーキテクチャ 1.1 ホワイトボックススイッチの内部構造 1.2 SAI誕生の背景と役割 1.3 SONiCアーキテクチャの全体像 第2章 SONiCの機能とユースケース 2.1 SONiCの機能とユースケース 2.2 ユースケース/事例 2.3 Switch ASIC以外への適用例 第3章 コミュニティ運営と開発プロセス 3.1 組織構成やメンバー 3.2 情報ソースとコミュニケーションチャネル 3.3 リリースプロセス 3.4 不具合報告や修正提案 第4章 商用版SONiCと有償サポート 4.1 コミュニティ版と商用版SONiCの違い 4.2 新機能追加までの流れ 4.3 主な商用版SONiC提供ベンダー 4.4 有償サポート提供ベンダー 4.5 まとめ:商用版SONiCや有償サポートの検討ポイント 第5章 SONiCの入手とインストール 5.1 SONiCが動作する環境の用意 5.2 イメージの入手 5.3 実機での利用方法 5.4 仮想環境での利用方法(sonic-vs on KVM) 第6章 SONiCの基本操作と設定方法 6.1 SONiCの基本操作と設定ファイル 6.2 設定ファイルを用いた設定方法 6.3 2種類のコマンドラインインターフェース 6.4 SONiCの基本的な設定 第7章 SONiCの内部構造:アーキテクチャとサブシステム 7.1 SONiCアーキテクチャの全体像 7.2 主要なサブシステム 7.3 各サブシステムで動作するモジュール 7.4 databaseコンテナ 7.5 swssコンテナ 7.6 syncdコンテナ 7.7 bgpコンテナ(routingコンテナ) 7.8 mgmt-frameworkコンテナとgnmiコンテナ 7.9 pmonコンテナ 7.10 snmpコンテナ 7.11 lldpコンテナ 7.12 teamdコンテナ 7.13 eventdコンテナ 7.14 フロントパネルポートとホストインターフェース 第8章 SONiCの内部構造:ステートの流れとモジュール連携 8.1 SONiCのデータベース 8.2 モジュールからデータベースへのアクセス 8.3 モジュールとホストの通信 8.4 モジュールからモジュールへのアクセス 8.5 コンテナのネットワーク構成 8.6 SONiCのインターフェース管理 8.7 SONiCのルーティング機能 8.8 SONiCの起動とユーザーインターフェース 8.9 SONiC管理フレームワーク 第9章 SAI詳細解説[API・オブジェクト・データプレーンパイプライン] 9.1 SAI概要 9.2 SAIのパケット処理パイプライン [COLUMN]2種類のSAIブリッジタイプ(sai_bridge_type_t) 9.3 SAIの定義ファイル[機能共通] 9.4 SAIの定義ファイル[機能毎] [COLUMN]SAIの初期仕様におけるAPIセット 9.5 SONiCにおけるSAIの実装 第10章 高度な設定と利用法 10.1 SRv6のサポート状況 10.2 SONiCのSRv6設定 10.3 パケット変換動作の確認 第11章 SONiCのトラブルシューティング 11.1 showコマンドによる状態の確認 11.2 ログの参照方法と読み方 11.3 APPL_DB変更/SAI呼び出しのログ 11.4 SONiCのデバッグ Appendix 1 ソースコードからのビルド A.1.1 SONiCビルドシステムの概要 A.1.2 SONiCイメージのビルドの流れ A.1.3 仮想環境でのビルド手順例 A.1.4 ビルドオプションのカスタマイズ(rules/config) A.1.5 特定モジュール(コンテナ)のビルドと入れ替え Appendix 2 SONiCで利用されているオープンソースプロジェクト 368ページ
  10. データプレーンプログラマビリティとは? データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc ヘッダフォーマットの定義 パースグラフの構築 ヘッダ解析 (Parse) 処理対象& 内容の決定 (Match) マッチフィールドの定義 (Exact / Masked / LPM) MAC address IPv4 address proto + TCP ports ( any header fields ) 変更・転送 (Action) アクションの定義 (ヘッダフィールド変更・追加・削除) bit shift (<<) (>>) add(+) sub(-) multiple(*) drop forward copy push / pop 複雑な処理も基本処理を順に実行することで実現可能(パイプライン処理)
  11. ハードウェアパケット処理のしくみ データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc (例:Switch ASICパイプライン) 【引用】 実践 SONiC入門 | 第9章 SAI 詳細解説 [API・オブジェクト・データプレーンパイプライン] Match Action Table (MAT)
  12. テーブル(MAT)の例:レイヤー3 パイプライン(ルーティング) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎

    Arrcus, Inc 実践 SONiC入門 | 第9章 SAI 詳細解説 [API・オブジェクト・データプレーンパイプライン] Ethernet0 Ethernet4 送信元MACアドレス:00-00-5E-00-53-00 宛先MACアドレス :00-00-5E-00-53-10 送信元IPアドレス:X.Y.Z.A 宛先IPアドレス:10.0.1.1 送信元MACアドレス:xx-xx-xx-xx-xx-xx 宛先MACアドレス :<router-mac> 送信元IPアドレス:X.Y.Z.A 宛先IPアドレス:10.0.1.1 送信元MACアドレス:00-00-5E-00-53-00 宛先MACアドレス :00-00-5E-00-53-40 送信元IPアドレス:X.Y.Z.A 宛先IPアドレス:10.0.1.1 実際のテーブル実装は ASIC毎に異なる 【引用】 実践 SONiC入門 | 第9章 SAI 詳細解説 [API・オブジェクト・データプレーンパイプライン]
  13. パイプライン プログラミング ó テーブル プログラミング データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer

    Night #1| 海老澤健太郎 Arrcus, Inc パイプライン プログラミング テーブルのスキーマと流れ (ビルドタイム) P4(DSL言語) DOCA Flow(ライブラリ) テーブルプログラミング テーブルのエントリ(ランタイム) Switch ASIC (SAI, ASIC SDK) DPU (DOCA Flow) 【引用】 実践 SONiC入門 https://gihyo.jp/book/2025/978-4-297-14943-7
  14. パケット処理の機能ブロック(ハイレベルアーキテクチャ) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc 【引用】 実践 SONiC入門 https://gihyo.jp/book/2025/978-4-297-14943-7 SONiC ArcOS ネットワークOS 目的毎のトレードオフにより様々な構成があるが、機能ブロックとしては共通
  15. パケット処理の機能ブロック(ハイレベルアーキテクチャ) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc 目的毎のトレードオフにより様々な構成があるが、機能ブロックとしては共通 マネジメントプレーン コントロールプレーン データプレーン Switch ASIC (NPU) ASIC CPU ソフトウェア データプレーン CPU SmartNIC (DPU) DPU DPU CPU CPU オフロード型 分離型
  16. パケット処理の機能ブロック(ハイレベルアーキテクチャ) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc 目的毎のトレードオフにより様々な構成があるが、機能ブロックとしては共通 マネジメントプレーン コントロールプレーン データプレーン (*) 先行ユーザーへの限定提供(2025-06-04 現在) Switch ASIC (NPU) ASIC CPU ソフトウェア データプレーン CPU DPDK Kernel Network Stack SmartNIC (DPU) DPU DPU CPU CPU OVS SONiC / FRR ArcOS(*) DOCA App ArcOS(*) オフロード型 分離型 ArcOS SONiC OVS FRR ArcOS NVIDIA BF3 Broadcom TH5
  17. SAI による Switch ASIC 実装の抽象化 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer

    Night #1| 海老澤健太郎 Arrcus, Inc 実践 SONiC入門 | 第9章 SAI 詳細解説 [API・オブジェクト・データプレーンパイプライン] 実際には複数のテーブルに分散保持 • スケーラビリティの向上 • Lookup速度(遅延)とスケールのトレードオフ • ECMPなどの実現 SAI を利用する事により、Switch ASIC が変わっても 同じAPI (SAI) でプログラム可能 【引用】 実践 SONiC入門 | 第9章 SAI 詳細解説 [API・オブジェクト・データプレーンパイプライン]
  18. データプレーンの比較 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc Switch ASIC (*) DPU (DOCA) CPU Fixed Programmable DPDK Linux Kernel アーキテクチャ (処理ブロックの順番や制約) 選択不可 選択不可 (可能な場合もほぼ同じ) 選択可能 (VNF, Switch mode) n/a n/a パイプライン プログラミング • 不要 • DSL(P4) • 制約が多いが簡単 • ハードウェア制約を強く 意識する必要がある • C/C++ • 柔軟なプログラミング • アーキテクチャ理解の学 習ハードル高い • ハードウェア制約を意識 する必要がある • C/C++ • 柔軟なプログラミング • C/C++ • 柔軟なプログラミング • スタック全体理解の学習ハー ドル高い • Upstreamは苦労する(かも) テーブル プログラミング SAI や ASIC SDK (API) を用いたプログラミング APIはパイプラインから 半自動生成(P4Runtime) DOCA Flow (API) を 用いたプログラミング n/a n/a 柔軟性 × △ ◯ ◎ ◎ 転送性能 ◎ ◎ ◯ △ × 消費電力(性能比) ◎ ◎ ◯ × × 遅延・ジッター ◎ ◎ ◯ △ × (*) 近年はFixed / Programmable の境界がグレーになっている
  19. Intel Infrastructure Processing Unit (IPU) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer

    Night #1| 海老澤健太郎 Arrcus, Inc https://www.intel.com/content/www/us/en/products/details/network-io/ipu.html ※ Intel は専用ASICとFPGAどちらも “IPU” と呼称 P4 Programmable
  20. Marvell OCTEON Data Processing Units (DPU) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network

    Developer Night #1| 海老澤健太郎 Arrcus, Inc https://www.marvell.com/products/data-processing-units.html Marvell OCTEON TX2 (CN92XX, CN96XX and CN98XX) Marvell OCTEON 10 DPU Platform
  21. AMD Pensando ~ DPU and SmartNIC データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network

    Developer Night #1| 海老澤健太郎 Arrcus, Inc Pollara 400 Adapters Salina DPU https://www.amd.com/en/products/accelerators/pensando.html P4 Programmable
  22. データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc

    DOCA • DPU向けソフトウェア開発キット(SDK) • ライブラリ、ドライバ、サービス機能 • DPU上の ARM Core (OS: Ubuntu) で動作 • アプリも ARM Core で動作(ホストで動作も可能) Data Center-on-a-Chip Architecture https://docs.nvidia.com/doca/sdk/nvidia+doca+overview/index.html
  23. DOCA Flow : パケット処理パイプライン プログラミング ライブラリ データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network

    Developer Night #1| 海老澤健太郎 Arrcus, Inc DOCA Flow Architecture • マッチアクションテーブルを定義 => Flow PIPE (P4 table) • Flow PIPE を組み合わせパケット処理をプログラミング (P4 control) • データプレーンで処理できないパケットはCPUに転送して処理可能 (SW Exception Handling) DOCA Flow の図や解説は、他に明示されていない場合は以下から引用 ”NVIDIA Docs Hub NVIDIA Networking BlueField DPUs / SuperNICs & DOCA DOCA Documentation v2.8.0 DOCA Flow” https://docs.nvidia.com/doca/sdk/doca+flow/index.html
  24. Flow PIPE の構成 (MAT: Match Action Table) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る |

    Network Developer Night #1| 海老澤健太郎 Arrcus, Inc 1. Match:マッチフィールド 2. Monitor (MON):ミラー、メーター 、カウンター 3. Modify (MOD):フィールドの変更 4. Forward (FWD) :次の PIPE や転送先を指定 “DOCA Documentation v2.8.0 > DOCA Flow: Create Pipe and Pipe Entry” https://docs.nvidia.com/doca/sdk/doca+flow/index.html#src-2815015295_id-.DOCAFlowv2.8.0-CreatePipeandPipeEntry
  25. BlueFieldのデータプレーンプログラミング手法 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc DOCA Flow • 直接DPUをプログラミング • ARPやルーティングプロトコルなど、コン トロールプレーン処理が必要なパケットは RSSパイプ経由でCPUに渡す。 DPU Pipe#0 Pipe#1 Pipe#n Software (CPU) DOCA App (ArcOS) OpenVSwitch (OVS) Offload • OpenFlow Switch パイプラインをプログラム • OVSの処理がDPUにオフロードされる • DPUに無いエントリはControl Planeに転送 • 3rd Party アプリをプラグイン可能 DPU OVS Flow Cache Software (CPU) ArcOS Table#0 Table#1 Table#n OVS
  26. DOCA HBN (host-based networking) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night

    #1| 海老澤健太郎 Arrcus, Inc NGC Catalog: Containers > DOCA HBN https://catalog.ngc.nvidia.com/orgs/nvidia/teams/doca/containers/doca_hbn 参考
  27. DOCA Platform Framework (DPF) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night

    #1| 海老澤健太郎 Arrcus, Inc https://github.com/NVIDIA/doca-platform/blob/release-v25.4/docs/public/developer-guides/integration.md Jan 13, 2025 @ NVIDIA Tech Blog “Powering the Next Wave of DPU-Accelerated Cloud Infrastructures with NVIDIA DOCA Platform Framework” https://developer.nvidia.com/blog/powering-the-next-wave-of-dpu-accelerated-cloud-infrastructures- with-nvidia-doca-platform-framework/ OVS-DOCA serves as the core networking stack within DPF, facilitating secure, high-performance network connectivity for BlueField-accelerated applications. It provides advanced networking functions and efficient traffic routing within Kubernetes environments, ensuring that BlueField resources can be fully utilized without compromising on performance or security. This foundation enables developers to build high-throughput, latency-sensitive applications with ease. 参考
  28. DOCA Flow:パケット処理パイプラインのプログラミング手順 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎

    Arrcus, Inc PIPEパラメータの定義 • マッチフィールドの定義 • アクションの定義 PIPEの作成 PIPEエントリーの追加 PIPEエントリーの追加 table • key • actions control P4の場合 p4runtime ビルドタイム ランタイム DOCAライブラリ (C言語API)を利用 複数個のPIPEを作成し パイプラインを構成
  29. DOCAライブラリ(C言語API) doca_flow.h 入手方法 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1|

    海老澤健太郎 Arrcus, Inc NVIDIA Docs Hub > NVIDIA Networking > BlueField DPUs / SuperNICs & DOCA > DOCA Documentation v2.8.0 > NVIDIA DOCA Installation Guide for Linux https://docs.nvidia.com/doca/sdk/nvidia+doca+installation+guide+for+linux/index.html# src-2924758623_id-.NVIDIADOCAInstallationGuideforLinuxv2.8.0-InstallationFiles 1. doca-host_*.deb パッケージをダウンロード
  30. doca_flow.h 入手方法 (インストールしない場合) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1|

    海老澤健太郎 Arrcus, Inc 1. doca-host_*.deb パッケージをダウンロード doca$ wget https://developer.nvidia.com/downloads/networking/secure/doca-sdk/DOCA_2.8/doca-host_2.8.0-204000-24.07-ubuntu2204_amd64.deb 2. doca-host_*.deb を展開 doca$ mkdir tmp doca$ dpkg -x doca-host_2.8.0-204000-24.07-ubuntu2204_amd64.deb tmp/ 3. libdoca-sdk-flow-dev_*.deb パッケージを展開 doca$ dpkg -c doca-host_2.8.0-204000-24.07-ubuntu2204_amd64.deb | grep flow -rw-r--r-- root/root 433310 2024-08-12 02:21 ./usr/share/doca-host-2.8.0-204000-24.07-ubuntu2204/repo/pool/doca-sdk-flow_2.8.0082-1_amd64.deb -rw-r--r-- root/root 638942 2024-08-12 02:21 ./usr/share/doca-host-2.8.0-204000-24.07-ubuntu2204/repo/pool/libdoca-sdk-flow-dev_2.8.0082-1_amd64.deb -rw-r--r-- root/root 805038 2024-08-12 02:21 ./usr/share/doca-host-2.8.0-204000-24.07-ubuntu2204/repo/pool/libdoca-sdk-flow-trace_2.8.0082-1_amd64.deb doca$ cd tmp doca/tmp$ mkdir libdoca-sdk-flow-dev_2.8.0082-1_amd64 doca/tmp$ dpkg -x ./usr/share/doca-host-2.8.0-204000-24.07-ubuntu2204/repo/pool/libdoca-sdk-flow-dev_2.8.0082-1_amd64.deb \ libdoca-sdk-flow-dev_2.8.0082-1_amd64/ 3. doca_flow.h を見つける(find) doca/tmp$ cd libdoca-sdk-flow-dev_2.8.0082-1_amd64/ doca/tmp/libdoca-sdk-flow-dev_2.8.0082-1_amd64$ find . -name doca_flow.h ./opt/mellanox/doca/include/doca_flow.h
  31. Flow PIPEの作成:マッチフィールドの定義 (P4の Table key) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer

    Night #1| 海老澤健太郎 Arrcus, Inc マッチやアクションのフィールド定義は、値+マスクで設定 Match Type 意味 設定例 (Explicit Match) Ignore 評価しない // ignore this field match_mask.inner.ip4.dst_ip = 0; Constant 全てのエントリで同じ値にマッチ // match with 1.2.0.0/24 match.inner.ip4.dst_ip = BE_IPV4_ADDR(1, 2, 0, 0); match_mask.inner.ip4.dst_ip = BE_IPV4_ADDR(255, 255, 0, 0); Changeable エントリ毎にマッチする値を設定 match.inner.ip4.dst_ip = 0xffff; match_mask.inner.ip4.dst_ip = 0xffff;
  32. doca_flow_match 構造体 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎

    Arrcus, Inc struct doca_flow_match { uint32_t flags; /**< match items which are no value */ struct doca_flow_meta meta; /**< Programmable meta data. */ struct doca_flow_parser_meta parser_meta; /**< Read-only meta data. */ struct doca_flow_header_format outer; /**< outer layer header format */ struct doca_flow_tun tun; /**< tunnel info */ struct doca_flow_header_format inner; /**< inner layer header format */ }; struct doca_flow_header_format { struct doca_flow_header_eth eth; /**< ether head */ uint16_t l2_valid_headers; /**< indicate which headers are valid */ struct doca_flow_header_eth_vlan eth_vlan[DOCA_FLOW_VLAN_MAX]; /**< vlan header array*/ enum doca_flow_l3_type l3_type; /**< layer 3 protocol type */ union { struct doca_flow_header_ip4 ip4; /**< ipv4 head */ struct doca_flow_header_ip6 ip6; /**< ipv6 head */ }; enum doca_flow_l4_type_ext l4_type_ext; /**< l4 layer extend type */ union { struct doca_flow_header_icmp icmp; /**< icmp header */ struct doca_flow_header_udp udp; /**< udp header */ struct doca_flow_header_tcp tcp; /**< tcp header */ struct doca_flow_header_l4_port transport; /**< transport layer source and destination port */ }; };
  33. 利用可能なアクション & doca_flow_actions 構造体 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night

    #1| 海老澤健太郎 Arrcus, Inc struct doca_flow_actions { uint8_t action_idx; /**< index according to place provided on creation */ uint32_t flags; /**< action flags */ enum doca_flow_resource_type decap_type; /**< type of decap */ union { struct doca_flow_resource_decap_cfg decap_cfg; /**< config for non_shared decap */ uint32_t shared_decap_id; /**< action for shared decap */ }; bool pop; /**< when true, pop header */ struct doca_flow_meta meta; /**< modify meta data, pipe action as mask */ struct doca_flow_parser_meta parser_meta; /**< copy from read-only meta data, pipe action as mask */ struct doca_flow_header_format outer; /**< modify outer headers */ struct doca_flow_tun tun; /**< modify tunnel headers*/ enum doca_flow_resource_type encap_type; /**< type of encap */ union { struct doca_flow_resource_encap_cfg encap_cfg; /**< config for non_shared encap */ uint32_t shared_encap_id; /**< action for shared encap */ }; bool has_push; /**< when true, push header */ struct doca_flow_push_action push; /**< push header data information */ struct doca_flow_nat64_action nat64; /**< nat64 action */ bool has_crypto_encap; /**< when true, do crypto reformat header/trailer */ struct doca_flow_crypto_encap_action crypto_encap; /**< header/trailer reformat data information */ struct doca_flow_crypto_action crypto; /**< crypto action information */ }; 利用可能なアクション • ヘッダやメタデータの変更 • ヘッダの decap/encap • nat64、暗号化、等 Action 適用順序 1. Crypto (decryption) 2. Decapsulation 3. Pop 4. Meta 5. Outer 6. Tun 7. Push 8. Encapsulation 9. Crypto (encryption)
  34. アクション設定の例 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc struct doca_flow_actions meta_action; struct doca_flow_actions nat_action; struct doca_flow_actions meta_action_mask; struct doca_flow_actions nat_action_mask; struct doca_flow_actions *actions_list[] = {&meta_action, &nat_action}; struct doca_flow_actions *actions_mask_list[] = {&meta_action_mask, &nat_action_mask}; nat_action.action_idx = 1; nat_action.outer.l3_type = DOCA_FLOW_L3_TYPE_IP4; nat_action.outer.ip4.src_ip = UINT32_MAX; nat_action.outer.ip4.dst_ip = UINT32_MAX; nat_action.outer.l4_type_ext = DOCA_FLOW_L4_TYPE_EXT_TCP; nat_action.outer.transport.src_port = UINT16_MAX; nat_action.outer.transport.dst_port = UINT16_MAX; nat_action_mask.action_idx = 1; nat_action_mask.outer.l3_type = DOCA_FLOW_L3_TYPE_IP4; nat_action_mask.outer.ip4.src_ip = UINT32_MAX; nat_action_mask.outer.ip4.dst_ip = UINT32_MAX; nat_action_mask.outer.l4_type_ext = DOCA_FLOW_L4_TYPE_EXT_TCP; nat_action_mask.outer.transport.src_port = UINT16_MAX; nat_action_mask.outer.transport.dst_port = UINT16_MAX; meta_action.action_idx = 0; meta_action.meta.pkt_meta = UINT32_MAX; meta_action.meta.u32[0] = UINT32_MAX; meta_action_mask.action_idx = 0; meta_action_mask.meta.pkt_meta = 0xffff; meta_action_mask.meta.u32[0] = 0xffff; value = 0xffff, mask = 0xffff エントリ毎にセットする値を指定可能 詳細は “Summary of Action Types” を参照 https://docs.nvidia.com/doca/sdk/doca+flow/index.html#src-2815015295_id- .DOCAFlowv2.8.0-SummaryofActionTypesSummaryofActionTypes P4の例 action set_src_port(bit<16> port) { hdr.tcp.src_port = port; }
  35. Summary of Action Types データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night

    #1| 海老澤健太郎 Arrcus, Inc https://docs.nvidia.com/doca/sdk/doca+flow/index.html#src-2815015295_id-.DOCAFlowv2.8.0-SummaryofActionTypesSummaryofActionTypes
  36. FWD (Forward) :次の PIPE や転送先を指定 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer

    Night #1| 海老澤健太郎 Arrcus, Inc Pipe Forwarding • Send to wire • Send to software (representor) • Jump to next pipe • Drop packets https://docs.nvidia.com/doca/sdk/doca+flow/index.html#src-2815015295_id-.DOCAFlowv2.8.0-SettingPipeForwarding struct doca_flow_fwd *fwd = \ malloc(sizeof(struct doca_flow_fwd)); memset(fwd, 0, sizeof(struct doca_flow_fwd)); fwd->type = DOCA_FLOW_FWD_PORT; fwd->port_id = port_id; fwd->type = DOCA_FLOW_FWD_RSS; fwd->rss_queues = queues; fwd->rss_flags = DOCA_FLOW_RSS_IP | DOCA_FLOW_RSS_UDP; fwd->num_of_queues = 4; Send to wire Send to software (representor / RSS Queue) enum doca_flow_fwd_type { DOCA_FLOW_FWD_NONE = 0, DOCA_FLOW_FWD_RSS, DOCA_FLOW_FWD_PORT, DOCA_FLOW_FWD_PIPE, DOCA_FLOW_FWD_DROP, DOCA_FLOW_FWD_TARGET, DOCA_FLOW_FWD_ORDERED_LIST_PIPE, DOCA_FLOW_FWD_CHANGEABLE, }; PIPE全体、エントリ毎、どちらでも設定可能
  37. 5 Tuple マッチのパイプライン(例) データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1|

    海老澤健太郎 Arrcus, Inc match.parser_meta.outer_l4_type = DOCA_FLOW_L4_META_TCP; match.parser_meta.outer_l3_type = DOCA_FLOW_L3_META_IPV4; match.outer.l4_type_ext = DOCA_FLOW_L4_TYPE_EXT_TCP; match.outer.l3_type = DOCA_FLOW_L3_TYPE_IP4; /* Source, destination IP addresses and source, destination TCP ports are defined per entry */ match.outer.ip4.dst_ip = 0xffffffff; match.outer.tcp.l4_port.src_port = 0xffff; match.outer.tcp.l4_port.dst_port = 0xffff; fwd.type = DOCA_FLOW_FWD_PORT; /* Port ID to forward to is defined per entry */ fwd.port_id = 0xffff; monitor.counter_type = DOCA_FLOW_RESOURCE_TYPE_NON_SHARED; result = doca_flow_pipe_cfg_create(&pipe_cfg, sw_port); if (result != DOCA_SUCCESS) { DOCA_LOG_ERR("Failed to create doca_flow_pipe_cfg: %s", doca_error_get_descr(result)); return result; } result = doca_flow_pipe_cfg_set_match(pipe_cfg, &match, NULL); if (result != DOCA_SUCCESS) { DOCA_LOG_ERR("Failed to set doca_flow_pipe_cfg match: %s", doca_error_get_descr(result)); goto destroy_pipe_cfg; } result = doca_flow_pipe_cfg_set_monitor(pipe_cfg, &monitor); if (result != DOCA_SUCCESS) { DOCA_LOG_ERR("Failed to set doca_flow_pipe_cfg monitor: %s", doca_error_get_descr(result)); goto destroy_pipe_cfg; } result = doca_flow_pipe_create(pipe_cfg, &fwd, NULL, pipe); samples/doca_flow/flow_switch_to_wire/flow_switch_to_wire_sample.c マッチフィールドの設定 (エントリ毎に 5 Tuple を指定) 転送先の設定(エントリ毎に指定) カウンタの設定
  38. ユースケースに合わせたデータプレーンを選択可能!😀 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus,

    Inc Switch ASIC (P4) ASIC (SAI) DPU (DOCA Flow) Pros • P4言語で直感的なプログラミング • 早い&安い(価格性能比) • アーキテクチャーがシンプル • 性能へのインパクトが明確 • ネットワークエンジニアは入門し やすい • パイプラインはプログラム不要 • 早い&安い(価格性能比) • C/C++ APIを叩くだけ • 性能へのインパクトが明確 • C/C++プログラミング • ホスト(VMやコンテナ)と密に 連携したパケット処理が可能 • 複雑なことはDPDKにディスパ ッチ可能(性能差的に) • プログラマーは入門しやすい Cons • 大規模なパイプラインや複雑なア クションの場合、ハードウェアリ ソースの配置など、内部を理解し ていないとコンパイルできない • ハードウェアの選択肢が限られて いる(実質Xsightのみ?) • ASICがサポートしていない機能 は動作しない(ハード交換) • SAIの機能追加要求は結構大変 • (Azure, Alibaba よりも優先度高 い要求であることを示すが、賛同も らって一緒に提案) • モード毎の制約がわかりにくい • プログラム量が多い • パイプ追加時の性能へのインパ クトが不明確 どれを選んでも適用できないユースケースがあるので、全部学習する羽目に!? 😭
  39. 【難しいポイント】 変更にはパイプライン全体の理解が必要 データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎

    Arrcus, Inc IP LPM -> ID_A ID_A -> dst port/mac ID_A -> Tunnel Encap !! ID_A => ID_B に変更が必要だった !! 機能増加 => 違いに依存するテーブルやメタデータの増加 => 変更による意図しない動作(バグ)の確率が増加 • SAIは抽象化が進んでいて OVSやDOCA Flow よりマシ • 直感的にわかるテーブル(パイプ)やメタデータの銘々規則が重要 • コード生成フレームワーク(例: YAML => DOCA Flow) ECMP を追加 ID_A -> ID_B ID_B -> dst port/mac
  40. 【難しいポイント】 知識の幅広さ、テスト&デバッグ • ハードウェア+ソフトウェアの幅広い理解が必要 • ターゲット毎の制約の理解に必要な時間がプログラミングしている時間より長い • リソースやマッチ・アクション、Jump可能なテーブル • Switch

    ASIC やDPUアーキテクチャー毎の専門用語多数 • FPGAの初歩知識があると助かる • ドキュメントに制約やバグの存在や回避方法が書いてあっても読み切れない • AIに期待(Broadcomドキュメント学習させたい) • テスト&デバッグ • Switch ASICもDPUも中身はBlack Box • 最後はパケット流してテストするしかない • Tofino + P4 はシミュレーターで中身を見ながら動作できて良かった データプレーンプログラミングとは? DPU&スイッチASICの開発経験から語る | Network Developer Night #1| 海老澤健太郎 Arrcus, Inc But … アプリをプログラムするよりは(プログラミングとしては)簡単!?