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

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

実践的!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 Who I am 写真 Ryuji NISHIDA 西田

    竜之 ソリューション第四事業部  シニアエンジニア
  2. Copyright© Fixstars Group 自己紹介 • 西田竜之 ◦ FPGAを用いたシステム開発に従事 ◦ ハードウェア開発をメインに担当

    ◦ 略歴 ▪ 半導体ベンダ • サーバー向けASIC開発 ▪ 映像事務機メーカー • 高画質エンジンLSI 映像機器向けFPGA開発 ▪ フィックスターズ • FPGAを用いた高速取引金融システム • OpenCLによるアプリの高速化
  3. 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
  4. Copyright© Fixstars Group 本日のAgenda 1. SmartNICとは 2. Intel® Agilex™ ボードを

    SmartNIC 化 3. AMD Xilinx Alveo U250 ボードを SmartNIC 化
  5. Copyright© Fixstars Group SmartNIC とは • SmartNIC (Smart Network Interface

    Card) ◦ CPU 負荷のかかるネットワーク処理を NIC にオフロードする ▪ フィルタリング、暗号化、etc. ◦ FPGA の特徴を有効的に使える 2019 Xilinx DataCenter Summit 発表資料抜粋
  6. 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
  7. 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 コアが直接低レイヤの処理をする
  8. 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 オープンソースで提供されている プラットフォームを利用して試行
  9. 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 ボードにポーティングする
  10. Copyright© Fixstars Group Intel® Agilex™ ボードを SmartNIC 化 • Corundum:

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

    An Open-Source 100-Gbps NIC ◦ ドライバビルド $ cd corundum/modules/mqnic $ make $ sudo insmod mqnic.ko ▪ Ubuntu で問題なくビルドできた (CentOS は未対応だった)
  13. 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 品ボードの初期不良の疑いがあり、   ボード返却と動作確認が必要とのこと)   ⇒ 今回は断念
  14. Copyright© Fixstars Group • ここまでのまとめ ◦ SmartNIC の紹介 ◦ オープンソースの

    FPGA NIC 化プラットフォーム Corundum の紹介 ◦ Intel® Agilex™ ボード実行トライアル ▪ 合成、ビルドは完了 ▪ 実機確認でエラー Intel® Agilex™ ボードを SmartNIC 化
  15. Copyright© Fixstars Group Who I am Takashi UCHIDA 内田 崇

    ソリューション第四事業部  エンジニア
  16. Copyright© Fixstars Group open-nicとは? • AMD Xilinxから出ているFPGA designおよびdriver • open

    source • 内部ロジックをカスタムで追加可能(今回は未実施)
  17. 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(今回は未使用)
  18. Copyright© Fixstars Group open-nic-shell • FPGA design • Vivado version

    2020.x、2021.xに対応 • 以下のboardに対応 Xilinx Alveo U50, U55N, U200, U250, U280
  19. 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から抜粋)
  20. 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から抜粋)
  21. 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から抜粋)
  22. 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 を設定
  23. 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から抜粋)
  24. 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で動作確認した
  25. Copyright© Fixstars Group open-nicビルド手順 • open-nic repositoryのscriptディレクトリ内で以下を実行する ./checkout.sh . •

    これによりopen-nic-shellとopen-nic-driverのrepositoryがscriptフォルダ内にcloneされる
  26. Copyright© Fixstars Group open-nic-shell 合成手順(1) 注意) cmacの合成にはlicense(無料)が必要なので事前に取得/設定しておく必要がある • open-nicで使用するboardの種類などのoptionを指定して、<open-nic-shell repository

    TOP>/scriptにあるbuild.tclを実行 例) alveo u250を指定する場合 $ vivado -mode batch -source ./build.tcl -tclargs -board au250 • open-nicで指定されているrepositoryの構成だとvivadoのversionが2020.2で固定されており変 更する必要があるので注意 • スクリプト実行完了後手動でGUIを立ち上げbitstreamを作成する
  27. 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 }
  28. Copyright© Fixstars Group open-nic-shell 合成手順(2) build実行時のoptionを一部抜粋する。 • -user_plugin <PATH> ◦

    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)
  29. 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
  30. 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
  31. 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ケーブル
  32. 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が動作することが確認できた。
  33. 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より抜粋)