SlideShare a Scribd company logo
DPDK PMD
Mar 6 2015, Masaru OKI (@masaru0714)
Data Plane Development Kit
http://dpdk.org/
● ユーザーランドプログラムによる高速ネットワークI/Oライブラリ
● 現時点での最新バージョンは1.8.0
● Intelによって開発され、現在x86(32bit,64bit)とPower(64bit)で動作
● Linux用。x86(64bit)についてはFreeBSDにも対応している
● 指定コアを占有することによりコンテキストスイッチを回避
● ハッシュテーブルやLongest Prefix Match等のユーティリティも提供
● 割り込みを用いない高速I/Oデバイスドライバを提供している
○ Poll Mode Driver すなわちPMD
DPDK
DPDK
PMDの構造
Linux kernel
uio module (Linux標準)
igb_uio module
librte_pmd_e1000 librte_pmd_ixgbe librte_pmd_i40e and others
librte_ether (ユーザプログラムが呼び出す APIを提供する)
PCI vendor id, product id
を識別し、PCIアドレス空間
を提供する
仮想PMDはuioと
無関係の存在
内部API登録
ユーザ空間で動作する、
各種NIC向けのデバイス
ドライバ(物理PMD)
大きく2種類に分かれ、それぞれにいくつかの実装が用意されている。
● 物理PMD
○ PCI上のデバイスのレジスタを読み書きし送受信を実現。
○ 提供されているものは、ほぼIntel製品のみに対応している。
○ vmxnet3などの準仮想化NICのドライバもこちら。
○ 今後Mellanox製品やBroadcom 10GbEなどのPMDも提供予定。
○ 自動選択。具体的にどのPMDを使っているか気にせずともよい。
● 仮想PMD
○ 制御対象が物理NICでないドライバ。
○ socketによる送受信、bonding、リングバッファによる折り返しなど。
○ どのPMDをどれだけ使うかを指定する必要がある。
PMDの種類
librte_pmd_e1000 Intel GbE (8254x, 8257x, 82580, i350, i210など)
librte_pmd_ixgbe Intel 10GbE (82598, 82599, X540, X550)
librte_pmd_i40e Intel 40GbE (XL710)
librte_pmd_virtio Virtio 準仮想化NIC
librte_pmd_vmxnet3vmxnet3 準仮想化NIC
librte_pmd_enic Cisco VIC Ethernet NIC (Cisco Linux製品に搭載)
DPDK2.0で対応予定
librte_pmd_fm10k Intel Red Rock Canyon Switch integrated NIC
librte_pmd_mlx4 Mellanox ConnectX-3xx 10/40GbE
dpdk_nic_bind.pyにより、ドライバをigb_uioに切り替えて使用する
物理PMD
librte_pmd_af_packet AF_PACKETを使ったraw socketによる通信
librte_pmd_bond 複数NICを束ねるBonding機能を提供
librte_pmd_pcap libpcapを使ったraw socketによる通信
librte_pmd_ring リングバッファによる折り返し
librte_pmd_xenvirt Xen準仮想化NIC用ドライバ
DPDK2.0で対応予定
librte_pmd_null 空パケットを受信し続け送信パケットを捨てる
通常はlibrte_pmd_XXXとは呼ばず、XXX PMDと呼ぶ。
現在は、DPDKアプリのコマンドラインで指定することで使用できる。
指定しなければ、使用されない。
仮想PMD
● 送受信するポートを識別するための番号。ポート番号ともいう。
● 0から順に割り当てられる。
● 最初に、使用する仮想PMDの数だけ割り当てを行う。
● その後unbindした物理NICの数だけ割り当てを行う。(PCIアドレス順)
○ PCIアドレスはethtool -i I/F名で確認できる。
例
PCAP PMDでひとつ、物理NIC 00:14.0と00:15.0のふたつの場合
port id 0: PCAP PMD
port id 1: 00:14.0
port id 2: 00:15.0
port id
DPDKコマンドラインにて下記を単数あるいは複数指定する。
--vdev PMDn,params[,params=value,...]
PMD PMDの識別名称。PCAP PMDであればeth_pcap
n 複数指定する際の識別番号。0以上重複なし。
params PMDごとに異なるパラメータ。カンマ区切りで複数指定可能。
仮想PMD指定方法
● 識別名称
○ eth_af_packet
● 解説
○ AF_PACKET socket, mmapを使用した送受信機能(Linuxのみ)
○ PCAP PMDと機能は同様、PCAPより速いがVLANのケアなし
● 必須パラメータ
○ iface=name インタフェース名を指定 iface=eth0
● オプションパラメータ
○ qpairs=n キュー数を指定 qpairs=1
○ blocksz=n ブロックサイズを指定 blocksz=4096
○ framesz=n フレームサイズを指定 framesz=2048
○ framecnt=n フレーム数を指定 framecnt=512
仮想PMD解説: AF_PACKET
● 識別名称
○ eth_bond
● 解説
○ 802.3ad LAGを提供する。
● パラメータ
○ slave=PCIアドレス or name PMDのポートを指定(複数可)
○ primary=PCIアドレス or name PMDをポートを指定(単数)
○ mode=n モードを指定
○ xmit_policy=l2 or l23 or l34 振り分けポリシーを指定
○ socket_id=n 使用メモリの所属socketを指定
○ mac=MACアドレス MACアドレスを指定
仮想PMD解説: BOND
● 識別名称
○ eth_pcap
● 解説
○ libpcapを用いた、raw socketによるパケット送受信を提供。
○ Linuxで見えるeth0, eth1, p1p1等を使いそのまま通信可能とする。
○ デフォルトではコンパイルされない点に注意。
● パラメータ
○ iface=name
○ インタフェース名を指定する。
● 使用例
○ --vdev eth_pcap0,iface=eth1
仮想PMD解説: PCAP
● 識別名称
○ eth_ring
● 解説
○ 送信パケットを折り返し受信するテスト用ポートを提供。
● パラメータ
○ 実用に供しないPMDのため略
仮想PMD解説: RING
● 識別名称
○ eth_xenvirt
● 解説
○ Xen準仮想化NICのPMDを提供する。
○ デフォルトではコンパイルされない。
● パラメータ
○ mac=MACアドレス
仮想PMD解説: XENVERT
● 識別名称
○ eth_pipe
● 解説
○ Lagopusに内蔵されている、2ポートを組にしてポート同士を接続した
形で動作するパイプ機能を提供するPMD。
● パラメータ
○ socket=n 使用メモリの所属socketを指定
● 使用例
○ --vdev eth_pipe0,socket=0
■ --vdev指定ひとつで、port id 0, 1を作成する。
■ 0に送信したパケットは1で受信。1に送信すれば0で受信。
仮想PMD解説: PIPE (Lagopus)

