On 1/18/2018 1:51 PM, Matan Azrad wrote: > Virtual machines hosted by Hyper-V/Azure platforms are fitted with simplified > virtual network devices named NetVSC that are used for fast communication > between VM to VM, VM to hypervisor, and the outside. > > They appear as standard system netdevices to user-land applications, the main > difference being they are implemented on top of VMBUS instead of emulated PCI > devices. > > While this reads like a case for a standard DPDK PMD, there is more to it. > > To accelerate outside communication, NetVSC devices as they appear in a VM > can be paired with physical SR-IOV virtual function (VF) devices owned by > that same VM. Both netdevices share the same MAC address in that case. > > When paired, egress and most of the ingress traffic flow through the VF > device, while part of it (e.g. multicasts, hypervisor control data) still > flows through NetVSC. Moreover VF devices are not retained and disappear > during VM migration; from a VM standpoint, they can be hot-plugged anytime > with NetVSC acting as a fallback. > > Running DPDK applications in such a context involves driving VF devices using > their dedicated PMDs in a vendor-independent fashion (to benefit from maximum > performance without writing dedicated code) while simultaneously listening to > NetVSC and handling the related hot-plug events. > > This new virtual driver (referred to as "vdev_netvsc" from this point on) > automatically coordinates the Hyper-V/Azure-specific management part > described above by relying on vendor-specific, failsafe and tap PMDs to > expose a single consolidated Ethernet device usable directly by existing > applications. > > .------------------. > | DPDK application | > `--------+---------' > | > .------+------. > | DPDK ethdev | > `------+------' Control > | | > .------------+------------. v .--------------------. > | failsafe PMD +---------+ vdev_netvsc driver | > `--+-------------------+--' `--------------------' > | | > | .........|......... > | : | : > .----+----. : .----+----. : > | tap PMD | : | any PMD | : > `----+----' : `----+----' : <-- Hot-pluggable > | : | : > .------+-------. : .-----+-----. : > | NetVSC-based | : | SR-IOV VF | : > | netdevice | : | device | : > `--------------' : `-----------' : > :.................: > > > > v2 changes(Adrien): > > - Renamed driver from "hyperv" to "vdev_netvsc". This change covers > documentation and symbols prefix. > - Driver is now tagged EXPERIMENTAL. > - Replaced ether_addr_from_str() with a basic sscanf() call. > - Removed debugging code (memset() poisoning). > - Fixed hyperv_iface_is_netvsc()'s buffer allocation according to comments. > - Removed hyperv_basename(). > - Discarded unused variables through __rte_unused. > - Added separate but necessary free() bugfix for failsafe PMD. > - Added file descriptor input support to failsafe PMD. > - Replaced temporary bash execution; failsafe now reads device definitions > directly through a pipe without an intermediate bash one-liner. > - Expanded DEBUG/INFO/WARN/ERROR() macros as PMD_DRV_LOG(). > - Added dynamic log type (pmd.vdev_netvsc). > - Modified initialization code to probe devices immediately during startup. > - Fixed several snprintf() return value checks ("ret >= sizeof(foo)" is more > appropriate than "ret >= sizeof(foo) - 1"). > > v3 changes(Matan): > - Fixed clang compilation in V2. > - Removed hotplug remove code from the new driver. > - Supported probed sub-devices getting in fail-safe. > - Added automatic probing for HyperV VM systems. > - Added option to ignore the automatic probing. > - Skiped routed NetVSC devices probing. > - Adjusted documentation and semantics. > - Replaced maintainer. > > v4 changes(Matan): > - Align descriptions of context struct(Stephen suggestion). > - Skip non-ethernet devices in netdev loop(Stephen suggestion). > - Use different variable names in "add fd parameter"(Gaetan suggestion). > - Change name of get port id function in "add automatic probing"(Gaetan > suggestion). > - Update internal fail-safe devargs in case of probed device(Gaetan > suggestion). > - use deferent commit title instead of "support probed sub-devices > getting"(Gaetan suggestion). > > v5 changes(Matan): > - Improve fail-safe documentation as Gaetan suggested. > - Fix fcntl paramenter. > > v6 changes: > - fp!=NULL => fp==NULL in "add fd parameter". > > Adrien Mazarguil (1): > net/failsafe: fix invalid free > > Matan Azrad (7): > net/failsafe: add "fd" parameter > net/failsafe: add probed etherdev capture > net/vdev_netvsc: introduce Hyper-V platform driver > net/vdev_netvsc: implement core functionality > net/vdev_netvsc: skip routed netvsc probing > net/vdev_netvsc: add "force" parameter > net/vdev_netvsc: add automatic probing
Series applied to dpdk-next-net/master, thanks.