DPDKのPort Hotplug Frameworkを調べる
はじめに
ここの意訳。
45. Port Hotplug Framework — Data Plane Development Kit 18.11.0-rc0 documentation
内容
Port Hotplugフレームワークは実行中のDPDKアプリケーションにおいてポートのアタッチ、 デタッチを可能とする。 このPort HotplugはPMDの実装に依存するため、PMDによりサポートされていないものもある。 デタッチされたポートの削除は行わない。 また物理NICのポートはカーネルによるPCI Hotplugのサポートが必要である。
概要
Port Hotplugフレームワークの要件:
Port Hotplugを扱うDPDKアプリケーションは自身のポートを管理しなければならない。 Port HotplugフレームワークはDPDKアプリケーションからポートを管理できるように実装されている。 例えばDPDKアプリケーションがアタッチの関数を呼び出すと、アタッチされたポートのナンバーが返される。 またデタッチするにはそのナンバーを指定する。
物理デバイスはカーネルによるサポートが必要である。 物理デバイスのポートをアタッチするために、まずカーネルのユーザー空間I/Oドライバが そのデバイスを認識する。 そしてDPDKアプリケーションからポートをアタッチするためにPort Hotplugの関数を呼び出すことができる。
ポートをデタッチする前にstopとcloseを行う必要がある。 このためにDPDKアプリケーションはデタッチを行う前に
rte_eth_dev_stop()
とrte_eth_dev_close()
を 呼び出す必要がある。 これらの関数はPMDの終了化処理を行う。Port HotplugフレームワークはレガシーなDPDKアプリケーションの振る舞いには影響しない。 もしPort Hotplugの関数を呼び出さなければ、レガシーなDPDKアプリケーションはそのまま動作する。
Port Hotplug APIの概要
アタッチ
rte_eth_dev_attach()
はDPDKアプリケーションにポートをアタッチし、
アタッチされたポートのナンバーを返す。
なおデバイスはユーザー空間I/Oドライバに認識される必要がある。
この関数は0000:01:00.0
の様なPCIアドレスもしくはnet_pcap0,iface=eth0
の様な仮想デバイス名を受け取る。
この仮想デバイス名は-vdev
オプションで与えるものと同じである。
デタッチ
rte_eth_dev_detach()
はDPDKアプリケーションからデバイスをデタッチする。
返り値はそのデバイスのPCIアドレスもしくは仮想デバイス名となる。
参考
testpmd
においてPort Hotplugフレームワークが使用されている。
制限事項
- Port HotplugのAPIはスレッドセーフで無い。
- Linuxのみサポートし、BSDではサポートされない。
- デタッチをサポートしないPMDがある。デタッチのためにはバスにおいてhot-unplugがサポートされている必要がある。もしそうで無い場合、
rte_eth_dev_detach()
はENOTSUP
を返す。