More Related Content

What's hot (20)

PDF
Ethernetの受信処理
Takuya ASADA
 
PDF
Intel DPDK Step by Step instructions
Hisaki Ohara
 
PDF
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
PPTX
Understanding DPDK
Denys Haryachyy
 
PDF
How to run P4 BMv2
Kentaro Ebisawa
 
PDF
Linux女子部 iptables復習編
Etsuji Nakai
 
PDF
DPDK In Depth
Kernel TLV
 
PDF
Spectre/Meltdownとその派生
MITSUNARI Shigeo
 
PDF
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
 
PDF
Performance Wins with eBPF: Getting Started (2021)
Brendan Gregg
 
PDF
仮想化環境におけるパケットフォワーディング
Takuya ASADA
 
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について(for comsys 2019 ver.)
Yasunori Goto
 
PPTX
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
NTT DATA Technology & Innovation
 
PDF
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
 
PPTX
ゼロから始める自作 CPU 入門
Hirotaka Kawata
 
PDF
EthernetやCPUなどの話
Takanori Sejima
 
PDF
並行実行制御の最適化手法
Sho Nakazono
 
PDF
DPDK QoS
Masaru Oki
 
PDF
EBPF and Linux Networking
PLUMgrid
 
PPTX
Debug dpdk process bottleneck & painpoints
Vipin Varghese
 
Ethernetの受信処理
Takuya ASADA
 
Intel DPDK Step by Step instructions
Hisaki Ohara
 
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
Understanding DPDK
Denys Haryachyy
 
How to run P4 BMv2
Kentaro Ebisawa
 
Linux女子部 iptables復習編
Etsuji Nakai
 
DPDK In Depth
Kernel TLV
 
Spectre/Meltdownとその派生
MITSUNARI Shigeo
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
 
Performance Wins with eBPF: Getting Started (2021)
Brendan Gregg
 
