[SRU][N:linux-gke][PULL] Support larger gVNIC queue depth on Gen3+ GCE VMs
Rickey Castillo Valenzuela
rickey.castillo.valenzuela at canonical.com
Thu Aug 13 21:25:55 UTC 2026
BugLink: https://bugs.launchpad.net/bugs/2153950
SRU Justification
[Impact]
Currently, the maximum queue depth supported for gVNIC on overcommitted
Gen3+
VMs such as N4 is 1K, whereas the maximum queue depth supported on
Gen1/Gen2 VMs
is 2K. Customers who are migrating their workloads from N2 to N4 have
requested
higher queue depth support on N4 VMs. This patchset was already applied
on GCP
kernel and now is being added for GKE.
[Fix]
Target patches:
a2f19184014f ("gve: Enable reading max ring size from the device in
DQO-QPL mode")
07993df56091 ("gve: Update QPL page registration logic")
Noble (6.8):
Several additional patches were included to enable all the features
required
for the target patches, and reduce how much distance these patches have
from
upstream. Details on the backport are in each commit message. Generally,
later commits depend on earlier commits. Fixes for any prerequisite
patches here
were applied after the target commits. This is the patch series that was
included in GCP plus a fix commit (d676c9a73bdc) compared to when GCP PR
was
submitted. The plan to submit this fix to GCP too.
7cea48b9a4b2 ("gve: Define config structs for queue allocation")
1dfc2e46117e ("gve: Refactor napi add and remove functions")
f13697cc7a19 ("gve: Switch to config-aware queue allocation")
92a6d7a4010c ("gve: Refactor gve_open and gve_close")
5f08cd3d6423 ("gve: Alloc before freeing when adjusting queues")
f3753771e7cc ("gve: Alloc before freeing when changing features")
0b43cf527d1d ("gve: Add header split device option")
5e37d8254e7f ("gve: Add header split data path")
056a70924a02 ("gve: Add header split ethtool stats")
4cbc70f6ec5e ("gve: simplify setting decriptor count defaults")
5dee3c702c20 ("gve: make the completion and buffer ring size equal for
DQO")
b94d3703c1a6 ("gve: set page count for RX QPL for GQI and DQO queue
formats")
ed4fb326947d ("gve: add support to read ring size ranges from the device")
834f9458f2fd ("gve: add support to change ring size via ethtool")
fdf412374379 ("gve: Remove qpl_cfg struct since qpl_ids map with queues
respectively")
087b24de5c82 ("queue_api: define queue api")
dcecfcf21bd1 ("gve: Make the GQ RX free queue funcs idempotent")
242f30fe692e ("gve: Add adminq funcs to add/remove a single Rx queue")
5abc37bdcbc5 ("gve: Make gve_turn(up|down) ignore stopped queues")
864616d97a45 ("gve: Make gve_turnup work for nonempty queues")
9a5e0776d11f ("gve: Avoid rescheduling napi if on wrong cpu")
770f52d5a0ed ("gve: Reset Rx ring state in the ring-stop funcs")
af9bcf910b1f ("gve: Account for stopped queues when reading NIC stats")
ee24284e2a10 ("gve: Alloc and free QPLs with the rings")
c93462b914db ("gve: Implement queue api")
07993df56091 ("gve: Update QPL page registration logic")
a2f19184014f ("gve: Enable reading max ring size from the device in
DQO-QPL mode")
fba917b169be ("gve: Fix use of netif_carrier_ok()")
de63ac44a527 ("gve: fix XDP allocation path in edge cases")
3d970eda0034 ("gve: defer interrupt enabling until NAPI registration")
d676c9a73bdc ("gve: fix header buffer corruption with header-split and
HW-GRO")
[Test Plan]
* Compile Tested
* The following output indicates the feature is missing:
$ sudo ethtool -G ens3 rx 4096
netlink error: Operation not supported
So the test plan for Canonical was to confirm that `sudo ethtool -G
enp0s0 rx
4096` exits successfully without an error.
* As well as this command, it should return 4096 as max no 1024:
ethtool -g enp0s0
* This patchset for the GCP version has been in production for a few cycles
[Regression potential]
On Noble, regressions should only be possible when using the gVNIC
device for
networking (which depends on the gve driver), and could most likely
result in
networking failures on those configurations.
[Other]
SF: 00433236 (for GCP variants)
PIT: 509371317 (for GKE variants)
----------------------------------------------------------------------------------
The following changes since commit
f5239ce8ce612354420d8f6f89e81dcfd99b664a:
UBUNTU: Ubuntu-gke-6.8.0-1061.69 (2026-08-10 21:32:33 -0400)
are available in the Git repository at:
git+ssh://git.launchpad.net/~rickeycv/ubuntu/+source/linux-gke/+git/noble
gve-for-noble-gke-pr
for you to fetch changes up to 6ebf026065c35bf3807ebd8280a473e006c4a83f:
gve: fix header buffer corruption with header-split and HW-GRO
(2026-08-12 16:11:18 -0600)
----------------------------------------------------------------
Ankit Garg (2):
gve: defer interrupt enabling until NAPI registration
gve: fix header buffer corruption with header-split and HW-GRO
Harshitha Ramamurthy (5):
gve: simplify setting decriptor count defaults
gve: make the completion and buffer ring size equal for DQO
gve: set page count for RX QPL for GQI and DQO queue formats
gve: add support to read ring size ranges from the device
gve: add support to change ring size via ethtool
Ian Whitfield (1):
UBUNTU: SAUCE: Revert "gve: defer interrupt enabling until NAPI
registration"
Jeroen de Borst (3):
gve: Add header split device option
gve: Add header split data path
gve: Add header split ethtool stats
Joshua Washington (1):
gve: fix XDP allocation path in edge cases
Matt Olson (2):
gve: Update QPL page registration logic
gve: Enable reading max ring size from the device in DQO-QPL mode
Mina Almasry (1):
queue_api: define queue api
Praveen Kaligineedi (1):
gve: Fix use of netif_carrier_ok()
Shailend Chand (15):
gve: Define config structs for queue allocation
gve: Refactor napi add and remove functions
gve: Switch to config-aware queue allocation
gve: Refactor gve_open and gve_close
gve: Alloc before freeing when adjusting queues
gve: Alloc before freeing when changing features
gve: Make the GQ RX free queue funcs idempotent
gve: Add adminq funcs to add/remove a single Rx queue
gve: Make gve_turn(up|down) ignore stopped queues
gve: Make gve_turnup work for nonempty queues
gve: Avoid rescheduling napi if on wrong cpu
gve: Reset Rx ring state in the ring-stop funcs
gve: Account for stopped queues when reading NIC stats
gve: Alloc and free QPLs with the rings
gve: Implement queue api
Ziwei Xiao (1):
gve: Remove qpl_cfg struct since qpl_ids map with queues
respectively
drivers/net/ethernet/google/gve/gve.h | 191
++++++++++++++++++++------------
drivers/net/ethernet/google/gve/gve_adminq.c | 261
+++++++++++++++++++++++++++-----------------
drivers/net/ethernet/google/gve/gve_adminq.h | 64 ++++++++---
drivers/net/ethernet/google/gve/gve_dqo.h | 24 +++-
drivers/net/ethernet/google/gve/gve_ethtool.c | 167
++++++++++++++++++++++++----
drivers/net/ethernet/google/gve/gve_main.c | 1099
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------------------------------
drivers/net/ethernet/google/gve/gve_rx.c | 209
++++++++++++++++++++++++-----------
drivers/net/ethernet/google/gve/gve_rx_dqo.c | 258
+++++++++++++++++++++++++++++++++++--------
drivers/net/ethernet/google/gve/gve_tx.c | 138
++++++++++++++++-------
drivers/net/ethernet/google/gve/gve_tx_dqo.c | 112 ++++++++++++++-----
drivers/net/ethernet/google/gve/gve_utils.c | 50 ++++++++-
drivers/net/ethernet/google/gve/gve_utils.h | 8 ++
include/linux/netdevice.h | 3 +
include/net/netdev_queues.h | 31 ++++++
14 files changed, 1827 insertions(+), 788 deletions(-)
More information about the kernel-team
mailing list