x**3な人生

基本的にはメモ

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を返す。

以上