Slide 1

Slide 1 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars Group 実践的!FPGA開発セミナー vol.2 2021/09/29 18:00~

Slide 2

Slide 2 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars Group DMA解説 FPGAアクセラレータ活用の 肝となるデータ転送を理解する

Slide 3

Slide 3 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Eisuke MOCHIZUKI 望月 英輔 ソリューション第一事業部 シニアエンジニア

Slide 4

Slide 4 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 望月 英輔 ● FPGA エンジニア ○ 主にFPGA 開発 (Vivado/Vitis HLS, Verilog-HDL) ○ 必要に応じてSW 開発を行うこともあり ● 略歴 ○ 製造装置メーカー ■ アナログ/デジタル回路設計エンジニアとして入社 ■ 開発人員不足を背景にFPGA に出会う ■ Intel (Altera) Cyclone, MAX 等小さめのFPGA を主に使用 ○ フィックスターズ ■ FPGA を用いたリアルタイム映像処理システム開発 ■ FPGA と100GbE を用いた低レイテンシ, 高スループット処理システム開発 ■ Xilinx Alveo 等大きめのFPGA を主に使用 自己紹介

Slide 5

Slide 5 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group DMA = Direct Memory Access Source:Direct Memory Access – Wikipedia ● CPU Power を使わず、Peripheral Device が主体となってデータを転送する ○ Peripheral Devie 上のDMAC(= DMA Controller) が行う ○ そのため、データ転送中CPU は別の仕事ができる ● FPGA で言うところのDMA ① FPGA チップ内メモリからFPGA チップ内各モジュールに対するDMA ■ ex: BRAM -> Stream ② FPGA ボード上のメモリからFPGA 内各モジュールに対するDMA ■ ex: On board DRAM -> Stream ③ FPGA ボード上以外のメモリからFPGA 内各モジュールに対するDMA ■ ex: Host PC のDDR4 SDRAM -> (PCIe 経由) -> Stream ■ タイトルの「FPGAアクセラレータ」という意味ではこの用途が近い ● 今回は③のPCIe 経由のDMA にフォーカスする DMA とは

Slide 6

Slide 6 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 近年は効率的な計算を行うためにCPU 以外のアクセラレータを 使用することが常識となりつつある ○ ex: 機械学習の効率化のためにGPU を使用する等 ● 計算に必要な情報はHost Memory にあるため、 Host Memory ⇔ アクセラレータ間のデータ転送が必須となる ○ データ転送には一般的にDMA が使用される ○ DMA 中でもアクセラレータ上では計算処理を並行して実行可能 ● Host Memory ⇔ アクセラレータ間のDMA 転送が低速だと、 処理全体のボトルネックとなりうる ○ 効率化のために導入したアクセラレータが本来の性能を発揮できない 現代におけるDMA の重要性

Slide 7

Slide 7 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 通常のデバイスではDMAC(= DMA Controller) がHW 実装されているが、FPGA ではDMAC を自由に実装できる ○ ただし、DMAC をゼロから自作することは多大な困難を伴うため、FPGA ベンダやIP ベ ンダが提供しているDMAC を使用することが多い ○ 例としてXilinx はXDMA とQDMA という2種類のPCIe 用DMAC を提供している ■ XDMA: 一般的なPCIe 経由のDMA を実行可能 Source:DMA for PCI Express (PCIe) Subsystem ■ QDMA: DMAC 内部にQueue を持つことで小さいサイズの転送を効率的に実行可能 Source:QDMA Subsystem for PCI Express ● 今回のセミナーでは、 Host Memory ⇔ FPGA DMA 転送を高速に実行することをターゲットとする FPGA におけるDMA の自由度

Slide 8

Slide 8 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● Host to Card (H2C) の場合に注目し、DMA 処理フローを確認 ① Host Memory に転送したいデータを配置 ② DMAC に対しデータ転送コマンドを発行 ■ Host Memory 上の転送したいデータの物理アドレスや、転送サイズ(Packet Size)、 FPGA 内転送先情報等を記載 ③ DMAC はコマンドに従いデータ転送を実施 ④ DMAC はデータ転送が完了したことを通知 Chipset Host PC CPU Memory Controlle r Host Memory FPGA DMAC PCIe ③ ① ② ④ FPGA におけるDMA の一般的な処理フロー

Slide 9

