GoogleCloudPlatform / GoogleCloudPlatform/compute-virtual-ethernet-linux
Default RX queue distribution when the driver does not configure RSS (GQI vs DQO)
- Dominant language
- C
- Stars
- 91
- Forks
- 44
- Avg merge
- 1h 21m
- Merged PRs (30d)
- 2
Description
Hi everyone,
We're reimplementing the gVNIC driver for the Nanos unikernel (a minimal, single-address-space kernel), modeled on this driver, and we'd like to confirm one aspect
of device behavior that we couldn't determine from the driver source or the README.
What we understand so far:
- Per the README: "The DQO RDA queue format has support for querying and configuring the RSS hash and indirection table" and "Upon RSS hash configuration, a default
RSS indirection table will be set using a round-robin assignment of hash values to queues. The GVE indirection table has 128 entries."
- In the driver, gve_init_rss_config() programs that round-robin indirection table at init, but only when cache_rss_config is set — which
gve_set_default_rss_sizes() does for the DQO (non-GQI) formats. For GQI, the driver does not configure RSS at all.
The question — device default behavior: when the driver does not program the indirection table, how does the device distribute received packets across the multiple
RX queues?
- For GQI (where the driver has no RSS-config path): since the driver can't influence the indirection table, RX distribution appears to be entirely device-side.
Does the device come up with a default indirection table that spreads flows across all the RX queues the driver created, or does it concentrate RX on a single queue
(e.g. queue 0)?
- For DQO: the same question for the case before / in the absence of gve_init_rss_config() — is there a usable device default, or is programming the table required
for multi-queue RX to actually distribute?
Why we're asking: in a minimal driver we'd like to know whether we can rely on the device's default distribution for multi-queue RX, or whether the driver must
program the indirection table (round-robin) to get RX spread across queues and cores. The README documents how to configure RSS, but not what the device does when
it isn't configured — which is the gap for us.
Thanks!
Contributor guide
Assessment
This issue has not been assessed yet.