Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars...
Search
株式会社フィックスターズ
April 04, 2023
Programming
0
560
実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222
2023年2月22日に開催した、「実践的!FPGA開発セミナーvol.19」の当日資料です。
株式会社フィックスターズ
April 04, 2023
Tweet
Share
More Decks by 株式会社フィックスターズ
See All by 株式会社フィックスターズ
コンピュータービジョンセミナー5 / 3次元復元アルゴリズム Multi-View Stereo の CUDA高速化
fixstars
0
130
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
810
実践的!FPGA開発セミナーvol.21 / FPGA_seminar_21_fixstars_corporation_20230426
fixstars
0
1.1k
量子コンピュータ時代のプログラミングセミナー / 20230413_Amplify_seminar_shift_optimization
fixstars
0
770
実践的!FPGA開発セミナーvol.18 / FPGA_seminar_18_fixstars_corporation_20230125
fixstars
0
620
実践的!FPGA開発セミナーvol.20 / FPGA_seminar_20_fixstars_corporation_20230329
fixstars
0
600
量子コンピュータ時代のプログラミングセミナー / 20230316_Amplify_seminar _route_planning_optimization
fixstars
0
700
量子コンピュータ時代のプログラミングセミナー / 20230216_Amplify_seminar _production_planning_optimization
fixstars
0
530
CPU/GPU高速化セミナー 浮動小数点から文字列への高速変換の論文を読んでみた / cpugpu acceleration seminar 20230201
fixstars
3
1.2k
Other Decks in Programming
See All in Programming
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
0
160
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
230
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.3k
Vue.js学習の振り返り
hiro_xre
2
130
生成 AI を活用した toitta 切片分類機能の裏側 / Inside toitta's AI-Based Factoid Clustering
pokutuna
0
580
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.2k
2万ページのSSG運用における工夫と注意点 / Vue Fes Japan 2024
chinen
3
1.3k
CSC509 Lecture 09
javiergs
PRO
0
110
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
550
Universal Linksの実装方法と陥りがちな罠
kaitokudou
1
220
PLoP 2024: The evolution of the microservice architecture pattern language
cer
PRO
0
1.7k
Featured
See All Featured
Facilitating Awesome Meetings
lara
49
6k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Practical Orchestrator
shlominoach
186
10k
Designing the Hi-DPI Web
ddemaree
280
34k
Navigating Team Friction
lara
183
14k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
GitHub's CSS Performance
jonrohan
1030
460k
Building Adaptive Systems
keathley
38
2.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
It's Worth the Effort
3n
183
27k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Transcript
Copyright© Fixstars Group 実践的!FPGA開発セミナー vol.19 2023/02/22 18:00~
Copyright© Fixstars Group オープンソースで FPGA ボードを SmartNIC 化!
Copyright© Fixstars Group Who I am 写真 Ryuji NISHIDA 西田
竜之 ソリューション第四事業部 シニアエンジニア
Copyright© Fixstars Group 自己紹介 • 西田竜之 ◦ FPGAを用いたシステム開発に従事 ◦ ハードウェア開発をメインに担当
◦ 略歴 ▪ 半導体ベンダ • サーバー向けASIC開発 ▪ 映像事務機メーカー • 高画質エンジンLSI 映像機器向けFPGA開発 ▪ フィックスターズ • FPGAを用いた高速取引金融システム • OpenCLによるアプリの高速化
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
Copyright© Fixstars Group 本日のAgenda 1. SmartNICとは 2. Intel® Agilex™ ボードを
SmartNIC 化 3. AMD Xilinx Alveo U250 ボードを SmartNIC 化
Copyright© Fixstars Group SmartNIC とは • SmartNIC (Smart Network Interface
Card) ◦ CPU 負荷のかかるネットワーク処理を NIC にオフロードする ▪ フィルタリング、暗号化、etc. ◦ FPGA の特徴を有効的に使える 2019 Xilinx DataCenter Summit 発表資料抜粋
Copyright© Fixstars Group SmartNIC とは • SmartNIC 的なアプリケーション例 2019 Xilinx
DataCenter Summit 発表資料抜粋
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
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 コアが直接低レイヤの処理をする
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 オープンソースで提供されている プラットフォームを利用して試行
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 ボードにポーティングする
Copyright© Fixstars Group Intel® Agilex™ ボードを SmartNIC 化 • Corundum:
An Open-Source 100-Gbps NIC ◦ 構成 ▪ P-Tile PCIe IP (Gen3) はストリーム入出力 ▪ App にユーザーアプリケーションを実装する デザインは RTL (verilog) ▪ Linuxドライバも同梱されている
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 化
Copyright© Fixstars Group Intel® Agilex™ ボードを SmartNIC 化 • Corundum:
An Open-Source 100-Gbps NIC ◦ ドライバビルド $ cd corundum/modules/mqnic $ make $ sudo insmod mqnic.ko ▪ Ubuntu で問題なくビルドできた (CentOS は未対応だった)
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 品ボードの初期不良の疑いがあり、 ボード返却と動作確認が必要とのこと) ⇒ 今回は断念
Copyright© Fixstars Group • ここまでのまとめ ◦ SmartNIC の紹介 ◦ オープンソースの
FPGA NIC 化プラットフォーム Corundum の紹介 ◦ Intel® Agilex™ ボード実行トライアル ▪ 合成、ビルドは完了 ▪ 実機確認でエラー Intel® Agilex™ ボードを SmartNIC 化
Copyright© Fixstars Group Who I am Takashi UCHIDA 内田 崇
ソリューション第四事業部 エンジニア
Copyright© Fixstars Group open-nicとは? • AMD Xilinxから出ているFPGA designおよびdriver • open
source • 内部ロジックをカスタムで追加可能(今回は未実施)
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(今回は未使用)
Copyright© Fixstars Group open-nic-shell • FPGA design • Vivado version
2020.x、2021.xに対応 • 以下のboardに対応 Xilinx Alveo U50, U55N, U200, U250, U280
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から抜粋)
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から抜粋)
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から抜粋)
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 を設定
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から抜粋)
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で動作確認した
Copyright© Fixstars Group open-nicビルド手順 • open-nic repositoryのscriptディレクトリ内で以下を実行する ./checkout.sh . •
これによりopen-nic-shellとopen-nic-driverのrepositoryがscriptフォルダ内にcloneされる
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を作成する
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 }
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)
Copyright© Fixstars Group FPGA書き込み • bitファイルを書き込んだ後hot rebootしないとlspciで認識されないので注 意 • lspciでdeviceが以下のように表示されていればOK
$ lspci | grep Xilinx XX:XX.X Memory controller: Xilinx Corporation Device 903f
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
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
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ケーブル
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が動作することが確認できた。
Copyright© Fixstars Group まとめ • AMD Xilinxから出ているopen sourceのopen-nicを実際に動かしてみた • 細かな注意点はあるが、比較的簡単にFPGAをNIC化できた
Copyright© Fixstars Group (Appendix)
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より抜粋)
Copyright© Fixstars Group QDMA(参考) QDMA Architechture (PG302より抜粋)
Copyright © Fixstars Group Thank you! お問い合わせ窓口 :
[email protected]