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
140
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
820
実践的!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
630
実践的!FPGA開発セミナーvol.20 / FPGA_seminar_20_fixstars_corporation_20230329
fixstars
0
600
量子コンピュータ時代のプログラミングセミナー / 20230316_Amplify_seminar _route_planning_optimization
fixstars
0
710
量子コンピュータ時代のプログラミングセミナー / 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
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
4
330
Macとオーディオ再生 2024/11/02
yusukeito
0
280
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
510
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
420
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
460
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
460
gopls を改造したら開発生産性が高まった
satorunooshie
8
270
カラム追加で増えるActiveRecordのメモリサイズ イメージできますか?
asayamakk
4
1.7k
PLoP 2024: The evolution of the microservice architecture pattern language
cer
PRO
0
2k
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
280
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
10
1.7k
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Agile that works and the tools we love
rasmusluckow
327
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Music & Morning Musume
bryan
46
6.1k
What's in a price? How to price your products and services
michaelherold
243
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
168
50k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
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]