仮想化環境におけるパケットフォワーディング
Takuya ASADA
 
不揮発メモリ(NVDIMM)とLinuxの対応動向について(for comsys 2019 ver.)
Yasunori Goto
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
NTT DATA Technology & Innovation
 
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
 
ゼロから始める自作 CPU 入門
Hirotaka Kawata
 
EthernetやCPUなどの話
Takanori Sejima
 
並行実行制御の最適化手法
Sho Nakazono
 
DPDK QoS
Masaru Oki
 
EBPF and Linux Networking
PLUMgrid
 
Debug dpdk process bottleneck & painpoints
Vipin Varghese
 

Similar to Dpdk pmd (20)

PPTX
2014 1018 OSC-Fall Tokyo NETMF
Atomu Hidaka
 
PDF
FPGA+SoC+Linux実践勉強会資料
一路 川染
 
PDF
45分で理解する 最近のスパコン事情 斉藤之雄
Yukio Saito
 
PPTX
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
PDF
Past and Future of PowerShell
Kazuki Takai
 
PDF
MaxScaleを触ってみた
Fujishiro Takuya
 
PDF
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
Kuninobu SaSaki
 
PDF
Lagopus Router v19.07.1
Tomoya Hibi
 
PDF
Fpga online seminar by fixstars (1st)
Fixstars Corporation
 
PDF
FPGAスタートアップ資料
marsee101
 
PDF
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
Hitoshi Sato
 
PDF
Exploring the x64
FFRI, Inc.
 
PDF
2013 06-22osc nagoya-netmf
Atomu Hidaka
 
PDF
エバンジェリストが語るパワーシステム特論 ~ 第1回:IBMオフコンはいかにして生き残れたのか?
Takumi Kurosawa
 
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
PDF
seccamp2012 チューター発表
Hirotaka Kawata
 
PDF
楽天ネットワークエンジニアたちが目指す、次世代データセンターとは
Rakuten Group, Inc.
 
PPT
bc10 (Android 2.2対応) について @Gadget1 R2
BeatCraft
 
PDF
LattePandaの紹介
Hirokazu Egashira
 
2014 1018 OSC-Fall Tokyo NETMF
Atomu Hidaka
 
FPGA+SoC+Linux実践勉強会資料
一路 川染
 
45分で理解する 最近のスパコン事情 斉藤之雄
Yukio Saito
 
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
Past and Future of PowerShell
Kazuki Takai
 
MaxScaleを触ってみた
Fujishiro Takuya
 
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
Kuninobu SaSaki
 
Lagopus Router v19.07.1
Tomoya Hibi
 
Fpga online seminar by fixstars (1st)
Fixstars Corporation
 
FPGAスタートアップ資料
marsee101
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
Hitoshi Sato
 
Exploring the x64
FFRI, Inc.
 
2013 06-22osc nagoya-netmf
Atomu Hidaka
 
エバンジェリストが語るパワーシステム特論 ~ 第1回:IBMオフコンはいかにして生き残れたのか?
Takumi Kurosawa
 
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
seccamp2012 チューター発表
Hirotaka Kawata
 
楽天ネットワークエンジニアたちが目指す、次世代データセンターとは
Rakuten Group, Inc.
 
bc10 (Android 2.2対応) について @Gadget1 R2
BeatCraft
 
LattePandaの紹介
Hirokazu Egashira
 
Ad

More from Masaru Oki (20)

PDF
NetBSD移植の昔話
Masaru Oki
 
PDF
Rust-DPDK
Masaru Oki
 
PDF
Rust-DPDK
Masaru Oki
 
PDF
Lagopusとvagrant
Masaru Oki
 
PDF
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
 
PDF
今よりも少し(?)昔、 Windowsを作ろうとした話
Masaru Oki
 
PDF
Onieで遊んでみようとした話
Masaru Oki
 
PDF
GPD WINが来た!
Masaru Oki
 
PDF
新生Lagopus2017(仮称)
Masaru Oki
 
PDF
Lagopus as open flow hybrid switch 実践編
Masaru Oki
 
PDF
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
 
PDF
Lagopus どれだけ速いのか
Masaru Oki
 
PDF
Lagopus 0.2.7
Masaru Oki
 
PDF
Ryu+Lagopusで OpenFlowの動きを見てみよう
Masaru Oki
 
