実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222
by
株式会社フィックスターズ
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Copyright© Fixstars Group 実践的!FPGA開発セミナー vol.19 2023/02/22 18:00~
Slide 2
Slide 2 text
Copyright© Fixstars Group オープンソースで FPGA ボードを SmartNIC 化!
Slide 3
Slide 3 text
Copyright© Fixstars Group Who I am 写真 Ryuji NISHIDA 西田 竜之 ソリューション第四事業部 シニアエンジニア
Slide 4
Slide 4 text
Copyright© Fixstars Group 自己紹介 ● 西田竜之 ○ FPGAを用いたシステム開発に従事 ○ ハードウェア開発をメインに担当 ○ 略歴 ■ 半導体ベンダ ● サーバー向けASIC開発 ■ 映像事務機メーカー ● 高画質エンジンLSI 映像機器向けFPGA開発 ■ フィックスターズ ● FPGAを用いた高速取引金融システム ● OpenCLによるアプリの高速化
Slide 5
Slide 5 text
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
Slide 6
Slide 6 text
Copyright© Fixstars Group 本日のAgenda 1. SmartNICとは 2. Intel® Agilex™ ボードを SmartNIC 化 3. AMD Xilinx Alveo U250 ボードを SmartNIC 化
Slide 7
Slide 7 text
Copyright© Fixstars Group SmartNIC とは ● SmartNIC (Smart Network Interface Card) ○ CPU 負荷のかかるネットワーク処理を NIC にオフロードする ■ フィルタリング、暗号化、etc. ○ FPGA の特徴を有効的に使える 2019 Xilinx DataCenter Summit 発表資料抜粋
Slide 8
Slide 8 text
Copyright© Fixstars Group SmartNIC とは ● SmartNIC 的なアプリケーション例 2019 Xilinx DataCenter Summit 発表資料抜粋
Slide 9
Slide 9 text
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
Slide 10
Slide 10 text
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 コアが直接低レイヤの処理をする
Slide 11
Slide 11 text
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 オープンソースで提供されている プラットフォームを利用して試行
Slide 12
Slide 12 text
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 ボードにポーティングする
Slide 13
Slide 13 text
Copyright© Fixstars Group Intel® Agilex™ ボードを SmartNIC 化 ● Corundum: An Open-Source 100-Gbps NIC ○ 構成 ■ P-Tile PCIe IP (Gen3) はストリーム入出力 ■ App にユーザーアプリケーションを実装する デザインは RTL (verilog) ■ Linuxドライバも同梱されている
Slide 14
Slide 14 text
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 化
Slide 15
Slide 15 text
Copyright© Fixstars Group Intel® Agilex™ ボードを SmartNIC 化 ● Corundum: An Open-Source 100-Gbps NIC ○ ドライバビルド $ cd corundum/modules/mqnic $ make $ sudo insmod mqnic.ko ■ Ubuntu で問題なくビルドできた (CentOS は未対応だった)
Slide 16
Slide 16 text
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 品ボードの初期不良の疑いがあり、 ボード返却と動作確認が必要とのこと) ⇒ 今回は断念
Slide 17
Slide 17 text
Copyright© Fixstars Group ● ここまでのまとめ ○ SmartNIC の紹介 ○ オープンソースの FPGA NIC 化プラットフォーム Corundum の紹介 ○ Intel® Agilex™ ボード実行トライアル ■ 合成、ビルドは完了 ■ 実機確認でエラー Intel® Agilex™ ボードを SmartNIC 化
Slide 18
Slide 18 text
Copyright© Fixstars Group Who I am Takashi UCHIDA 内田 崇 ソリューション第四事業部 エンジニア
Slide 19
Slide 19 text
Copyright© Fixstars Group open-nicとは? ● AMD Xilinxから出ているFPGA designおよびdriver ● open source ● 内部ロジックをカスタムで追加可能(今回は未実施)
Slide 20
Slide 20 text
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(今回は未使用)
Slide 21
Slide 21 text
Copyright© Fixstars Group open-nic-shell ● FPGA design ● Vivado version 2020.x、2021.xに対応 ● 以下のboardに対応 Xilinx Alveo U50, U55N, U200, U250, U280
Slide 22
Slide 22 text
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から抜粋)
Slide 23
Slide 23 text
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から抜粋)
Slide 24
Slide 24 text
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から抜粋)
Slide 25
Slide 25 text
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 を設定
Slide 26
Slide 26 text
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から抜粋)
Slide 27
Slide 27 text
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で動作確認した
Slide 28
Slide 28 text
Copyright© Fixstars Group open-nicビルド手順 ● open-nic repositoryのscriptディレクトリ内で以下を実行する ./checkout.sh . ● これによりopen-nic-shellとopen-nic-driverのrepositoryがscriptフォルダ内にcloneされる
Slide 29
Slide 29 text
Copyright© Fixstars Group open-nic-shell 合成手順(1) 注意) cmacの合成にはlicense(無料)が必要なので事前に取得/設定しておく必要がある ● open-nicで使用するboardの種類などのoptionを指定して、/scriptにあるbuild.tclを実行 例) alveo u250を指定する場合 $ vivado -mode batch -source ./build.tcl -tclargs -board au250 ● open-nicで指定されているrepositoryの構成だとvivadoのversionが2020.2で固定されており変 更する必要があるので注意 ● スクリプト実行完了後手動でGUIを立ち上げbitstreamを作成する
Slide 30
Slide 30 text
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 }
Slide 31
Slide 31 text
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)
Slide 32
Slide 32 text
Copyright© Fixstars Group FPGA書き込み ● bitファイルを書き込んだ後hot rebootしないとlspciで認識されないので注 意 ● lspciでdeviceが以下のように表示されていればOK $ lspci | grep Xilinx XX:XX.X Memory controller: Xilinx Corporation Device 903f
Slide 33
Slide 33 text
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
Slide 34
Slide 34 text
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
Slide 35
Slide 35 text
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ケーブル
Slide 36
Slide 36 text
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が動作することが確認できた。
Slide 37
Slide 37 text
Copyright© Fixstars Group まとめ ● AMD Xilinxから出ているopen sourceのopen-nicを実際に動かしてみた ● 細かな注意点はあるが、比較的簡単にFPGAをNIC化できた
Slide 38
Slide 38 text
Copyright© Fixstars Group (Appendix)
Slide 39
Slide 39 text
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より抜粋)
Slide 40
Slide 40 text
Copyright© Fixstars Group QDMA(参考) QDMA Architechture (PG302より抜粋)
Slide 41
Slide 41 text
Copyright © Fixstars Group Thank you! お問い合わせ窓口 :
[email protected]