From 76a2d3cb16ea5550fb2f11f39a78b9eaa2804314 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 12 Nov 2026 20:01:07 -0500 Subject: docs: 2026-11-12 status refresh - green X/GLX, non-black GPU captures, direct-GL stream frontier Refresh STATE-CURRENT.md and the open-iov.org wiki pages with the 2026-11-12 state: stock-driver X + GLX green (glxinfo 4.6.0 direct rendering, glxgears ~520 FPS), the pbuffer frame path captured 500/500 non-black frames (50 s 640x480 h264) plus the earlier 45.4 s capture, and the named frontier (direct-GL client command-stream delivery: setup push unreadable, CE ring 0xbeef0101 intermittent) alongside the guest-init/sizing fixes (RMInstLoc modprobe single-source, FB info in KB, 256 MiB GART). --- wiki/Project-Plan.md | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) (limited to 'wiki/Project-Plan.md') diff --git a/wiki/Project-Plan.md b/wiki/Project-Plan.md index dd8de18..1d3a7d1 100644 --- a/wiki/Project-Plan.md +++ b/wiki/Project-Plan.md @@ -15,7 +15,7 @@ > [`../docs/06-portability/03-device-validation-and-porting-sequence.md`](../docs/06-portability/03-device-validation-and-porting-sequence.md); > the docs tree wins on disagreement. -Status: 2026-11-11, tree `master @ 4acac093`. Tags: `[done]`, `[active]`, +Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[done]`, `[active]`, `[ahead]` — the plan's own state vocabulary, distinct from the goal tags. ## 1. How the plan works @@ -44,7 +44,7 @@ itself: |---|---|---|---| | **P0 — Platform** | Emulated vGPU device, GSP boot and GSP-RM emulation, stock guest driver initialisation | Driver-API smoke green (`ALL OK`) = evaluation rung 2 | `[done]` | | **P1 — First execution (compute)** | Guest CUDA kernels executing on the physical GPU, with engine-authored completions; then hardening | Verified clients + engine-authored completion = rung 3 core; hardening: staged-transfer class, every-boot acceptance, per-guest isolation | `[active]` — execution green; hardening in progress | -| **P2 — Graphics execution** | OpenGL/Vulkan draw commands executed by the physical 3D pipeline and delivered as readable pixels | The graphics ladder: M-GL1 client context-init executes; M-GL2 `glxgears` non-black; M-GL3 GZDoom GL non-black through the mdev | `[active]` — between M-GL1 and M-GL2 with M-GL2's off-screen half proven: the display/KMS and DDX replay machinery work, the first non-black GPU-rendered frames and a 45.4 s video are captured, and the direct-GL GR ring resolves; the direct-GL CE ring, the window/screen present and X stability are the walls | +| **P2 — Graphics execution** | OpenGL/Vulkan draw commands executed by the physical 3D pipeline and delivered as readable pixels | The graphics ladder: M-GL1 client context-init executes; M-GL2 `glxgears` non-black; M-GL3 GZDoom GL non-black through the mdev | `[active]` — between M-GL1 and M-GL2 with M-GL2's off-screen half proven: the display/KMS and DDX replay machinery work, X + stock GLX are green, the first non-black GPU-rendered frames and videos are captured, and the direct-GL ring/USERD machinery is hardened; delivery of the direct-GL client's own setup push, the window/screen present and X screen-init stability are the walls | | **P3 — Sustained and multi-tenant** | Frame rates without assistance; multiple VMs sharing the GPU with measured fairness; soak-stable operation | Graphics M-GL4 (60 fps, no forcing) and M-GL5 (two VMs, two mdevs); CUDA battery + soak; per-guest execution isolation = rungs 4/5 | `[ahead]` | | **P4 — Breadth** | Video (NVENC/NVDEC), Windows/DirectX guests, live migration, non-KVM hypervisor transports | Per-case bring-up gates plus the matrix's evidence expectations | `[ahead]` | | **P5 — Scale and portability** | New GPU generations and driver families carried forward; published performance programme | A profile + measured delta per version, validated on hardware; A/B numbers published per the measurement contract | `[ahead]` | @@ -57,15 +57,17 @@ available (P5 runs across the whole plan). Ranked, in dependency order: -1. **Graphics pixels (P2).** The client and display stacks execute, the - DDX 3D replay runs, the first non-black GPU-rendered frames and a 45.4 s - video are captured off-screen, and the direct-GL GR ring `0xbeef0100` - resolves with advancing releases. The named walls are the direct-GL CE - ring `0xbeef0101` (it never resolves, so GZDoom wedges ~90 s after - `V_Init`), the window/screen present path (glxgears' window is black and a - window draw wedges X), X startup/stability (`_nv052600rm` soft-lock, - `0x51`, vmalloc), and the DDX's 4 GB sysmem allocation (12 GB guest - workaround), then non-black window frames. Full detail: +1. **Graphics pixels (P2).** The client and display stacks execute, X and the + stock GLX path are fully green (`glxinfo -B` rc 0, ~520 FPS `glxgears`), + the DDX 3D replay runs, the first non-black GPU-rendered frames and videos + are captured off-screen, and the direct-GL ring/USERD machinery is + hardened. The named walls are **delivery of the direct-GL client's own + command stream** (its 59,556-byte setup push is not yet resolvable/ + readable host-side under the client's page-directory churn, so no draw + section opens and GZDoom spins after `V_Init`), the window/screen present + path (glxgears' window is black and a window draw wedges X), X screen-init + stability (the DDX idle-DMA ScreenInit lottery; even `modeNum` required), + and then non-black window frames. Full detail: [`Graphics-Execution.md`](Graphics-Execution.md) §6. 2. **Compute hardening (P1).** The staged-transfer class (failure modes proven, fixes in flight); the every-boot acceptance campaign; per-guest execution @@ -80,15 +82,19 @@ Ranked, in dependency order: Recently closed, as evidence the gates work: the boot-poisoning defect and the post-reboot client-stall defect (compute reproducibility); the display/KMS bring-up (NvKms registers, X settles, GL 4.6); the UVM channel-pool tracker; -the direct-GL GR release and CE ring discovery; the X DDX kick-channel decode +the direct-GL ring/release and CE-ring discovery; the X DDX kick-channel decode and its three wait fixes (class-aware display arm, `0x8000 -> 0` notification completion, decoded GL release applied); the GSP event-IRQ fix that completes swaps; the X DMA-init fix (`ebf3130f`); the GR backend timeout fix (`backend_timeout=0`); the 2D path end-to-end; the DDX 3D replay and the -first non-black GPU-rendered frames with a captured video (the ring-ledger -scrub release, `f6184ac3`); the direct-GL GR ring resolution (`4acac093`); -the RM write-lock holder fix (`df6e71bb`); and the guest Vulkan pipeline -running end to end. +first non-black GPU-rendered frames with captured videos (the ring-ledger +scrub release, `f6184ac3`); the direct-GL ring/VAS and USERD hardening +(verified page-directory discovery, eager push pins, client-allocated USERD +resolution); the full green X/GLX path (`glxinfo -B` rc 0, ~520 FPS +`glxgears`); the guest adapter-init regression (`RMInstLoc` lost to a +kernel-cmdline override) and its fix; the emulated FB/GART sizing traps (FB +info in KB, GART 256 MiB) that removed the 4 GiB guest-allocation class; and +the guest Vulkan pipeline running end to end. ## 4. The gates -- cgit v1.2.3