qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/14] virtio: introduce support for GSO over UDP tunnel
@ 2025-09-12 13:06 Paolo Abeni
  2025-09-12 13:06 ` [PATCH v6 01/14] net: bundle all offloads in a single struct Paolo Abeni
                   ` (14 more replies)
  0 siblings, 15 replies; 34+ messages in thread
From: Paolo Abeni @ 2025-09-12 13:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Paolo Bonzini, Dmitry Fleytman, Akihiko Odaki, Jason Wang,
	Sriram Yagnaraman, Michael S. Tsirkin, Stefano Garzarella,
	Cornelia Huck, Luigi Rizzo, Giuseppe Lettieri, Vincenzo Maffione,
	Eric Blake, Markus Armbruster

Some virtualized deployments use UDP tunnel pervasively and are impacted
negatively by the lack of GSO support for such kind of traffic in the
virtual NIC driver.

The virtio_net specification recently introduced support for GSO over
UDP tunnel, and the kernel side of the implementation has been merged
into the net-next tree; this series updates the virtio implementation to
support such a feature.

Currently the qemu virtio support limits the feature space to 64 bits,
while the virtio specification allows for a larger number of features.
Specifically the GSO-over-UDP-tunnel-related virtio features use bits
65-69; the larger part of this series (patches 4-12) actually deals with
extending the features space.

The extended features are carried by fixed size uint64_t arrays,
bringing the current maximum features number to 128.

The patches use some syntactic sugar to try to minimize the otherwise
very large code churn. Specifically the extended features are boundled
in an union with 'legacy' features definition, allowing no changes in
the virtio devices not needing the extended features set.

The actual offload implementation is in patches 13 and 14 and boils down
to propagating the new offload to the tun devices and the vhost backend.

Patch 1 is a small pre-req refactor that ideally could enter the
tree separately; it's presented here in the same series to help
reviewers more easily getting the full picture, patch 2 updates to 
linux headers update script to deal with annotations recently introduce
in the kernel and patch 3 is a needed linux headers update.

Tested with basic stream transfer with all the possible permutations of
host kernel/qemu/guest kernel with/without GSO over UDP tunnel support,
vs snapshots creation and restore and vs migration.

The new features are disabled by default to avoid compatibilty issues.
They could be enabled with a later patch, together with the related
compatiblity entries.
---
v5 -> v6:
  - colleted ack-by/reviewed-by tags
  - re-included pre-req patch as per Michael's request
  - minor checkpatch and whitestaces fixes

v5: https://lists.gnu.org/archive/html/qemu-devel/2025-08/msg02005.html

v4 -> v5:
  - more sparse cleanup
  - dropped RFC tag
  - disable the new features by default

v4: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg05513.html

v3 -> v4:
  - more sparse cleanups
  - fix build failures on a couple of targets
v3: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg04872.html

v2 -> v3:
  - consolidated suffixes for new fields to '_ex'
  - avoid pre/post load trickery and relay on reset zeroing the features
  - cleaned-up virtio store implementation deduplicating a bit of code
  - many more cleanups, see the individual patches changelog for the
    details
  - I left patch 1 unmodified, still some hope we could live with that;)
v2: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg03000.html

