From 2cb667a9683513cf99ec0014121a791def7d73bf Mon Sep 17 00:00:00 2001 From: Steven Noonan Date: Fri, 15 May 2026 22:21:49 -0700 Subject: [PATCH] feat(control): add vNUMA placement fields to ZoneVirtualizationOptionsSpec Add numa_nodes (uint32, 0 = auto) and numa_strategy (NumaStrategy enum with UNSPECIFIED/COMPACT/SCATTER) to ZoneVirtualizationOptionsSpec, plus the NumaStrategy enum itself. These plumb customer intent for explicit vNUMA node count and node-selection strategy through to placement. Defaults preserve existing behavior: numa_nodes=0 yields the legacy vCPU-coverage-driven placement, and UNSPECIFIED is treated as COMPACT (nearest-SLIT-distance expansion). No consumers yet; subsequent commits in the protect repo wire these through CRI annotations, the protect-ctl CLI, daemon validation, and the placement algorithm. Signed-off-by: Steven Noonan --- protect/control/v1/common.proto | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/protect/control/v1/common.proto b/protect/control/v1/common.proto index a785e39..457b71b 100644 --- a/protect/control/v1/common.proto +++ b/protect/control/v1/common.proto @@ -84,6 +84,14 @@ message ZoneNetworkOptionsDnsSpec { message ZoneVirtualizationOptionsSpec { ZoneVirtualizationBackend backend = 1; + // Requested vNUMA node count. + // 0 (default) = auto: placement is driven by vCPU vs. per-node pCPU coverage, + // matching legacy behavior. >0 = exact: the daemon will hard-fail if the + // request cannot be satisfied with exactly this many vNUMA nodes. + uint32 numa_nodes = 2; + // Strategy used when expanding the selected node set beyond the seed node. + // UNSPECIFIED is treated as COMPACT. + NumaStrategy numa_strategy = 3; } enum ZoneVirtualizationBackend { @@ -93,6 +101,19 @@ enum ZoneVirtualizationBackend { ZONE_VIRTUALIZATION_BACKEND_AUTOMATIC = 3; } +enum NumaStrategy { + // Treated as COMPACT for placement purposes. + NUMA_STRATEGY_UNSPECIFIED = 0; + // Expand to the nearest unselected NUMA node by SLIT distance from the + // already-selected set, tie-breaking by most free memory. + NUMA_STRATEGY_COMPACT = 1; + // Expand to the most distant unselected NUMA node by SLIT distance from the + // already-selected set, tie-breaking by most free memory. Note: SLIT distance + // does not guarantee separation across sockets, IMCs, or LLCs; the benefit + // depends on the host's physical topology. + NUMA_STRATEGY_SCATTER = 2; +} + message OciImageSpec { string digest = 1; OciImageFormat format = 2;