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
640
実践的!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
370
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
910
実践的!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
580
CPU/GPU高速化セミナー 浮動小数点から文字列への高速変換の論文を読んでみた / cpugpu acceleration seminar 20230201
fixstars
3
1.3k
Other Decks in Programming
See All in Programming
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
260
Formの複雑さに立ち向かう
bmthd
1
940
生成AIで加速するテスト実装 - ロリポップ for Gamersの事例と 生成AIエディタの活用
kinosuke01
0
130
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
250
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
自力でTTSモデルを作った話
zgock999
0
110
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
1.1k
React 19アップデートのために必要なこと
uhyo
8
1.5k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.5k
AWS Step Functions は CDK で書こう!
konokenj
4
440
SwiftUI Viewの責務分離
elmetal
PRO
2
280
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
280
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Producing Creativity
orderedlist
PRO
344
40k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
520
YesSQL, Process and Tooling at Scale
rocio
172
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Automating Front-end Workflow
addyosmani
1368
200k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
Faster Mobile Websites
deanohume
306
31k
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! お問い合わせ窓口 : hr-seminar@fixstars.com