Slide 9 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● FPGA 内のデザインがボトルネックにならないようにする ○ ex) PCIe Gen3 x16: 128 GT/s -> 512 bit x 250 MHz の内部バスは最低限必要 ○ DMA 側に問題がなくとも内部バスが原因で性能が出ないことがある(実経験) ● PCIe の設定を確認する ○ 特にMax Payload Size, Max Read Request Size が性能に影響するので注意 Source:Understanding PCIe Configuration for Maximum Performance ● 1つの転送コマンドあたりのPacket Size を大きくする (前頁処理フロー②) ○ 転送コマンドを極力発行しないでよい状況としたい ○ できればシステムの設計段階から意識したい ● CPU 側の転送コマンド発行が滞らないようにする (前頁処理フロー②) ○ 状況によっては8コア16スレッドでも足りない場合もある(実経験) ○ DMAC 側に転送コマンドのQueue を複数設けることも有効 ■ DMAC 側がコマンドを受け取れず、コマンド発行が滞る状況を回避できる DMA の高速化のチェックポイント

Slide 10

Slide 10 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● PCIe Gen3 x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ○ Xilinx Performance Report より抜粋 Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度

Slide 11

Slide 11 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● PCIe Gen3 x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ○ Xilinx Performance Report より抜粋 1つの転送コマンドあたりのPacket Size が大きい領域 (> 4MiB) では、安定して100 Gbps 程度を記録 Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度

Slide 12

Slide 12 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group 1つの転送コマンドあたりのPacket Size が小さい ほど、転送速度は低下する 低下の度合いは、Queue の数によって変化する -> 転送コマンドの発行が追いつかなくなると、 DMA の転送速度は低下する Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度 ● PCIe Gen3 x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ○ Xilinx Performance Report より抜粋

Slide 13

Slide 13 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● FPGA をアクセラレータとして使う上で、 DMA データ転送を高速に実行することは非常に重要である ○ そして、FPGA をアクセラレータとして利用する機会はますます増えるだろう予測し ている ● DMA データ転送を高速に行うためには、転送コマンドの発行が十分に行えているかに 留意する必要がある ○ 転送コマンドが十分に発行できれば、バスを効率的に使用することができる ○ ただし、DMA 以外の部分にボトルネックが無いことが前提 ● 適切な条件下であれば、理論帯域128 GT/s に対し100 Gbps 程度は実現可能 まとめ

Slide 14

Slide 14 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars Group VitisでFPGAネットワーク通信を 手軽に試すテクニック

Slide 15

Slide 15 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Kenta IDA 井田 健太 ソリューション第一事業部 シニアエンジニア

Slide 16

Slide 16 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 井田 健太 ● FPGA エンジニア ○ 主にFPGA開発を担当 ■ RTL開発からLinuxドライバまで ■ Vivadoぽちぽちマン ○ ときどきMCU/組込みLinux案件もやります ● 略歴 ○ 製造装置メーカー ■ 装置の組込みソフトウェア担当 ● RTOSを使ったファームウェア開発 ● Windowsソフトウェア開発 ■ 制御ボード上のFPGAの設計にも手をだす ● Cyclone II/III/IVが載っていた ○ フィックスターズ ■ FPGA を用いたリアルタイム映像処理システム開発 ■ Alveoなど比較的大規模なFPGA向けの開発が多い 自己紹介

Slide 17

Slide 17 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● FPGAに10G~100G Ethernetなどの高速なネットワーク向けの 信号を直接入出する使い方が増えている ○ GPUと比較した場合の利点:FPGAはEthernet等の信号を直接扱える ○ Ethernet等のネットワーク通信用の信号をFPGAで直接処理することにより 低レイテンシかつ一定レイテンシでの応答を実現 ● 10G~100Gに対応したFPGAボードが容易に入手できるようになった ○ Xilinx Alveoアクセラレータ等 (写真はAlveo U50DD) FPGAによるネットワーク通信

Slide 18

Slide 18 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● ネットワーク通信用のデザイン開発は、従来は Vivadoフローのみサポート ● VivadoとIP Integratorを使ったIPベース設計 ○ ネットワーク通信用のIPを配置 ■ Ethernet MAC IP等 ○ アプリケーションロジックをIP化して配置 ○ 必要に応じてCPU側メモリ間通信用のIPを配置 ■ SoCの場合、CPU側メモリ転送用のDMA IPを配置 ■ アクセラレータカードの場合、ホスト通信用のPCIe DMA IPを配置 ○ 必要に応じてメモリコントローラのIPを配置 ○ 各IP間を適切に接続 ● ドライバ開発 ○ 各IPの制御 (レジスタ設定、DMAの制御等) ○ Xilinxの提供するリファレンスドライバを利用するなど ● 制御用ソフトウェア開発 ○ 前述ドライバを使って実現したいアプリケーションのソフトウェア部分を実装 ネットワーク通信用デザインの開発

