jh191003-NWJ

高速大容量トラフィックキャプチャ/ジェネレータの開発
中村 遼（東京大学）

概要
本研究では NVMe ストレージと Ethernet NIC が P2P DMA を用いて直接パケットデータをやり取りすることで、ハードウェアの性能を限界まで活かした高速、大容量なトラフィックキャプチャ/ジェネレータの開発を行う。今年度は、P2P DMA のためにデバイス上のメモリをユーザランドから扱うライブラリの設計と実装を行い、Ethernet NIC と NVMe SSD で P2P DMA を行うためのソフトウェア基盤を開発し、トラフィックキャプチャ/ジェネレータアプリケーションを実装した。実験では、P2P DMA を行うために必要な、デバイス上にメモリを持つ NIC および SSD が2019 年度時点で存在しないため、FPGA ベースのデバイスを PCIe リンク上のメモリバッファとして用いる形で性能を計測を行った。実験の結果、このメモリデバイスを用いた構成が原因となって DMA と同等の性能を P2P DMA で出すことは出来なかったが、その原因調査を通じて P2P

DMA を活用するために必要な技術的要素の確認と今後の検討を行った。

究開発を行う。Ethernet の高速化に伴って、

1 共同研究に関する情報
1.1

x86 の汎用マシンに搭載可能な PCIe による共同研究を実施した拠点名

Network Interface Card (NIC) も、100Gbps、東京大学

1.2200Gbps と高速なものが登場している。しか共同研究分野し現在の General Purpose Operating System■超大容量ネットワーク技術分野(汎用 OS) では、100Gbps という高速リンクをアプリケーションも含めて効率的に使い切る

1.3

参加研究者の役割分担ことは難しい。これは、現在の OS における、

中村

遼・東京大学 情報基盤センター

ネットワーク越しにデータをやりとりすため

役割: トラフィックジェネレータ開発のアーキテクチャが、10Base-T などの低速なネットワークの時代から大きく変化していない

明石

邦夫・情報通信研究機構

ことに起因する。

役割: トラフィックキャプチャ開発

そこで本研究では、PCIe デバイス同士が直接データをやりとりしてネットワークと通信

2 研究の目的と意義する手法を用いたアプリケーションの開発を行

本研究では、超高速、大容量のネットワー

う。提案手法では、NVMe のもつ Controller

クを前提とした汎用マシンによるトラフィッ

Memory Buﬀer (CMB) を用いることを想定

クキャプチャおよびジェネレータに関する研し、NVMe ストレージと NIC 間で、CPU や1

CPUバス越しにデータをやりとりする。これによっ

MemoryRoot Complexて、汎用マシンの PCIe バスというハードの性

PCIe Switch

Ethernet NIC

メインメモリを経由することなく、直接 PCIe

Memory Device
NVMe SSD

能を限界まで使い切った、高速、大容量なデータ通信の実現を目指す。本研究ではこの第一歩

図1

トラフィックジェネレータ用 PC の構成として、提案手法を用いた高速、大容量のトラフィックキャプチャ、およびジェネレータの研ションは通常のメモリ領域と同じようにデバ究開発を行う。
本研究ではまず Peer-to-Peer DMA (P2P

イス上のメモリを扱うことができる。そして、DMA) と呼ばれる、CPU とメインメモリをEthernet NIC で P2P DMA を利用するためバイパスするデバイス間通信を用いた NIC とに本ライブラリを高速パケット I/O フレーム

NVMe 間のデータ転送を実現する。その上で、ワークである netmap [1] に統合した。さらに、

P2P DMA を用いたトラフィックキャプチャ

NVMe SSD でも P2P DMA を利用するため、とトラフィックジェネレータを開発する。これ

NVMe SSD のユーザランドドライバ実装であら 2 つのアプリケーションは、直接パケットをる UNVMe [2] にも本ライブラリを統合した。

NVMe と NIC 間でやりとりすることで実現可

PCIe デバイス上のメモリを柔軟に利用す能であり、ファイルシステムやネットワークプるためのライブラリと Ethernet NIC およびロトコルスタックといった実装を必要としない

NVMe SSD ドライバへの統合によって、Eth-ため、提案手法の有効性を確認するのに適した

ernet NIC と NVMe SSD 間での P2P DMA

アプリケーションである。

が可能となった。このソフトウェア基盤を用いてさらに、トラフィックジェネレータ/キャプ

3 当拠点公募型研究として実施したチャアプリケーションの実装を行った。本アプ

意義

リケーションは、CPU とメインメモリを経由本研究で開発するものは、高速、大容量のすることなく、パケットを SSD から読み出しネットワークアプリケーションである。そのたて送信ないしは保存することができる、新しいめ、実装物を SINET5 を用いて複数拠点に跨っトラフィックジェネレータアプリケーションでて高速ネットワーク上で実験すること想定し、ある。
実験として、本アプリケーションの性能を拠点公募型共同研究として実施した。

計測した。2019 年度時点では、残念ながら外4 今年度の研究成果の詳細部から PIO および DMA でアクセスできるメ

P2P DMA では、DMA の宛先としてメインモリ領域 (CMB) を搭載した NVMe SSD はメモリではなく PCIe デバイス上のメモリを用販売されなかったため、実験では MMIO 経由いる。そのためまず、この PCIe デバイス上のでアクセスできるメモリを持つ FPGA ベース

メモリを Memory-Mapped I/O (MMIO) を通のデバイスを用いた。図 1 に、実験に用いたじてアプリケーションから柔軟に利用するたPC の構成を示す。マザーボード上の PCIe スめのライブラリの開発を行った。このライブイッチ配下に、Ethernet NIC、上述のメモリ用ラリを用いることで、ユーザランドアプリケー

FPGA デバイス、そして NVMe SSD を搭載
2

