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
630
実践的!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
350
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
900
実践的!FPGA開発セミナーvol.21 / FPGA_seminar_21_fixstars_corporation_20230426
fixstars
0
1.2k
量子コンピュータ時代のプログラミングセミナー / 20230413_Amplify_seminar_shift_optimization
fixstars
0
820
実践的!FPGA開発セミナーvol.18 / FPGA_seminar_18_fixstars_corporation_20230125
fixstars
0
700
実践的!FPGA開発セミナーvol.20 / FPGA_seminar_20_fixstars_corporation_20230329
fixstars
0
670
量子コンピュータ時代のプログラミングセミナー / 20230316_Amplify_seminar _route_planning_optimization
fixstars
0
750
量子コンピュータ時代のプログラミングセミナー / 20230216_Amplify_seminar _production_planning_optimization
fixstars
0
570
CPU/GPU高速化セミナー 浮動小数点から文字列への高速変換の論文を読んでみた / cpugpu acceleration seminar 20230201
fixstars
3
1.3k
Other Decks in Programming
See All in Programming
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
ソフトウェアエンジニアの成長
masuda220
PRO
10
1.3k
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
130
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
220
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
2,500万ユーザーを支えるSREチームの6年間のスクラムのカイゼン
honmarkhunt
6
5.3k
Software Architecture
hschwentner
6
2.1k
Amazon Bedrock Multi Agentsを試してきた
tm2
1
290
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
Bedrock Agentsレスポンス解析によるAgentのOps
licux
3
840
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
390
Unity Android XR入門
sakutama_11
0
160
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Being A Developer After 40
akosma
89
590k
Faster Mobile Websites
deanohume
306
31k
A Tale of Four Properties
chriscoyier
158
23k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Unsuck your backbone
ammeep
669
57k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
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]