[dpdk-dev] DPDK 21.11+ Windows Roadmap
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.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.
More information about the dev