PDF
Lagopus match improvements
Masaru Oki
 
PDF
Lagopus 0.2.4
Masaru Oki
 
PDF
Open flow tunnel extension on lagopus vswitch
Masaru Oki
 
PDF
Lagopus as open flow hybrid switch
Masaru Oki
 
PDF
Net bsd advent calendar 2015 bpf
Masaru Oki
 
PDF
Using rump on NetBSD 7.0
Masaru Oki
 
NetBSD移植の昔話
Masaru Oki
 
Rust-DPDK
Masaru Oki
 
Rust-DPDK
Masaru Oki
 
Lagopusとvagrant
Masaru Oki
 
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
 
今よりも少し(?)昔、 Windowsを作ろうとした話
Masaru Oki
 
Onieで遊んでみようとした話
Masaru Oki
 
GPD WINが来た!
Masaru Oki
 
新生Lagopus2017(仮称)
Masaru Oki
 
Lagopus as open flow hybrid switch 実践編
Masaru Oki
 
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
 
Lagopus どれだけ速いのか
Masaru Oki
 
Lagopus 0.2.7
Masaru Oki
 
Ryu+Lagopusで OpenFlowの動きを見てみよう
Masaru Oki
 
Lagopus match improvements
Masaru Oki
 
Lagopus 0.2.4
Masaru Oki
 
Open flow tunnel extension on lagopus vswitch
Masaru Oki
 
Lagopus as open flow hybrid switch
Masaru Oki
 
Net bsd advent calendar 2015 bpf
Masaru Oki
 
Using rump on NetBSD 7.0
Masaru Oki
 
Ad