Slide 19

Slide 19 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● Vitis/Vivado 2019.1から追加されたデザインフロー ○ 従来のSDAccel, SDSoC, Xilinx SDKを統合したような開発環境 ● CPUからAXIバスやPCIe経由で実行を制御できるカーネルを開発 ○ OpenCL APIを通じてCPUから実行制御 ○ HLSもしくはRTLで記述 ○ カーネルのメモリアクセス用のAXI4 Master IF ○ CPUからカーネル内レジスタアクセス用のAXI4 Lite IF ■ パラメータ設定等 ○ カーネル間通信用のAXI4 Stream IF ● システムで必要なカーネルを配置してシステムを構築 ○ e.g. 画像処理用カーネルを2つ配置して2並列で画像処理を実行する等 Vitisデザインフロー

Slide 20

Slide 20 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● ホストCPUからのアクセス用のランタイム を Xilinxが標準で提供 (Xilinx RunTime: XRT) ○ DMAドライバやそれを使った転送制御処理を開発する必要がない ● FPGAのコンフィグレーションがランタイム経由で実行可能 ○ SoC: PSからPLのコンフィグレーション ○ アクセラレーターカード: PCIe経由でのパーシャル・リコンフィグ ● Vivadoフローと比較して可能なことは限られるが 可能であればVitisで楽をしたい… ○ 特にアクセラレータ・カードを使ったPRの仕組みはかなり便利 Vitisデザインフローの利点

Slide 21

Slide 21 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 従来はサポートしていなかったが、 現在はRTLカーネルにてPR領域内から高速トランシーバー(GT)を利用可能 ○ RTLカーネルでトランシーバを使うIPをインスタンス化すればよい ● つまり、 Ethernet MAC IPをRTLカーネルに含めればVitisでもネットワーク通信可能 Vitisでのネットワーク通信

Slide 22

Slide 22 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● XilinxによるAlveoアクセラレータ・カード向けの Vitisフローを使った100G Ethernet通信デザインのサンプル ○ GitHubで3-clause BSDライセンスで公開されている Source:https://github.com/Xilinx/xup_vitis_network_example ● 100G Ethernetとして Xilinx UltraScale+ 100G Ethernet Subsystem (CMAC)を使用 ● ARP,ICMP,UDPを実装し、ボード上メモリのデータを送受信 XUP Vitis Network Example (VNx)

Slide 23

Slide 23 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● Alveoと100G Ethernetの機材があれば手軽にFPGA Ethernet通信が試せる ○ CMAC IPはXilinxのサイトから無償でライセンス取得可能 ● 問題: 100G Ethernet機材はそれなりに高い ○ 100GbE NIC 1枚あたり 7万円~ ○ QSFP28 100GbEモジュール 1万円~ 最低2個必要 ○ 100GbE スイッチ 50万円~ ● スイッチを使わないとしても、最低、対向のNICが必要 ● ちょっとお手軽に…とはいかない 100GbE通信を試すための費用

Slide 24

Slide 24 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 100GbEではなく10GbEだと機材の価格それなりに安い ○ 10GbE NIC 1枚あたり 1万円~ ○ SFP+ 10GbE DAC 0.3万円~ ● お手軽に試せそうなお値段 ○ 実際、弊社techblogに記事を書くのに買ってもらいました ● 問題: 10GbE Ethernet MAC IPが有償 ○ 昔は無償だった (10G Ethernet Subsystem) ○ 現在のIP (10G/25G Ethernet Subsystem) は有償 ○ お値段は書けないが、Alveo買えます/Projectくらいの価格感 というわけで、10GbE Ethernet MACを作ってみた Source:https://japan.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/xxv_ethernet/v4_0/pg210-25g-ethernet.pdf 10GbE通信を試すための費用

Slide 25

Slide 25 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 10G Ethernetの通信処理は3つの部分に分かれる • MAC (Media Access Control sublayer) ○ Ethernetフレームを扱う部分 ○ EthernetフレームのプリアンブルやSFDの検出・付加処理 ○ FCS (Frame Check Sequence)とよばれるCRC32の誤り検出符号の計算 ○ XGMII(10G Media Independent Interface)というプロトコルで物理層のトランシーバと通 信 ● PCS (Physical Coding Sublayer) ○ トランシーバと通信するための符号化を担当 ○ シ10GbEの場合は 64b66b 変換 ● PMA (Physical Media Attachment) ○ リアル・パラレル変換 (SERDES) ● このうち PCS/PMAはFPGAのGTの機能なので 10G/25G Ethernet Subsuystem IPのPCS/PMA部分は無償利用可能 ● MACのみ作れば10G Ethernet通信ができる! FPGAでの10G Ethernet通信処理