DMA (1 thread)DMA (4 thread)
P2P DMA (1 thread)
P2P DMA (4 thread)

30
20

throughput (Gbps)

throughput (Gbps)

704010064 256

図25121024
packet size (byte)

50
40
30
20
1001500DMA
P2P DMA

60

DMA Write

DMA Read

DMA Read/Write

図 3 メインメモリとメモリデバイスに対する DMA のスループット

トラフィックジェネレータの送信性能し、 アプリケーションはまず NVMe SSD からループットを計測した結果を示す。なお pcie-

パケットデータをメモリデバイスに読み出し、bench から P2P DMA を行うために、開発しEthernet NIC がメモリデバイス上のパケットたライブラリを pcie-bench に統合した。DMAをネットワークに送信する。Ethernet NIC にRead または DMA Write のみの場合、メモリは Intel XL710 40Gbps NIC を、NVMe SSD

デバイスへの P2P DMA でもメインメモリへには Samsung PM1725a NVMe SSD を用いの DMA と同等のスループットが出ている。一た。CPU には Intel Core i9-9820X 3.3GHz

方 DMA Read と DMA Write を同時に行った

10 core CPU を、メモリには Crucial の 16GB

場合、メモリデバイスへの P2P DMA は DMA

DDR4-2666 メモリを 2 枚用いた。の半分ほどのスループットとなった。

図 2 に、トラフィクジェネレータで送信しトラフィックジェネレータの性能計測実験たパケットを netmap pkt-gen を使って受信では Ethernet NIC と NVMe SSD の間にメし、スループットを計測した結果を示す。実験

モリデバイスを挟んだため、メモリデバイス

では、送信するパケットのサイズを変えながは NVMe SSD からの DMA Write (NVMeら、パケットバッファとしてメモリデバイスをSSD からの読み出し) と Ethernet NIC から使った場合 (図中 P2P DMA) とメインメモリの DMA Read (Ethernet NIC へのパケットを使った通常の DMA の場合 (図中 DMA) の送信) の両方を処理しなければならない。これ性能をそれぞれ計測した。

は、図 3 が示すようにメインメモリへの DMA

図 2 が示すように、結果として P2P DMA

Read/Write よりも低いスループットとなる。

ではメインメモリを経由するほどの性能を出す

結果として、トラフィックジェネレータの性能ことはできなかった。パケットサイズが 1500

も P2P DMA を用いた方が通常の DMA よりバイトの際、メインメモリを経由する DMA のも低くなった。

場合 4 スレッドで約 32Gbps に対して、P2P

P2P DMA で性能が出ないという本実験のDMA では約 19Gbps となった。この原因は、結果は、中間バッファとしてメモリデバイスメモリデバイスの特性だと考えられる。図 3を用いたことに起因している。メモリデバイスに、pcie-bench [3] というベンチマークデバイが必要だったのは、P2P DMA の宛先となれスを用いて、PCIe デバイスからメインメモリるメモリを持つ Ethernet NIC または NVMeに対する DMA のスループットと、計測に用SSD がまだ存在しないためである。本来 P2Pいたメモリデバイスに対する P2P DMA のス

DMA では 2 つのデバイス同士、本研究では3Ethernet NIC と NVMe SSD が、直接データ

6 研究業績一覧（発表予定も含む）をやり取りすることが想定される。また 2 つのデバイス間でデータをやりとりする場合には、参考文献

必要な DMA は DMA Read か DMA Write の[1] Luigi Rizzo., ”netmap: A Novel Framework
for Fast Packet I/O”. In Proceedings of the2012 USENIX Annual Technical Conference(USENIX ATC 12), pages 101-112, Boston,
MA, USA, 2012.
[2] MicronSSD/unvme:
User
Space
NVMe
Driver,https://github.com/MicronSSD/unvme[3] Rolf Neugebauer, Gianni Antichi, José Fernando Zazo, Yury Audzevich, Sergio LópezBuedo, and Andrew W. Moore. 2018. Understanding PCIe performance for end hostnetworking. In Proceedings of the 2018 Conference of the ACM Special Interest Groupon Data Communication (SIGCOMM ’18).
ACM, New York, NY, USA, 327-341.

どちらかのみである。そのため、メモリデバイスを含む 2 つのデバイス間の P2P DMA は図

3 からメインメモリ対する DMA と同じだけのスループットを得られることが期待できる。本
実験を通じて、今後 P2P DMA による性能向上や CPU およびメインメモリの負荷の低減を目指すためには、やはり CMB 対応の NVMe

SSD や、同等の機能を持つ Ethernet NIC が必要であることが改めて確認された。

5 今年度の進捗状況と今後の展望
今年度は、P2P DMA のためにデバイス上のメモリをユーザランドから扱うライブラリの設計実装を行い、Ethernet NIC と NVMe

SSD のドライバフレームワークに本ライブラリを統合することで Ethernet NIC と NVMe

SSD で P2P DMA を行うためのソフトウェア基盤を実現した。その上で、トラフィックキャプチャ/ジェネレータアプリケーションを実装した。しかし、残念ながら 2019 年度には P2P

DMA を行うために必要なデバイス上にメモリを持つ NIC および SSD が存在しないため、FPGA ベースのデバイスを PCIe リンク上のバッファとして用いる形で性能を計測した。結果的にこのメモリデバイスを用いた構成が原因となって DMA と同等の性能を P2P DMA で出すことは出来なかったが、一方で P2P DMAを効率的に実行するためにはやはり PCIe デバイス側の対応が必要であることが改めて確認できた。今後、CMB 対応の NVMe SSD の登場を待ちつつ、Ethernet NIC に CPU とメモリを搭載した Smart NIC 等を用いて P2P DMAを行う方法を検討する。

4