[dpdk-dev] DPDK 21.11+ Windows Roadmap

Dmitry Kozlyuk dmitry.kozliuk at gmail.com
Fri Aug 27 02:18:53 CEST 2021

This roadmap has been discussed on Windows community calls Aug 5 and Aug 19
and it met no principal objections. It extends beyond the nearest release,
but it is useful to have a comprehensive backlog in one place.

In 21.11 it looks realistic to have:

* static build of DPDK installed and consumed without issues (1.1)
  - the new threading API will be the top priority (1.1.4, 1.1.5)
* interrupt support for netuio (2)
* virtio PMD (3.1)
* vmxnet3 on VMWare hypervisor (3.2)
* unit tests (4.3)
* internal refactoring done (4.1, 4.2)

It is expected to at least make some progress:

* supporting cross-DLL variables, including thread-local (1.2.1)
* establishing a process to provide kernel-mode driver builds (1.3)


1. General Availability of DPDK on Windows

   Anyone who tries to build, install, and consume DPDK on Windows hits more
   or less manageable issues. The goal is to make the process friction-less.

1.1. Level 1: static userspace libraries

     The last Unix-specific bits must be removed from public headers.
     The hardest part is to replace pthread shim with the new threading API.

1.1.1. Remove sys/queue.h [sysq] (William Tu).
1.1.2. Remove sched.h (Dmitry Kozlyuk).
1.1.3. Fix missing exports (DmitryK).
1.1.4. New threading API [thread1, thread2] (Narcisa Ana Maria Vasile).
1.1.5. Meson < 0.59.1 cannot consume libdpdk.pc [meson1] (solved).
1.1.6. Meson >= 0.58 cannot build DPDK [meson2] (DmitryK to track).
1.1.7. Try to make Npcap ship a pkg-config file [npcap] (DmitryK, optional).
1.1.8. Rename `min`, `max`, `s_addr` [deprecation] (DmitryK, required).

1.2. Level 2: shared userspace libraries

     Dynamic build is required for DPDK to become a shared Windows component.
     GCC and clang take very different approach to implementing thread-local
     storage; there's a risk that only clang can be supported for now.

1.2.1. Support cross-DLL variables, including thread-local (Tyler Retzlaff).
1.2.2. Reconsider embedding getopt into EAL, unsuitable for shared build.

1.3. Level 3: kernel-mode drivers

     Currently netuio and virt2phys must be built manually, which
     requires environment setup, and driver signature check must be disabled
     to load them, which is unsuitable for production environment.
     The goal is to have a contiguous process to publish latest driver builds
     (unsigned) and to sign and publish selected stable versions.
     There is a large organizational part in this task.

     Microsoft will drive the effort, Yan Vugenfirer has volunteered to help.
     virt2phys must undergo a security hardening to be signed [virt2phys].

2. Interrupt support (DmitryK - development, Intel - help with testing)

   Goal: to enable usage of DPDK for burst-oriented tasks (Boulder Imaging
   case) and CPU-constrained environment (no cores to dedicate for polling).
   Intel repeatedly expressed interest, Microsoft will need this eventually.

3. NIC support

3.1. Enable net/virtio (and net/ena?)

     Windows guests will be able to use the most widespread
     paravirtual devices on Linux hosts (William Tu).

3.2. Fix netuio for net/vmxnet3 on VMWare hypervisor

     The netuio kernel driver fails to load for vmxnet3 devices in VMWare
     hypervisor, while it works in QEMU. Microsoft will investigate the
     cause that is traced to be in Windows kernel outside of netuio.

3.3. Make Npcap provide a pkg-config file

     Npcap does not provide a pkg-config file, while modern libpcap does.
     DmitryK will work with Npcap developers to add it [npcap].

4. Miscellaneous

4.1. Refactor bus/pci (DmitryK)

     Currently netuio maps BARs at PCI bus scan. This is against DPDK model
     and can break certain scenarios, like running apps with different sets of
     available PMDs. PCI bus driver code must be refactored.
4.2. Move from Setup API to cfgmgr32 API in EAL and bus/pci (DmitryK)

     Setup API is deprecated, also Tyler indicated it causes layering
     violation warnings by Microsoft internal tools. To make DPDK a good
     Windows citizen, cfgmgr32 should be used to work with devices and driver

4.3. Enable unit tests [unit] (Jie Zhou)

4.5. Add WPP(?) tracing to netuio

     Debugging netuio loading issues in VMWare case appeared to be impossible
     until adding debug prints to pinpoint the place of failure. Tracing all
     errors at least would help. virt2phys is also getting tracing in the
     recent patch series. End-users can collect traces and attach them to
     bug reports, this should be added to DPDK user documentation.
     It is unclear who will do this and when, but Microsoft approves the
     idea and can provide guidance on tracing technologies.

4.6. Find a way to install netuio without GUI.

     Currently in requires Device Manager GUI, which is absent in WS Core,
     it is also inconvenient to lack commands for copy&paste.
     Investigate [devmgr].


[sysq]: http://patchwork.dpdk.org/project/dpdk/list/?series=18438
[thread1]: http://patchwork.dpdk.org/project/dpdk/list/?series=18360
[thread2]: http://patchwork.dpdk.org/project/dpdk/list/?series=18338
[meson1]: https://github.com/mesonbuild/meson/issues/9091
[meson2]: https://github.com/mesonbuild/meson/issues/8981
[npcap]: https://github.com/nmap/npcap/issues/299
[deprecation]: http://git.dpdk.org/dpdk/commit/?id=c4379ee599ef2f6feea914566bd494f66f7e8ad0
[unit]: http://patchwork.dpdk.org/project/dpdk/list/?series=18337
[devmgr]: https://stackoverflow.com/a/56848828/3398329

More information about the dev mailing list