Paolo Abeni (14):
  net: bundle all offloads in a single struct
  linux-headers: deal with counted_by annotation
  linux-headers: Update to Linux v6.17-rc1
  virtio: introduce extended features type
  virtio: serialize extended features state
  virtio: add support for negotiating extended features
  virtio-pci: implement support for extended features
  vhost: add support for negotiating extended features
  qmp: update virtio features map to support extended features
  vhost-backend: implement extended features support
  vhost-net: implement extended features support
  virtio-net: implement extended features support
  net: implement tunnel probing
  net: implement UDP tunnel features offloading

 hw/net/e1000e_core.c                          |   5 +-
 hw/net/igb_core.c                             |   5 +-
 hw/net/vhost_net-stub.c                       |   8 +-
 hw/net/vhost_net.c                            |  45 ++--
 hw/net/virtio-net.c                           | 234 ++++++++++++------
 hw/net/vmxnet3.c                              |  13 +-
 hw/virtio/vhost-backend.c                     |  62 ++++-
 hw/virtio/vhost.c                             |  68 +++--
 hw/virtio/virtio-bus.c                        |  11 +-
 hw/virtio/virtio-hmp-cmds.c                   |   3 +-
 hw/virtio/virtio-pci.c                        |  76 +++++-
 hw/virtio/virtio-qmp.c                        |  91 ++++---
 hw/virtio/virtio-qmp.h                        |   3 +-
 hw/virtio/virtio.c                            | 100 +++++---
 include/hw/virtio/vhost-backend.h             |   6 +
 include/hw/virtio/vhost.h                     |  56 ++++-
 include/hw/virtio/virtio-features.h           | 126 ++++++++++
 include/hw/virtio/virtio-net.h                |   2 +-
 include/hw/virtio/virtio-pci.h                |   2 +-
 include/hw/virtio/virtio.h                    |  11 +-
 include/net/net.h                             |  20 +-
 include/net/vhost_net.h                       |  33 ++-
 include/standard-headers/drm/drm_fourcc.h     |  56 ++++-
 include/standard-headers/linux/ethtool.h      |   4 +-
 .../linux/input-event-codes.h                 |   8 +
 include/standard-headers/linux/input.h        |   1 +
 include/standard-headers/linux/pci_regs.h     |   9 +
 include/standard-headers/linux/vhost_types.h  |   5 +
 include/standard-headers/linux/virtio_net.h   |  33 +++
 linux-headers/LICENSES/preferred/GPL-2.0      |  10 +-
 linux-headers/asm-arm64/unistd_64.h           |   2 +
 linux-headers/asm-generic/unistd.h            |   8 +-
 linux-headers/asm-loongarch/unistd_64.h       |   2 +
 linux-headers/asm-mips/unistd_n32.h           |   2 +
 linux-headers/asm-mips/unistd_n64.h           |   2 +
 linux-headers/asm-mips/unistd_o32.h           |   2 +
 linux-headers/asm-powerpc/kvm.h               |  13 -
 linux-headers/asm-powerpc/unistd_32.h         |   2 +
 linux-headers/asm-powerpc/unistd_64.h         |   2 +
 linux-headers/asm-riscv/kvm.h                 |   1 +
 linux-headers/asm-riscv/unistd_32.h           |   2 +
 linux-headers/asm-riscv/unistd_64.h           |   2 +
 linux-headers/asm-s390/unistd_32.h            |   2 +
 linux-headers/asm-s390/unistd_64.h            |   2 +
 linux-headers/asm-x86/unistd_32.h             |   2 +
 linux-headers/asm-x86/unistd_64.h             |   2 +
 linux-headers/asm-x86/unistd_x32.h            |   2 +
 linux-headers/linux/iommufd.h                 | 154 +++++++++++-
 linux-headers/linux/kvm.h                     |   2 +
 linux-headers/linux/vfio.h                    |  12 +-
 linux-headers/linux/vhost.h                   |  35 +++
 net/net.c                                     |  17 +-
 net/netmap.c                                  |   3 +-
 net/tap-bsd.c                                 |   8 +-
 net/tap-linux.c                               |  38 ++-
 net/tap-linux.h                               |   9 +
 net/tap-solaris.c                             |   9 +-
 net/tap-stub.c                                |   8 +-
 net/tap.c                                     |  21 +-
 net/tap_int.h                                 |   5 +-
 qapi/virtio.json                              |   9 +-
 scripts/update-linux-headers.sh               |   1 +
 62 files changed, 1196 insertions(+), 291 deletions(-)
 create mode 100644 include/hw/virtio/virtio-features.h

-- 
2.51.0



^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2025-09-22 13:29 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-12 13:06 [PATCH v6 00/14] virtio: introduce support for GSO over UDP tunnel Paolo Abeni
2025-09-12 13:06 ` [PATCH v6 01/14] net: bundle all offloads in a single struct Paolo Abeni
2025-09-12 13:06 ` [PATCH v6 02/14] linux-headers: deal with counted_by annotation Paolo Abeni
2025-09-17 12:10   ` Stefano Garzarella
2025-09-12 13:06 ` [PATCH v6 03/14] linux-headers: Update to Linux v6.17-rc1 Paolo Abeni
2025-09-12 13:06 ` [PATCH v6 04/14] virtio: introduce extended features type Paolo Abeni
2025-09-17 12:12   ` Stefano Garzarella
2025-09-17 12:24     ` Stefano Garzarella
2025-09-12 13:06 ` [PATCH v6 05/14] virtio: serialize extended features state Paolo Abeni
2025-09-17 12:13   ` Stefano Garzarella
2025-09-12 13:06 ` [PATCH v6 06/14] virtio: add support for negotiating extended features Paolo Abeni
2025-09-17 12:19   ` Stefano Garzarella
2025-09-12 13:06 ` [PATCH v6 07/14] virtio-pci: implement support for " Paolo Abeni
2025-09-17 12:25   ` Stefano Garzarella
2025-09-12 13:06 ` [PATCH v6 08/14] vhost: add support for negotiating " Paolo Abeni
2025-09-17 12:29   ` Stefano Garzarella
2025-09-12 13:07 ` [PATCH v6 09/14] qmp: update virtio features map to support " Paolo Abeni
2025-09-12 13:42   ` Markus Armbruster
2025-09-12 13:57     ` Paolo Abeni
2025-09-12 14:04       ` Markus Armbruster
2025-09-17 12:35   ` Stefano Garzarella
2025-09-22 12:55   ` Michael S. Tsirkin
2025-09-22 13:10     ` Paolo Abeni
2025-09-22 13:15       ` Michael S. Tsirkin
2025-09-22 13:28         ` Paolo Abeni
2025-09-12 13:07 ` [PATCH v6 10/14] vhost-backend: implement extended features support Paolo Abeni
2025-09-17 12:29   ` Stefano Garzarella
2025-09-12 13:07 ` [PATCH v6 11/14] vhost-net: " Paolo Abeni
2025-09-12 13:07 ` [PATCH v6 12/14] virtio-net: " Paolo Abeni
2025-09-12 13:07 ` [PATCH v6 13/14] net: implement tunnel probing Paolo Abeni
2025-09-17 12:36   ` Stefano Garzarella
2025-09-12 13:07 ` [PATCH v6 14/14] net: implement UDP tunnel features offloading Paolo Abeni
2025-09-15 14:39 ` [PATCH v6 00/14] virtio: introduce support for GSO over UDP tunnel Lei Yang
2025-09-19  9:09   ` Paolo Abeni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).