Slide 26

Slide 26 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● エラー処理などを除けば以下の処理 ● 受信 ○ XGMIIからAXI4 Streamへの変換 ○ プリアンブル・SFDの除去 ○ FCSの計算とチェック ● 送信 ○ FCSの計算と付加 ○ プリアンブル・SFDの付加 ○ AXI4 StreamからXGMIIへの変換 10G Ethernet MACの処理内容

Slide 27

Slide 27 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 前述の処理を実装したXilinx FPGA向けIP ● GitHubで公開中 Source:https://github.com/fixstars/xg_mac ● 3条項BSDライセンスで無償利用可能 ● Alveo U50 (ES3)とIntelチップセットなNIC (X520)で動作確認済み • ただし製品レベルでの検証を行ったわけではない。 ● 処理の詳細はtech blogを参照のこと Source:https://proc-cpuinfo.fixstars.com/2020/05/alveo-u50-10g-ethernet/ xg_mac IP

Slide 28

Slide 28 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● 10GbE MACが使えるようになったので、Vitis Network Exampleを 100GbEから10GbEに変更できれば手軽にVitisでUDPが試せる MAC IPを置き換え 通信を10GbE化 XUP Vitis Network Exampleの10G化

Slide 29

Slide 29 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● VNxは基本的にVitisのGUIを一切使わずに v++ を呼び出してデザインの合成を行っている ● トップレベルで以下のコマンドを実行するとU50向けのデザインを合成 ○ 要XRT + Vitis 2020.1環境 ● Ethernetディレクトリ以下にCMACを含むRTLカーネルが生成される ○ bd_cmac.tcl:RTLカーネル本体のブロックデザイン定義 ● カーネルのブロックデザイン定義を変更できればMACを置き換えられる make all DEVICE=xilinx_u50_gen3x16_xdma_201920_3 DESIGN=basic Ethernet IPを含むRTLカーネルの編集

Slide 30

Slide 30 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● Ethernet/tmp_cmac_0_xilinx_u50_gen3x16_xdma_201920_3 にRTLカーネル生成時の一時ファイルとしてVivadoプロジェクトが含まれる ● kernel_pack.xpr がVivadoプロジェクトファイル Ethernet IPを含むRTLカーネルの編集

Slide 31

Slide 31 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● CMACをxg_mac + PCS/PMAに置き換え xg_macのIPをおいてあるディレクトリをIPリポジトリに追加 ● カーネルのストリームの入出力信号を512bit↔64bitに幅変換して接続 Ethernet IPを含むRTLカーネルの編集

Slide 32

Slide 32 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group スクリプトで接続 ● AlveoのプラットフォームにはGTの信号が用意されている ● 現状、Vitis標準機能でカーネルの信号をGTに接続できない ● Vitisのリンク処理 (ブロックデザインをまとめる処理)で 指定した後処理スクリプトを実行可能 ● VNxでは後処理スクリプト中でGTの信号を接続している RTLカーネルでGTを使うのに必要なこと

Slide 33

Slide 33 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● VNxには動作確認用のPythonスクリプトが含まれている ○ PYNQを使ったFPGA制御用のスクリプト ● 確認手順はJupyter Notebookで書かれているので動かしてみる ● 環境 ○ 対象ボード: Alveo U50DD (ES3) ○ 対向NIC: X520-10G-2S-X8 (10Gtek) ○ ホストOS: Ubuntu 18.04 Jupyter Notebookで動作確認

Slide 34

Slide 34 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group ● VitisデザインフローでもEthernet通信を行うデザインを作れる ● XilinxがVitis Network Exampleを公開している ○ UDP通信のAlveo向けデザイン ● 100GbEの機材をそろえるのが難しい場合に10GbEの実験環境を作成 ● 手軽に試すために10GbE MAC IPを開発 ● Vitis Network Exampleを10GbE化した ● Vitisの無償ライセンスの範囲で Alveoを使ったEthernet通信ができることを確認 まとめ

Slide 35

Slide 35 text

Fixstars Group www.fixstars.com Copyright © Fixstars Group Thank You for your participation ご参加いただきありがとうございました お問い合わせ窓口 : [email protected]