Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
DPDK PMD
Mar 6 2015, Masaru OKI (@masaru0714)
Data Plane Development Kit
http://dpdk.org/
● ユーザーランドプログラムによる高速ネットワークI/Oライブラリ
● 現時点での最新バージョンは1.8.0
● Intelによって開発され、現在x86(3...
DPDK
PMDの構造
Linux kernel
uio module (Linux標準)
igb_uio module
librte_pmd_e1000 librte_pmd_ixgbe librte_pmd_i40e and others
...
大きく2種類に分かれ、それぞれにいくつかの実装が用意されている。
● 物理PMD
○ PCI上のデバイスのレジスタを読み書きし送受信を実現。
○ 提供されているものは、ほぼIntel製品のみに対応している。
○ vmxnet3などの準仮想化NI...
librte_pmd_e1000 Intel GbE (8254x, 8257x, 82580, i350, i210など)
librte_pmd_ixgbe Intel 10GbE (82598, 82599, X540, X550)
lib...
librte_pmd_af_packet AF_PACKETを使ったraw socketによる通信
librte_pmd_bond 複数NICを束ねるBonding機能を提供
librte_pmd_pcap libpcapを使ったraw soc...
● 送受信するポートを識別するための番号。ポート番号ともいう。
● 0から順に割り当てられる。
● 最初に、使用する仮想PMDの数だけ割り当てを行う。
● その後unbindした物理NICの数だけ割り当てを行う。(PCIアドレス順)
○ PCI...
DPDKコマンドラインにて下記を単数あるいは複数指定する。
--vdev PMDn,params[,params=value,...]
PMD PMDの識別名称。PCAP PMDであればeth_pcap
n 複数指定する際の識別番号。0以上重複...
● 識別名称
○ eth_af_packet
● 解説
○ AF_PACKET socket, mmapを使用した送受信機能(Linuxのみ)
○ PCAP PMDと機能は同様、PCAPより速いがVLANのケアなし
● 必須パラメータ
○ if...
● 識別名称
○ eth_bond
● 解説
○ 802.3ad LAGを提供する。
● パラメータ
○ slave=PCIアドレス or name PMDのポートを指定(複数可)
○ primary=PCIアドレス or name PMDをポ...
● 識別名称
○ eth_pcap
● 解説
○ libpcapを用いた、raw socketによるパケット送受信を提供。
○ Linuxで見えるeth0, eth1, p1p1等を使いそのまま通信可能とする。
○ デフォルトではコンパイルされ...
● 識別名称
○ eth_ring
● 解説
○ 送信パケットを折り返し受信するテスト用ポートを提供。
● パラメータ
○ 実用に供しないPMDのため略
仮想PMD解説: RING
● 識別名称
○ eth_xenvirt
● 解説
○ Xen準仮想化NICのPMDを提供する。
○ デフォルトではコンパイルされない。
● パラメータ
○ mac=MACアドレス
仮想PMD解説: XENVERT
● 識別名称
○ eth_pipe
● 解説
○ Lagopusに内蔵されている、2ポートを組にしてポート同士を接続した
形で動作するパイプ機能を提供するPMD。
● パラメータ
○ socket=n 使用メモリの所属socketを指定
● 使...
Upcoming SlideShare
Loading in …5
×

Dpdk pmd

4,448 views

Published on

Description and usage of DPDK Poll Mode Driver (in Japanese)

Published in: Software
  • Be the first to comment

Dpdk pmd

  1. 1. DPDK PMD Mar 6 2015, Masaru OKI (@masaru0714)
  2. 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. 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. 4. 大きく2種類に分かれ、それぞれにいくつかの実装が用意されている。 ● 物理PMD ○ PCI上のデバイスのレジスタを読み書きし送受信を実現。 ○ 提供されているものは、ほぼIntel製品のみに対応している。 ○ vmxnet3などの準仮想化NICのドライバもこちら。 ○ 今後Mellanox製品やBroadcom 10GbEなどのPMDも提供予定。 ○ 自動選択。具体的にどのPMDを使っているか気にせずともよい。 ● 仮想PMD ○ 制御対象が物理NICでないドライバ。 ○ socketによる送受信、bonding、リングバッファによる折り返しなど。 ○ どのPMDをどれだけ使うかを指定する必要がある。 PMDの種類
  5. 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. 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. 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. 8. DPDKコマンドラインにて下記を単数あるいは複数指定する。 --vdev PMDn,params[,params=value,...] PMD PMDの識別名称。PCAP PMDであればeth_pcap n 複数指定する際の識別番号。0以上重複なし。 params PMDごとに異なるパラメータ。カンマ区切りで複数指定可能。 仮想PMD指定方法
  9. 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. 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. 11. ● 識別名称 ○ eth_pcap ● 解説 ○ libpcapを用いた、raw socketによるパケット送受信を提供。 ○ Linuxで見えるeth0, eth1, p1p1等を使いそのまま通信可能とする。 ○ デフォルトではコンパイルされない点に注意。 ● パラメータ ○ iface=name ○ インタフェース名を指定する。 ● 使用例 ○ --vdev eth_pcap0,iface=eth1 仮想PMD解説: PCAP
  12. 12. ● 識別名称 ○ eth_ring ● 解説 ○ 送信パケットを折り返し受信するテスト用ポートを提供。 ● パラメータ ○ 実用に供しないPMDのため略 仮想PMD解説: RING
  13. 13. ● 識別名称 ○ eth_xenvirt ● 解説 ○ Xen準仮想化NICのPMDを提供する。 ○ デフォルトではコンパイルされない。 ● パラメータ ○ mac=MACアドレス 仮想PMD解説: XENVERT
  14. 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)

×