This series implements multiqueue support for vhost-user mode, allowing passt to utilize multiple queue pairs. There is no improved network performance because we keep using only one thread. The implementation introduces a --max-queues parameter to configure up to 16 queue pairs (32 virtqueues) in vhost-user mode. Packets are routed to the appropriate RX queue based on which TX queue they originated from, enabling the guest kernel to distribute network traffic across multiple queues and vCPUs. This series adds: - configuration support for multiqueue via --max-queues parameter - one packet pool per queue pair instead of shared pools - queue parameter threading throughout the network stack - a significant refactoring that propagates queue information through all protocol handlers (TCP, UDP, ICMP, ARP, DHCP, DHCPv6, NDP) - flow-aware queue routing that matches RX queue selection to the incoming TX queue, maintaining proper packet affinity - test coverage with VHOST_USER_MQ environment variable to validate multiqueue functionality across all protocols (TCP, UDP, ICMP) and services (DHCP, NDP) Current behavior: TX queue selection is controlled by the guest kernel, while RX packets are routed to queues based on their associated flows. Host-initiated flows currently default to queue 0. The RX queue of a flow is updated on each new packet from the TX queue to maintain affinity. The changes maintain backward compatibility - without --max-queues, behavior remains unchanged with single-queue operation. v2: - New patch: "tap: Remove pool parameter from tap4_handler() and tap6_handler()" to clean up unused parameters before adding queue pair parameter - Changed to one packet pool per queue pair instead of shared pools across all queue pairs - Split "multiqueue: Add queue-aware flow management..." into two patches: - "tap: Add queue pair parameter throughout the packet processing path" - "flow: Add queue pair tracking to flow management" - Updated test infrastructure patch with refined implementation Laurent Vivier (6): tap: Remove pool parameter from tap4_handler() and tap6_handler() vhost-user: Enable multiqueue vhost-user: Add queue pair parameter throughout the network stack tap: Add queue pair parameter throughout the packet processing path flow: Add queue pair tracking to flow management test: Add multiqueue support to vhost-user test infrastructure arp.c | 12 ++-- arp.h | 4 +- conf.c | 31 ++++++++- dhcp.c | 5 +- dhcp.h | 2 +- dhcpv6.c | 12 ++-- dhcpv6.h | 2 +- flow.c | 30 +++++++++ flow.h | 17 +++++ fwd.c | 4 +- icmp.c | 25 ++++--- icmp.h | 2 +- ndp.c | 32 +++++---- ndp.h | 5 +- passt.h | 2 + tap.c | 173 +++++++++++++++++++++++++++++-------------------- tap.h | 20 +++--- tcp.c | 66 +++++++++++-------- tcp.h | 11 ++-- tcp_vu.c | 8 ++- test/lib/setup | 58 +++++++++++++---- test/run | 23 +++++++ udp.c | 39 ++++++----- udp.h | 12 ++-- udp_flow.c | 8 ++- udp_flow.h | 2 +- udp_vu.c | 4 +- vhost_user.c | 38 ++++++----- virtio.h | 2 +- vu_common.c | 15 +++-- vu_common.h | 3 +- 31 files changed, 443 insertions(+), 224 deletions(-) -- 2.51.0