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.

Reply via email to