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

実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222

実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222

2023年2月22日に開催した、「実践的!FPGA開発セミナーvol.19」の当日資料です。

More Decks by 株式会社フィックスターズ

Other Decks in Programming

Transcript

  1. Copyright© Fixstars Group
    実践的!FPGA開発セミナー
    vol.19
    2023/02/22 18:00~

    View Slide

  2. Copyright© Fixstars Group
    オープンソースで
    FPGA ボードを
    SmartNIC 化!

    View Slide

  3. Copyright© Fixstars Group
    Who I am
    写真
    Ryuji
    NISHIDA
    西田 竜之
    ソリューション第四事業部 
    シニアエンジニア

    View Slide

  4. Copyright© Fixstars Group
    自己紹介
    ● 西田竜之
    ○ FPGAを用いたシステム開発に従事
    ○ ハードウェア開発をメインに担当
    ○ 略歴
    ■ 半導体ベンダ
    ● サーバー向けASIC開発
    ■ 映像事務機メーカー
    ● 高画質エンジンLSI 映像機器向けFPGA開発
    ■ フィックスターズ
    ● FPGAを用いた高速取引金融システム
    ● OpenCLによるアプリの高速化

    View Slide

  5. Copyright© Fixstars Group
    本題の前に・・・
    ● 実践的!FPGA 開発セミナー vol.15
    「続 Intel® Agilex™ 開発キットを用いた各種機能トライアル」
    ■ HPS (ARMコア) 上での Linux 起動を紹介
    ● インテル® FPGA Advent Calendar 2022 に投稿 ⇒
    ● プレゼント対象(4 名)に選んで頂きました!
    ○ 年末、投稿してみてはいかがでしょうか?
    参照URL
    https://qiita.com/ryujinishida/items/be74f4a91231886cedc1
    参照URL
    https://blog.qiita.com/adventcalendar-2022-presents-winners/ ・プレゼント品 Air Pods Pro

    View Slide

  6. Copyright© Fixstars Group
    本日のAgenda
    1. SmartNICとは
    2. Intel® Agilex™ ボードを SmartNIC 化
    3. AMD Xilinx Alveo U250 ボードを SmartNIC 化

    View Slide

  7. Copyright© Fixstars Group
    SmartNIC とは
    ● SmartNIC (Smart Network Interface Card)
    ○ CPU 負荷のかかるネットワーク処理を NIC にオフロードする
    ■ フィルタリング、暗号化、etc.
    ○ FPGA の特徴を有効的に使える
    2019 Xilinx DataCenter Summit
    発表資料抜粋

    View Slide

  8. Copyright© Fixstars Group
    SmartNIC とは
    ● SmartNIC 的なアプリケーション例
    2019 Xilinx DataCenter Summit
    発表資料抜粋

    View Slide

  9. Copyright© Fixstars Group
    SmartNIC とは
    ● SmartNIC 製品例
    ○ AMD Xilinx
    ■ ALVEO™ SMARTRNIC
    ○ Intel®FPGA
    ■ SmartNIC N6000-PL
    参照URL
    https://japan.xilinx.com/applications/data-center/network-acceleration.html#smartnics
    参照URL
    https://www.intel.co.jp/content/www/jp/ja/products/details/fpga/platforms/smartnic/n6000-pl-platform.html

    View Slide

  10. Copyright© Fixstars Group
    SmartNIC とは
    ● その他(参考)
    ○ P4 言語 https://p4.org/
    ■ Programming Protocol-independent Packet Processors
    ■ データプレーンデバイス (NIC、スイッチ、ルーターなど) の
    パケット処理をプログラミングするドメイン固有言語
    ■ ネットワーク用プロセッサ(ASIC, CPU)の制御に使用される
    ■ FPGA 製品でも P4 言語対応のものが多い
    ○ DPDK https://www.dpdk.org/
    ■ The Data Plane Development Kit
    ■ 高速パケット処理用のライブラリ、ドライバ
    ■ カーネル機能をバイパスして CPU コアが直接低レイヤの処理をする

    View Slide

  11. Copyright© Fixstars Group
    Intel® Agilex™ ボードを SmartNIC 化
    ● 実行環境
    ○ ホスト
    ■ OS:Ubuntu 18.04LTS
    ○ 使用 Agilex™ ボード
    ■ ES 品
    ■ QSFP-DD x 2
    ■ PCIe I/F
    ※ ES 品のため Gen4 未対応
        NIC 化の I/F はそろっている
    ● SmartNIC として使うために・・・
    ○ PCIe ⇔ Ethernet FPGA デザイン
    ○ Linux ドライバ
    参照URL:
    https://www.intel.com/content/www/us/en/products/details/fpga/development-
    kits/agilex/f-series.html
    オープンソースで提供されている
    プラットフォームを利用して試行

    View Slide

  12. Copyright© Fixstars Group
    Intel® Agilex™ ボードを SmartNIC 化
    ● Corundum: An Open-Source 100-Gbps NIC
    ○ https://github.com/corundum/corundum
    参照URL: https://cseweb.ucsd.edu//~snoeren/papers/corundum-fccm20.pdf
    参照URL: https://docs.corundum.io/en/latest/index.html
    ■ サポートボードリスト
    Intel®FPGA
    ボード
    対象のAgilex ボードにポーティングする

    View Slide

  13. Copyright© Fixstars Group
    Intel® Agilex™ ボードを SmartNIC 化
    ● Corundum: An Open-Source 100-Gbps NIC
    ○ 構成
    ■ P-Tile PCIe IP (Gen3) はストリーム入出力
    ■ App にユーザーアプリケーションを実装する デザインは RTL (verilog)
    ■ Linuxドライバも同梱されている

    View Slide

  14. Copyright© Fixstars Group
    ● Corundum: An Open-Source 100-Gbps NIC
    ○ Quartus Prime 22.3 を使用
    ○ ハードウェア構築
    $ git clone https://github.com/corundum/corundum.git
    $ cd corundum/fpga/mqnic/DE10_Agilex/fpga_100g/fpga_24AR0
    $ make
    ■ Quarutus プロジェクトが生成される
    ※ 実際には make がエラー返り値をうけて
      途中停止するため、make を複数回実行
    ■ ピン配置、PWRMGT 設定をポーティング対象の
    ボードに合わせて修正
    ■ Quarutus を起動、合成を実行
    Intel® Agilex™ ボードを SmartNIC 化

    View Slide

  15. Copyright© Fixstars Group
    Intel® Agilex™ ボードを SmartNIC 化
    ● Corundum: An Open-Source 100-Gbps NIC
    ○ ドライバビルド
    $ cd corundum/modules/mqnic
    $ make
    $ sudo insmod mqnic.ko
    ■ Ubuntu で問題なくビルドできた (CentOS は未対応だった)

    View Slide

  16. Copyright© Fixstars Group
    ● Corundum: An Open-Source 100-Gbps NIC
    ○ 実機確認 ⇒ 失敗
    ■ .sof をコンフィグレーション & reboot
    ■ lspci コマンドで PCI デバイスを確認 ⇒ 認識せず・・・
    ○ デバッグ
    ■ P-Tile Debug tool Kit
    Intel® Agilex™ ボードを SmartNIC 化
    ■ PLL もロックせず
      全く動いていない・・
    ■ クロック、リセット、ボード設定
      を確認 ⇒ 問題なし
    (※ Intel 社に確認したところ、
      ES 品ボードの初期不良の疑いがあり、
      ボード返却と動作確認が必要とのこと)
      ⇒ 今回は断念

    View Slide

  17. Copyright© Fixstars Group
    ● ここまでのまとめ
    ○ SmartNIC の紹介
    ○ オープンソースの FPGA NIC 化プラットフォーム Corundum の紹介
    ○ Intel® Agilex™ ボード実行トライアル
    ■ 合成、ビルドは完了
    ■ 実機確認でエラー
    Intel® Agilex™ ボードを SmartNIC 化

    View Slide

  18. Copyright© Fixstars Group
    Who I am
    Takashi
    UCHIDA
    内田 崇
    ソリューション第四事業部 
    エンジニア

    View Slide

  19. Copyright© Fixstars Group
    open-nicとは?
    ● AMD Xilinxから出ているFPGA designおよびdriver
    ● open source
    ● 内部ロジックをカスタムで追加可能(今回は未実施)

    View Slide

  20. Copyright© Fixstars Group
    open-nicの構成
    open-nicは以下3つのrepositoryから構成される。
    ● open-nic-shell
    FPGA designのrepository
    ● open-nic-driver
    FPGAをHOSTから制御するためのdriverのrepository
    ● open-nic-dpdk
    dpdkを使用したdriver(今回は未使用)

    View Slide

  21. Copyright© Fixstars Group
    open-nic-shell
    ● FPGA design
    ● Vivado version 2020.x、2021.xに対応
    ● 以下のboardに対応
    Xilinx Alveo U50, U55N, U200, U250, U280

    View Slide

  22. Copyright© Fixstars Group
    open-nic-shell design 概要(1)
    ● HOST - FPGA間の通信はopen-nic-driverを
    使用してPCIe経由でQDMAで行われる
    ● QSFPの制御はCMAC IPが使用されている
    ● ユーザーロジックを追加できる領域は2箇所
    (左図の灰色部)
    ● CMACのポート数やQDMAのphysical
    functionの実装数などをパラメータ設定可

    ● 今回の動作確認ではデフォルトで実行
    FPGA design 全体図
    (githubのREADMEから抜粋)

    View Slide

  23. Copyright© Fixstars Group
    open-nic-shell design 概要(2)
    ● QDMA subsystem
    ● ザイリンクスのQDMA IPと、QDMA IPインター
    フェースと250MHzユーザーロジックボックスの橋渡
    しをするRTLロジックが含まれる
    ● QDMAサブシステムと250MHzボックス間のインター
    フェースは、AXI4-streamプロトコルの変種を使用し
    ている
    ● CMAC subsystem
    ● ザイリンクスのCMAC IPといくつかのラッパーロジッ
    クが含まれる
    ● 1または2のCMACポートをサポートする2つのCMAC
    ポートの場合、専用のデータおよび制御インターフェ
    イスを持つCMACサブシステムのインスタンスが2つ
    存在する
    ● CMACサブシステムは322MHzで動作し、
    AXI4-streamプロトコルの変種を使用して322MHzの
    ユーザーロジックボックスに接続する
    FPGA design 全体図
    (githubのREADMEから抜粋)

    View Slide

  24. Copyright© Fixstars Group
    open-nic-shell design 概要(3)
    ● packet adapter
    ● 250MHz AXI-streamと322MHz AXI-stream間の変換
    に使用される
    ● TXパスとRXパスの両方で、パケットモードFIFOとして
    機能し、送出前にパケット全体をバッファリングする
    ● RXパスでは、CMACサブシステムインタフェースで欠
    落しているバックプレッシャー機能を回復する
    ● system configuration
    ○ リセット機構を実装し、各コンポーネントのレジスタア
    ドレスを割り当てている
    ○ レジスタインタフェースはAXI4-liteプロトコルを使用
    し、250MHzのクロックと位相が揃った125MHzで動作
    する
    FPGA design 全体図
    (githubのREADMEから抜粋)

    View Slide

  25. Copyright© Fixstars Group
    open-nic-shell design 概要(4)
    ユーザーロジックのinterfaceは基本的にAXI4-streamだが、一部特殊
    なデータが付随する。
    250MHzのインターフェース(AXI4-streamベース)
    ● tvalid(1bit)
    ● tdata(512 bits)
    ● tkeep(64 bits)
    ● tlast(1 bit)
    ● tready(1 bit)
    ● tuser_size(16 bits):packet size(byte単位)
    ● tuser_src(16 bits)
    ● tuser_dst(16 bits)
    ○ MAC ports = CMACのポート(1 or 2)
    ○ cmac portとphysical functionの判別用
    ○ 例) QDMA -> CMACの場合
    FPGA design 全体図
    (githubのREADMEから抜粋)
    tuser_src, tuser_dstのformat
    (READMEから抜粋)
    src dst
    左赤丸 PCIe PFs 0固定
    右赤丸 左赤丸の設定
    そのまま)
    MAC Ports
    を設定

    View Slide

  26. Copyright© Fixstars Group
    open-nic-shell design 概要(5)
    322MHzのインターフェイスは以下の通り
    ● tvalid(1bit)
    ● tdata(512 bits)
    ● tkeep(64 bits)
    ● tlast(1 bit)
    ● tready(1 bit)
    ● tuser_err:パケットにエラーが発生している場合1
    を設定
    FPGA design 全体図
    (githubのREADMEから抜粋)

    View Slide

  27. Copyright© Fixstars Group
    open-nic-driver
    ● HOSTからPCIe経由でFPGAにデータ転送やregister設定するためのdriver
    ● OSは以下に対応している
    ○ Ubuntu 18.04
    ○ Ubuntu 20.04
    ○ Ubuntu 22.04
    ● open-nicで指定されているrepositoryのコードだと動作しなかった(固まっ
    た)ので今回は最新版(2023/2/21時点)のrepositoryで動作確認した

    View Slide

  28. Copyright© Fixstars Group
    open-nicビルド手順
    ● open-nic repositoryのscriptディレクトリ内で以下を実行する
    ./checkout.sh .
    ● これによりopen-nic-shellとopen-nic-driverのrepositoryがscriptフォルダ内にcloneされる

    View Slide

  29. Copyright© Fixstars Group
    open-nic-shell 合成手順(1)
    注意) cmacの合成にはlicense(無料)が必要なので事前に取得/設定しておく必要がある
    ● open-nicで使用するboardの種類などのoptionを指定して、TOP>/scriptにあるbuild.tclを実行
    例) alveo u250を指定する場合
    $ vivado -mode batch -source ./build.tcl -tclargs -board au250
    ● open-nicで指定されているrepositoryの構成だとvivadoのversionが2020.2で固定されており変
    更する必要があるので注意
    ● スクリプト実行完了後手動でGUIを立ち上げbitstreamを作成する

    View Slide

  30. Copyright© Fixstars Group
    script(build.tcl)修正箇所
    例) vivadoのversionを2021.2にする場合
    53 # Vivado version check
    54 # set VIVADO_VERSION "2020.2"
    55 set VIVADO_VERSION "2021.2"
    56 if {![string equal [version -short] $VIVADO_VERSION]} {
    57 puts "OpenNIC shell requires Vivado version $VIVADO_VERSION"
    58 exit
    59 }

    View Slide

  31. Copyright© Fixstars Group
    open-nic-shell 合成手順(2)
    build実行時のoptionを一部抜粋する。
    ● -user_plugin
    ○ user pluginとしてuser logicをdesignに挿入するためのoption
    ○ user pluginを指定しない場合はdefaultで用意されているlogicが使用される
    ● -num_phys_func
    使用するphysical functionの数を指定する(1 ~ 4、default:1)
    ● -num_queue
    QDMAに使用するqueueの数を指定する(1 ~ 2048、default:512)
    ● -num_cmac_port
    使用するCMAC port数を指定する(1 or 2、default 1)

    View Slide

  32. Copyright© Fixstars Group
    FPGA書き込み
    ● bitファイルを書き込んだ後hot rebootしないとlspciで認識されないので注

    ● lspciでdeviceが以下のように表示されていればOK
    $ lspci | grep Xilinx
    XX:XX.X Memory controller: Xilinx Corporation Device 903f

    View Slide

  33. Copyright© Fixstars Group
    driver実行手順
    ● driverは最新版(2023/2/21時点)のrepositoryを使用すること
    ● repository内でmake後、以下コマンドでkernel moduleをinsertする
    $ sudo insmod onic.ko RS_FEC_ENABLED=1
    ● 実行後、dmesgで確認してエラーがなければ問題なく動作している
    ● 注意点
    1. ひとつ前の手順まで実行しlspciでXilinx deviceが確認できる状態にしてから実行すること
    2. driverをinsert後FPGAを再度書き込む際は以下のコマンドでkernel moduleを取り除いてか
    ら実行すること
    $ sudo rmmod onic.ko

    View Slide

  34. Copyright© Fixstars Group
    (dmsg log 例)
    $ dmsg

    [ 366.528180] onic: loading out-of-tree module taints kernel.
    [ 366.528239] onic: module verification failed: signature and/or required key missing - tainting kernel
    [ 366.528737] OpenNIC Linux Kernel Driver 0.21
    [ 366.528880] onic 0000:01:00.0 onic1s0f0 (uninitialized): Set MAC address to 00:0a:35:82:25:21
    [ 366.528881] onic 0000:01:00.0: device is a master PF
    [ 366.528961] onic 0000:01:00.0: Allocated 8 queue vectors
    [ 366.529001] onic 0000:01:00.0: Number of CMAC instances = 1
    [ 366.529012] onic 0000:01:00.0: Setup IRQ vector 34 with name onic1s0f0-0
    [ 366.529019] onic 0000:01:00.0: Setup IRQ vector 35 with name onic1s0f0-1
    [ 366.529027] onic 0000:01:00.0: Setup IRQ vector 36 with name onic1s0f0-2
    [ 366.529034] onic 0000:01:00.0: Setup IRQ vector 37 with name onic1s0f0-3
    [ 366.529040] onic 0000:01:00.0: Setup IRQ vector 38 with name onic1s0f0-4
    [ 366.529047] onic 0000:01:00.0: Setup IRQ vector 39 with name onic1s0f0-5
    [ 366.529054] onic 0000:01:00.0: Setup IRQ vector 40 with name onic1s0f0-6
    [ 366.529060] onic 0000:01:00.0: Setup IRQ vector 41 with name onic1s0f0-7
    [ 366.589007] onic 0000:01:00.0 enp1s0: renamed from onic1s0f0

    View Slide

  35. Copyright© Fixstars Group
    ● 以下の構成で動作確認を行った
    動作確認環境
    HOST 1
    (Ubuntu 20.04.4 LTS)
    HOST 2
    (Ubuntu 22.04.1 LTS)
    u250
    (192.168.10.1)
    ConnectX-5
    (192.168.10.2)
    100Gbps DACケーブル

    View Slide

  36. Copyright© Fixstars Group
    open-nic動作確認(iperf)結果
    host01(client)
    $ iperf -c 192.168.10.2
    ------------------------------------------------------------
    Client connecting to 192.168.10.2, TCP port 5001
    TCP window size: 4.00 MByte (default)
    ------------------------------------------------------------
    [ 3] local 192.168.10.1 port 57708 connected with
    192.168.10.2 port 5001
    [ ID] Interval Transfer Bandwidth
    [ 3] 0.0-10.0 sec 16.6 GBytes 14.2 Gbits/sec
    host02(server)
    $ iperf -s
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 128 KByte (default)
    ------------------------------------------------------------
    [ 1] local 192.168.10.2 port 5001 connected with
    192.168.10.1 port 57708
    [ ID] Interval Transfer Bandwidth
    [ 1] 0.0000-10.0009 sec 16.6 GBytes 14.2 Gbits/sec
    iperfが動作することが確認できた。

    View Slide

  37. Copyright© Fixstars Group
    まとめ
    ● AMD Xilinxから出ているopen sourceのopen-nicを実際に動かしてみた
    ● 細かな注意点はあるが、比較的簡単にFPGAをNIC化できた

    View Slide

  38. Copyright© Fixstars Group
    (Appendix)

    View Slide

  39. Copyright© Fixstars Group
    QDMA(IP)
    ● QDMA wrapperに相当
    ● MM(memory mapped)とST(stream)の2種類のAXI
    interfaceを使用可能
    ● Physical Functionおよびその周辺の回路はIPに含
    まれていないので準備する必要がある(open-nicの
    designにはRTL(verilog)が含まれている)
    ● 今回のopen-nicではStreamのinterfaceを使用し
    ている
    QDMA wrapper(IP) Architechture
    (PG302より抜粋)

    View Slide

  40. Copyright© Fixstars Group
    QDMA(参考)
    QDMA Architechture (PG302より抜粋)

    View Slide

  41. Copyright © Fixstars Group
    Thank you!
    お問い合わせ窓口 : [email protected]

    View Slide