One 40 GiB Vulkan buffer passed full readback through 160 native chunks; full 96 GiB backing remains unverified. Read the segmented-buffer evidence.
Two clean-first BP16 runs on the unchanged InternLM2.5-20B F16 workload measured 1.16969830 and 1.17068766 tokens/s. Both produced the exact 92-token output with 49/49 layers offloaded.
The 1.17 runs are historical, not a current rate guarantee. Later 26 GiB capped runs measured 0.7432 tokens/s with a 2.5 GiB reserve and 0.7205 with a 1.5 GiB reserve; changed clock and background-memory conditions leave no accepted regression or improvement claim. Research notes · 1.5 GiB reserve archive.
A newer native run after the VRAM clock-cap removal measured 1.46258 tokens/s with exact 92-token output and 49/49 layers. Compressed uncapped trials with 26, 22, and 18 GiB cold-store ceilings stopped at RAM guards and have no accepted rates. Native run · 26 GiB trial · 22 GiB trial · 18 GiB trial.
These runs were sequential, with clocks and background activity uncontrolled; they do not isolate a clean-first effect. BP16 clean-first remains experimental and off by default.
The 7 GiB local-owner / 12 GiB shared-raw trial passed with exact 92-token output, 49/49 layers, and zero GPU restore fallback. It measured 1.07647639 tokens/s, below the separate 1.1725 profile; the owner tier remains experimental and off by default. Trial results · Owner fixture results.
An alternating metadata fixture measured the host-encode component at about 27 ms with the current metadata path versus 2,345 ms before it, across exact-byte fixture runs. Desktop activity was uncontrolled; this is component timing, not model throughput or evidence of a native-model speed gain. Fixture results and provenance.
The current build passed 129/129 regression checks in 100.67 seconds, including bounded raw-owner fallback and clean-cache trimming. The installed build passed 115/115 checks. Test evidence.
An alternating four-run Qwen 27B Q4 trial with a 12 GiB residency ceiling and 8 GiB cold/owner ceilings measured 1.75–1.78 tokens/s with BP16 raw-owner input off and 2.29 with it on; all runs matched exact output and 66/66 layers. The measured rate was about 30% higher with the feature on, but desktop activity was uncontrolled and per-run swap growth ranged from 88 to 2,305 MiB. A separate native 34.56 tokens/s result is a capacity baseline, not a matched throughput comparison; this is a 27B Q4 forced-spill result, separate from the 39.73 GB F16 model. Run details and provenance · Native capacity baseline.
A full 92-token InternLM2.5-20B F16 run with a 1 GiB clean-cache cap completed at 1.03189 tokens/s with exact output and 49/49 layers. This is below the separate native 1.46258 reference and historical 1.17 clean-first runs; memory and clock conditions differed, so they do not isolate a cap effect. The raw-owner path was not exercised (zero RAW snapshots; all snapshots compressed), swap grew by 6,161 MiB, and minimum available RAM was 18,205 MiB. A later 4 GiB cap trial stopped at the RAM guard (16,374 MiB available against a 16,384 MiB floor) before model work and has no accepted rate. A fresh native rerun also stopped at the guard (16,365 MiB) and produced no new rate; the 1.46258 result remains the prior accepted native reference. Further trials are underway. 1 GiB result · 4 GiB guard stop · Fresh native guard stop.
Earlier benchmark runs and implementation notes
Earlier capacity and integration checks: a 320 MiB Vulkan idle-snapshot test released 320 MiB of process resident VRAM and passed full-byte wake checks, including partial-freeze and restore-retry cases. The full CTest run before optional GDeflate integration passed 101/101 with zero validation errors or VUIDs. A 512 MiB allocation passed full-byte checks across three promoted storage buffers, including snapshots across allocation gaps. An unchanged 135M F16 Vulkan model passed 11 selective-restore checks with identical output, 31/31 layers, and zero fallback. An official 39.73 GB InternLM2.5-20B F16 model loaded through HIP VMM/GTT with 49/49 layers; native full-GPU HIP allocation OOMed. Native partial HIP offload and zVram's Vulkan virtual heap matched output. N-gram self-drafting reached 6.33 vs 1.10 tokens/s on repeated text, but 1.45 vs 1.43 on ordinary prose with differing transcripts. These short app checks do not establish general speedup. A 40 GiB GPU model buffer remains untested. A separate 40 GiB HIP pointer passed GPU-write verification using 20 GiB each of VRAM and GTT, and unchanged 30B and 27B models ran together with 34.2 GB of GPU model buffers.
The five-case active-eviction gate passed across synthetic and adopted native pools. B restored and passed byte checks before A's host-gated queue was released; the watchdog did not fire. Unknown command use kept both pools resident for 300 ms. A separate unchanged 135M model run passed 12 checks with identical output and cold restore; it does not establish a speedup. This confirms a narrow allocation-granularity path, not 40 GiB compression speed, VRChat compatibility, or broad workload behavior. Read the focused evidence and limits.
The opt-in --vulkan-range-mib 32 path passed 4/4 focused checks. An unchanged 135M model passed 13/13 checks with identical output; one submission selected ten chunks together. The --vulkan-resident-mib 192 check passed 21/21 model checks and the focused resident-pressure gate passed 6/6; after full cold startup, tracked backing peaked at 165.8125 MiB, with 354 evictions and identical native/wrapped output. A paired clean-snapshot cache run passed 25/25 with identical output, 405 cache reuses, and 3 invalidations. In short separate decode runs, the pressure baseline measured 2.82 tokens/s and cached mode 6.23; native runs measured 123.25 and 123.74 tokens/s. These workload-specific figures are not a general speed claim. Six focused synthetic/native checks also verified read-only reuse, dirty writes, quota trimming, and accepted unknown writes. The cache shares the cold-store quota and is limited to proven read-only accesses. --vulkan-clean-cache-mib N optionally caps expendable cached snapshots; it requires --vulkan-clean-cache, --vulkan-range-mib, and --vulkan-cold-mib, with a positive value no greater than the cold quota. Omitting the cap keeps existing uncapped-cache behavior. Trimming may cause later re-encoding; the cap does not guarantee a full model fits. This is not a global VRAM cap or proof of 40 GiB streaming or game behavior. Read clean-cache evidence and limits.
--vulkan-min-savings-percent 0–100 keeps weak Zstd savings as lossless RAW snapshots; at 100 it bypasses Zstd entirely. RAW uses the shared cold/cache quota and can need more RAM. A focused six-case gate covered 30 fresh RAW snapshots with full-byte checks and cache-write invalidation; the full suite passed 92/92 with zero validation diagnostics. One matched 135M model pair measured 17.53 tokens/s at 100% versus 8.26 at 0%, with native references at 125.63 and 121.84; this single pair is workload-specific and far below native throughput. It does not establish large-model, 40 GiB, or game performance. Read cutoff evidence and limits.
GDeflate remains experimental: the optional CPU codec requires -DZVRAM_ENABLE_GDEFLATE=ON; Zstd stays the default. A separate opt-in --vulkan-gdeflate-gpu path restores compressed chunks up to 32 MiB directly to private sparse backing views; RAW chunks stay on CPU/copy. One small-model GPU layer run passed 14/14 checks with matching output, 31/31 layers, 11 GPU calls over 308,084,736 bytes, and zero fallback or validation diagnostics. The strict focused GPU layer suite passes 5/5. In short sequential 135M comparisons with validation off, wrapped first output was 0.17 s on GPU decode and 1.08 s on CPU GDeflate; generation rates were close to native (259 vs 270 and 312 vs 316 tokens/s). Active desktop load, unfixed clocks, and native timing variation mean this does not establish a steady-state speed gain or 40 GiB performance. A 20B GPU-pressure attempt timed out waiting for readiness after 388 GPU decode calls during weight loading, with no wrapped output or token rate. A separate retry with a 900-second timeout was stopped after a reported transient game stall; the game recovered, but no GPU fault or OOM evidence was found and the cause is unknown. Startup backing is not yet fully covered by the 20 GiB admission accounting; a CPU-only correction is underway. Hardware cold-draw fixtures passed 3/3 with exact pixels and 32 MiB readback; a newer opt-in X11 presentation fixture also passed three exact-pixel/full-buffer cycles; broad game behavior remains unverified. Research and build notes · GDeflate behavior and benchmark limits · 20B pressure run · graphics fixture evidence.
The separate experimental --vulkan-lazy-backing mode passed a CPU production-path harness for zero-allocation startup, exact-cap restore, refusal before allocation above cap, cold disjoint binding, rollback, retry, and sparse-failure accounting. Tiny hardware and small-model gates now pass; game and 40 GiB behavior remain unverified; default presentation retains the conservative fallback, and explicit app sparse submissions remain unsupported. Allocation/bind failure can prevent paging. Lazy-backing requirements and limits.
Two opt-in steps toward broader use: base Vulkan presentation can retain buffer paging with --vulkan-buffer-presentation, with three presented cold-restore frames passing in a hidden X11 fixture; game behavior and frame times remain unverified. A native headless Wayland control failed without zVram, so hardware presentation proof is X11-only. GDeflate encoding now accepts 1–32 CPU workers; on one 32 MiB model slice, 32 workers took 29.8 ms versus 346 ms with one, with identical bytes. This is CPU encoder speed, not token or frame-time improvement. Presentation scope · Worker measurements.
New opt-in --vulkan-async-compression encodes one idle range up to 32 MiB outside device and queue locks, then rechecks allocation, write, binding, activity, and budget state before committing. GPU capture and commit still use locks; urgent admission compression stays synchronous. Async Zstd and 32-worker GDeflate with direct GPU restore passed three hidden X11 frames with exact pixels and full-buffer checks. These are correctness results, without a token or frame-time speed claim. Evidence and scope.
Opt-in --vulkan-headroom-mib N further lowers lazy backing admission using the native driver memory-budget estimate and a requested margin. CPU checks passed 10/10; later tiny hardware gates verified native budget queries, zero-budget refusal before allocation, and lazy startup. The combined small-model path passed 32/32 with matching output, 31/31 GPU layers, and real background commits; game and 40 GiB behavior remain unverified. It requires a supported properties2 path, memory-budget extension, and one native local heap. The estimate is not reserved capacity or a guarantee against stalls. Calculation and limits.
A 5% cutoff run completed the 16.8107 GB Q4 model with 27/27 checks, identical output, 66/66 layers, and 4,891 pressure admissions under a 12 GiB tracked cap. It recorded mixed compressed and RAW snapshots and measured 0.41 tokens/s versus 13.30 native. The prior no-cutoff run measured 0.28 versus 6.00 native, so the changed baseline prevents attributing a speed gain to the cutoff. This remains a slow functional result, not 40 GiB or game proof. Read the run details.
The opt-in --vulkan-eviction-policy lru|mru selects the eligible completed chunk chosen first under resident admission; LRU remains the default. A matched small-model scan pair passed 26/26 checks each with identical output. One run measured 8.36 tokens/s for MRU versus 6.23 for LRU; native references were 119.43 and 122.04 tokens/s. Peak tracked backing was 185.875 MiB for MRU and 165.8125 MiB for LRU, under the 192 MiB limit. MRU restored 8,640 MiB versus LRU's 13,056 MiB. These single-run results have throughput variance and do not establish 40 GiB behavior or game performance. The helper's optional --min-available-mib stops its child process group at a system-wide available-memory floor; it is not a hard allocation cap. Read policy evidence and limits.
A longer-idle MRU run completed an unchanged 16.8107 GB Q4 model under a 12 GiB tracked-residency cap: 26/26 checks, identical native/wrapped output, 66/66 layers, and 4,952 pressure admissions. Wrapped decode was 0.28 tokens/s versus 6.00 native, so this is a functional result with a substantial slowdown. There is no large-model LRU comparison; this is not a 40 GB model or game result. Read the run details.
An unchanged 39,725,643,136-byte InternLM2.5-20B F16 model completed Vulkan inference with automatic compression: 28/28 checks, identical native/wrapped output, and 49/49 layers offloaded. After the first cold pass, tracked backing peaked at 21,471,690,752 bytes under the 20 GiB cap, with 1,212 MRU admissions and no refusals or restore fallbacks. Cold storage retained 38,749,798,400 logical bytes in 29,595,160,469 bytes (23.62% saved). Across 12 actual decode runs, wrapped throughput was 0.09 tokens/s versus 1.44 native. This demonstrates a slow compressed-pressure path for this setup; the cap covers eligible tracked backing only. It is not a 40 GiB GPU model, game, universal compatibility, or fast-inference result. Read the run details and limits.
The full 39.73 GB InternLM F16 model also completed with lazy backing, GPU GDeflate restore and MRU under an 18 GiB tracked cap plus a 3 GiB driver-budget reserve. Output matched native; 12 actual decode runs measured 0.09 tokens/s, with 8,883 GPU restores and zero fallback. A separate native nodes=4 reference measured 1.11 tokens/s, so this is not a paired speed comparison. The earlier 16 GiB Zstd run measured 0.03319 versus 1.69 native under different conditions. The GDeflate path completes this workload but remains very slow. Run details and limits.
A paired 32 MiB GPU component test decoded BP16 exactly in 0.11784 ms versus GDeflate in 5.77616 ms; BP16 stored 87.0% of raw bytes versus 81.1%. That decoder-only comparison does not predict model speed. The best measured 12-token BP16 short run used 32 encoding workers and eight opt-in upload-copy workers, an 8 GiB allocated-host cache, and a 24 GiB cold/cache quota, completing 12 decode runs at 0.61020197 tokens/s (reported as 0.61), with exact output, 49/49 layers, and zero GPU fallback. Sampled live cache use stayed below 8 GiB; cumulative accepted-use bytes are not resident memory. A repeat at eight workers measured 0.6070807 tokens/s; one and four workers measured 0.5331433 and 0.5966213. These same-runtime runs were sequential with uncontrolled clocks and background activity, so they do not establish that worker count caused the pattern. The prior 24 GiB run measured 0.5275435 tokens/s. A fresh native nodes=4 reference measured 1.6995 tokens/s (about 2.78x the BP16 rate), but used a different VRAM/GTT path under uncontrolled conditions. BP16 upload workers remain opt-in and default to one. The recorded source hashes and runtime library hash are preserved separately; the production shader was unchanged. A separate zVram virtual-native-spill run without snapshots or compression measured 1.69936 tokens/s; it is not a controlled comparison with compressed BP16. This is not a game-performance result. Virtual-spill evidence and limits. Latest completed BP16 run. Upload-worker comparison. Earlier direct-host run. Fresh native reference and limits.
Two opt-in synchronous BP16 GPU-encoder runs completed the 92-token InternLM2.5-20B F16 workload at 1.09323773 and 1.10252711 tokens/s; both had identical exact output, 49/49 layers, and zero GPU restore fallback. The latest recorded 4,097 GPU encode calls over 135,199,260,672 raw bytes, with zero encoder fallback and zero final snapshot-copy bytes. It used 26 GiB cold/owner ceilings, 19 GiB tracked residency, a 2.5 GiB reserve, 32 encoder/eight upload workers, LFU, and immutable-owner validation caching. The earlier native result was 1.69935367 tokens/s; a fresh 92-token native refresh measured 1.6991 tokens/s. The clean-first runs were about 31% slower by rate (about 45% more time per token), but sequential clocks and background activity were uncontrolled. The 12-token 0.61020197 result remains separate. A same-runtime CPU-synchronous encoder comparison measured 0.85462257 tokens/s versus 1.10252711 with GPU encoding; exact output matched, but the sequential uncontrolled pair does not isolate cause. Historical four-frame BP16 restore-batching and combined-remap prototypes preserved exact output but showed no observed model speed gain; both were removed from the current runtime and their flags are no longer supported. A separate repeat of the earlier CPU-encoder 26 GiB setup ended in Vulkan out-of-device-memory without a result; both GPU-encoder runs above completed. Two same-profile clean-first runs measured 1.16969830 and 1.17068766 tokens/s, about 6.1–6.2% above the prior repeated 1.10252711 rate. Both preserved exact output, 49/49 layers, and zero GPU restore fallback or swap growth; minimum available RAM was 28.43 and 27.77 GiB. The runs were sequential with uncontrolled clocks/background activity, so they do not establish clean-first as the cause. A separate 28 GiB shared cold/owner-cap run measured 1.174347 tokens/s, only 0.31% above the 26 GiB repeat; this is no meaningful observed gain, so keep 26 GiB as the recommendation. A 20 GiB tracked-resident-cap attempt then exited with Vulkan out-of-device-memory; it has no rate, so retain the previous 19 GiB profile. Clean-first run evidence and limits; Fresh native 92-token reference; GPU-encoder repeat baseline.
A same-prompt 92-token comparison produced identical stdout across 49/49 layers: 1.69935 tokens/s native and 0.43978 allocated-host under the 8 GiB cache. A later child-only glibc mmap/trim-threshold run completed the same output at 0.46524 tokens/s; its default-threshold retry stopped at the RAM guard with no rate, so this does not prove an allocator speed effect. A later BMI2-inline BP16 encoder run with the same child-only thresholds completed the 92-token output at 0.57273 tokens/s; sequential runs do not isolate the encoder effect. These 92-token runs are distinct from the 12-token 0.61020 BP16 short-run result, which remains the best measured short run. A separate BMI2 12-token run measured 0.59393 tokens/s. Allocator thresholds are not application defaults. Two separate short runs with those thresholds measured 0.54232 tokens/s for normal upload reuse and 0.52496 with cached upload; the latter did not win this sequential pair, and neither replaced the 0.61020 best short run. Long-run comparison and limits. Allocator-threshold long run and monitored stop. Short-pair validation. BMI2 model-run evidence. BMI2 run archives. Short-run archives.
The opt-in cached BP16 imported-host-input mode preserved full-model output across 49/49 layers but measured only 0.0718646 tokens/s, well below the latest 1.10252711 GPU-encoder long-run result. It is experimental correctness evidence, not a speed improvement. The 2,120 imports and 6,495 reuses are cumulative counters; submit/wait reached 121.592 seconds, with driver overhead only a hypothesis. Import evidence and limits.
For ranges above 32 MiB, snapshot decode can use up to three background workers plus the calling thread into existing staging (bounded to 128 MiB); freeze/restore batches up to four 32 MiB frames per GPU copy/wait. The current pipeline adds two host staging slots of at most 128 MiB each, overlapping CPU decode of the next admitted child with the GPU copy. It uses at most four CPU decode workers per restoration; whole-pool and oversized snapshots stay serial, and GPU allocations remain within resident admission. The pre-GDeflate-codec-integration full suite passed 101/101 in 68.13 seconds and the focused helper/pipeline suite passed 4/4 in 4.31 seconds, with no validation errors or VUIDs. A 20B first-submit run failed snapshot checks after 420 pre-prompt and 646 final failures; its 0.24 tokens/s is rejected. A later 300,000 ms long-idle retry passed 27/27 with identical output and 49/49 layers at 0.19 tokens/s, unchanged from the prior accepted result. The completed-restore peak stayed below 20 GiB, while the all-state observed peak briefly exceeded it because the cap checks admissions and completed restores rather than every transient allocation. Read the evidence and limits.
The existing 27B Q4_K_M HIP model matched output after idle restore with fully VRAM-resident active buffers: native 24.41 versus automatic 24.33 tokens/s over 45 decode runs each. Idle process VRAM fell from 16.30 GB to 0.155 GB; cold payload saved 2.86%, with a 12.9-second wake. The earlier forced-spill placement measured about 3 tokens/s and used a different memory placement.