Dpdk pmd

  • 1. DPDK PMD Mar 6 2015, Masaru OKI (@masaru0714)
  • 2. Data Plane Development Kit http://dpdk.org/ ● ユーザーランドプログラムによる高速ネットワークI/Oライブラリ ● 現時点での最新バージョンは1.8.0 ● Intelによって開発され、現在x86(32bit,64bit)とPower(64bit)で動作 ● Linux用。x86(64bit)についてはFreeBSDにも対応している ● 指定コアを占有することによりコンテキストスイッチを回避 ● ハッシュテーブルやLongest Prefix Match等のユーティリティも提供 ● 割り込みを用いない高速I/Oデバイスドライバを提供している ○ Poll Mode Driver すなわちPMD DPDK
  • 3. DPDK PMDの構造 Linux kernel uio module (Linux標準) igb_uio module librte_pmd_e1000 librte_pmd_ixgbe librte_pmd_i40e and others librte_ether (ユーザプログラムが呼び出す APIを提供する) PCI vendor id, product id を識別し、PCIアドレス空間 を提供する 仮想PMDはuioと 無関係の存在 内部API登録 ユーザ空間で動作する、 各種NIC向けのデバイス ドライバ(物理PMD)
  • 4. 大きく2種類に分かれ、それぞれにいくつかの実装が用意されている。 ● 物理PMD ○ PCI上のデバイスのレジスタを読み書きし送受信を実現。 ○ 提供されているものは、ほぼIntel製品のみに対応している。 ○ vmxnet3などの準仮想化NICのドライバもこちら。 ○ 今後Mellanox製品やBroadcom 10GbEなどのPMDも提供予定。 ○ 自動選択。具体的にどのPMDを使っているか気にせずともよい。 ● 仮想PMD ○ 制御対象が物理NICでないドライバ。 ○ socketによる送受信、bonding、リングバッファによる折り返しなど。 ○ どのPMDをどれだけ使うかを指定する必要がある。 PMDの種類
  • 5. librte_pmd_e1000 Intel GbE (8254x, 8257x, 82580, i350, i210など) librte_pmd_ixgbe Intel 10GbE (82598, 82599, X540, X550) librte_pmd_i40e Intel 40GbE (XL710) librte_pmd_virtio Virtio 準仮想化NIC librte_pmd_vmxnet3vmxnet3 準仮想化NIC librte_pmd_enic Cisco VIC Ethernet NIC (Cisco Linux製品に搭載) DPDK2.0で対応予定 librte_pmd_fm10k Intel Red Rock Canyon Switch integrated NIC librte_pmd_mlx4 Mellanox ConnectX-3xx 10/40GbE dpdk_nic_bind.pyにより、ドライバをigb_uioに切り替えて使用する 物理PMD
  • 6. librte_pmd_af_packet AF_PACKETを使ったraw socketによる通信 librte_pmd_bond 複数NICを束ねるBonding機能を提供 librte_pmd_pcap libpcapを使ったraw socketによる通信 librte_pmd_ring リングバッファによる折り返し librte_pmd_xenvirt Xen準仮想化NIC用ドライバ DPDK2.0で対応予定 librte_pmd_null 空パケットを受信し続け送信パケットを捨てる 通常はlibrte_pmd_XXXとは呼ばず、XXX PMDと呼ぶ。 現在は、DPDKアプリのコマンドラインで指定することで使用できる。 指定しなければ、使用されない。 仮想PMD
  • 7. ● 送受信するポートを識別するための番号。ポート番号ともいう。 ● 0から順に割り当てられる。 ● 最初に、使用する仮想PMDの数だけ割り当てを行う。 ● その後unbindした物理NICの数だけ割り当てを行う。(PCIアドレス順) ○ PCIアドレスはethtool -i I/F名で確認できる。 例 PCAP PMDでひとつ、物理NIC 00:14.0と00:15.0のふたつの場合 port id 0: PCAP PMD port id 1: 00:14.0 port id 2: 00:15.0 port id
  • 8. DPDKコマンドラインにて下記を単数あるいは複数指定する。 --vdev PMDn,params[,params=value,...] PMD PMDの識別名称。PCAP PMDであればeth_pcap n 複数指定する際の識別番号。0以上重複なし。 params PMDごとに異なるパラメータ。カンマ区切りで複数指定可能。 仮想PMD指定方法
  • 9. ● 識別名称 ○ eth_af_packet ● 解説 ○ AF_PACKET socket, mmapを使用した送受信機能(Linuxのみ) ○ PCAP PMDと機能は同様、PCAPより速いがVLANのケアなし ● 必須パラメータ ○ iface=name インタフェース名を指定 iface=eth0 ● オプションパラメータ ○ qpairs=n キュー数を指定 qpairs=1 ○ blocksz=n ブロックサイズを指定 blocksz=4096 ○ framesz=n フレームサイズを指定 framesz=2048 ○ framecnt=n フレーム数を指定 framecnt=512 仮想PMD解説: AF_PACKET
  • 10. ● 識別名称 ○ eth_bond ● 解説 ○ 802.3ad LAGを提供する。 ● パラメータ ○ slave=PCIアドレス or name PMDのポートを指定(複数可) ○ primary=PCIアドレス or name PMDをポートを指定(単数) ○ mode=n モードを指定 ○ xmit_policy=l2 or l23 or l34 振り分けポリシーを指定 ○ socket_id=n 使用メモリの所属socketを指定 ○ mac=MACアドレス MACアドレスを指定 仮想PMD解説: BOND
  • 11. ● 識別名称 ○ eth_pcap ● 解説 ○ libpcapを用いた、raw socketによるパケット送受信を提供。 ○ Linuxで見えるeth0, eth1, p1p1等を使いそのまま通信可能とする。 ○ デフォルトではコンパイルされない点に注意。 ● パラメータ ○ iface=name ○ インタフェース名を指定する。 ● 使用例 ○ --vdev eth_pcap0,iface=eth1 仮想PMD解説: PCAP
  • 12. ● 識別名称 ○ eth_ring ● 解説 ○ 送信パケットを折り返し受信するテスト用ポートを提供。 ● パラメータ ○ 実用に供しないPMDのため略 仮想PMD解説: RING
  • 13. ● 識別名称 ○ eth_xenvirt ● 解説 ○ Xen準仮想化NICのPMDを提供する。 ○ デフォルトではコンパイルされない。 ● パラメータ ○ mac=MACアドレス 仮想PMD解説: XENVERT
  • 14. ● 識別名称 ○ eth_pipe ● 解説 ○ Lagopusに内蔵されている、2ポートを組にしてポート同士を接続した 形で動作するパイプ機能を提供するPMD。 ● パラメータ ○ socket=n 使用メモリの所属socketを指定 ● 使用例 ○ --vdev eth_pipe0,socket=0 ■ --vdev指定ひとつで、port id 0, 1を作成する。 ■ 0に送信したパケットは1で受信。1に送信すれば0で受信。 仮想PMD解説: PIPE (Lagopus)