<feed xmlns='http://www.w3.org/2005/Atom'>
<title>open-iov.git/tools/cuda-ab, branch master</title>
<subtitle>Open-IOV vGPU-IO: host-side GSP emulation for unmodified NVIDIA guest drivers
</subtitle>
<id>https://git.vgpu.io/open-iov.git/atom?h=master</id>
<link rel='self' href='https://git.vgpu.io/open-iov.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/'/>
<updated>2026-10-12T03:44:24+00:00</updated>
<entry>
<title>cuda-ab: soak.sh client list env-overridable (SOAK_CLIENTS); smiley last by default</title>
<updated>2026-10-12T03:44:24+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-12T03:44:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=40a01810c77838b3876ecea8fed2f5d72e08a378'/>
<id>urn:sha1:40a01810c77838b3876ecea8fed2f5d72e08a378</id>
<content type='text'>
smiley (cudaMallocManaged-class, known-failing until the param-offset
fix) moved last so a baseline pass exercises the other 13 first.
</content>
</entry>
<entry>
<title>cuda-ab: victory-series coverage battery (8 new clients) + soak runner list</title>
<updated>2026-10-12T03:44:06+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-12T03:44:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=ccdfc1b2cc31a04110783e96a310f5ed36ca0a9d'/>
<id>urn:sha1:ccdfc1b2cc31a04110783e96a310f5ed36ca0a9d</id>
<content type='text'>
victory_saxpy, victory_reduce (shared+atomics), victory_matmul (tiled
shared), victory_strided, victory_memset2d (pitched), victory_atomics,
victory_streams_events (3 streams + events), victory_math (mixed
int/float/double). Each verifies via readback and prints STATUS OK|FAIL.
soak.sh now runs the full 14-client set (seq or sustained).
</content>
</entry>
<entry>
<title>tools/cuda-ab: P2 arbitrary-kernel suite expansion (regs/streams/printf), smiley push wiring, near-native perf harness (offline readiness; guest validation pending)</title>
<updated>2026-10-08T15:49:48+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-08T15:49:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=25d23d32f53a1beb8d2302d6f589cef04d105c48'/>
<id>urn:sha1:25d23d32f53a1beb8d2302d6f589cef04d105c48</id>
<content type='text'>
</content>
</entry>
<entry>
<title>debug/issue: issue register + ISSUE-0001 (reproducibility) + ISSUE-0002 (multiple kernels per VM)</title>
<updated>2026-10-08T15:07:42+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-08T15:07:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=f8edfb21e0880935fbe5aa62996fcd9af64c32ff'/>
<id>urn:sha1:f8edfb21e0880935fbe5aa62996fcd9af64c32ff</id>
<content type='text'>
- debug/issue/README.md: when to file (nasty bugs only; default is no
  issues), template, numbering, lifecycle incl. solved/ move.
- issue-number-1.md: guest CUDA is not reproducibly green (top priority);
  evidence discriminators, root cause (starved pool release translation),
  the three fixes landed, 10/10-boot validation plan.
- issue-number-2.md: multiple kernels in one VM (sequential/concurrent/
  simultaneous) must work; second-client wedge root-cause chain + plan.
- tools/cuda-ab/smiley.cu: 4-pass vectorAdd that renders a 64x32 ASCII
  smiley from GPU-computed distance fields; ab.sh gains a generic 'push'
  mode so any WORKLOAD binary can be delivered to the guest.
</content>
</entry>
<entry>
<title>vgsp+guest-diag: kcore-truth pin resolver (pool/pushbuffer/channel ring+userd) + GR ring userd-derived candidates</title>
<updated>2026-10-08T08:15:24+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-08T08:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=5bb2d53ec14f0d802726bc879b994c0286f85415'/>
<id>urn:sha1:5bb2d53ec14f0d802726bc879b994c0286f85415</id>
<content type='text'>
guest_pin_stream.py now resolves translations entirely from guest truth via
/proc/kcore + a manual page-table walk (no QMP races): the CE semaphore pool
and pushbuffer memory from the UVM rm_mem structures, and each channel's
GPFIFO ring + GPPUT from the tracking semaphore's embedding uvm_channel_t
(channel_info located by its gpFifoGpuVa value). This removes the watcher
pipeline's flakiness on the cudaMalloc stall class (missing pool/pushbuffer
pins).

gsp_sema_service.c: svc_gr_ring_autopin tries the guest-registered USERD
memdesc base as a ring candidate (the fixed FB convention only matches when
the guest's VRAM allocator happens to reproduce the old layout), plus an
optional (gsp_sema_dbg) one-shot FB scan + raw-word diagnostics when every
candidate fails.

tools/cuda-ab/p2: self-checking arbitrary-kernel acceptance suite (10
programs: sequential launches, shapes, params, smem/GEMM, streams, malloc
churn, printf+error, FMA benchmark, mixed, managed probe) with host oracle
expectations and a guest runner.
</content>
</entry>
<entry>
<title>cuda-ab: rebuild run/victory_mail for the native path (n=1&lt;&lt;15, param-based mail)</title>
<updated>2026-10-07T20:12:24+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-07T20:12:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=d94b2896594771917e388231588fae34f921e226'/>
<id>urn:sha1:d94b2896594771917e388231588fae34f921e226</id>
<content type='text'>
The run/ binary was the Oct 4 build (4 MB buffers, __device__ kMail);
ab.sh push_bin only builds when the binary is absent, so the guest shipped
the stale build. This is the rebuilt binary matching today's .cu.
</content>
</entry>
<entry>
<title>cuda-ab: victory_mail native-path sizing + param-based mail message</title>
<updated>2026-10-07T19:49:31+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-07T19:49:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=d091097c03d2db3f8100574a6f8b1a7a4b5b2a01'/>
<id>urn:sha1:d091097c03d2db3f8100574a6f8b1a7a4b5b2a01</id>
<content type='text'>
Two changes for the native GR path: vadd buffers shrink to 1&lt;&lt;15 elements
(128 KB each) so all data fits the engine-visible 2 MB window, and
mail_kernel receives the message as a kernel-parameter buffer instead of a
__device__ constant (the c[0x4] module-data base is driver-populated and is
zero in the forwarded launch). The guest binary must be rebuilt in
tools/cuda-ab/run (ab.sh push_bin only builds when the binary is absent).
</content>
</entry>
<entry>
<title>vgsp: m110 - relocate data into the engine-walkable main-PT window; shrink the demo</title>
<updated>2026-10-07T19:25:31+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-07T19:25:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=406c9ff19d7b3470e938e0ddfee565a709453053'/>
<id>urn:sha1:406c9ff19d7b3470e938e0ddfee565a709453053</id>
<content type='text'>
All UPDATE_PDE_2 installs (post- or pre-commit) are invisible to the SM
walker; the only window it honours is the commit-time main small-PT page
(VA 0x100000+, the proven win0/const window). Relocate each candidate data
pointer's first 64 pages into slots 0x110..0x1f0 of that window (fresh PTE
lines, direct leaf writes), rewrite bank pointers per page record, and put
the mail page at the reserved slot 0x1f0 (c[0x4][0x0]=0x1f0000). Shrink
victory_mail's buffers (n=1&lt;&lt;15, 128 KB each) to fit the 2 MB window.
</content>
</entry>
<entry>
<title>vgsp: end-to-end CUDA acceptance in the guest</title>
<updated>2026-10-04T20:19:31+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-04T20:19:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=aa3520f252182aaf64ea0b8856a3ac5e4466ce0e'/>
<id>urn:sha1:aa3520f252182aaf64ea0b8856a3ac5e4466ce0e</id>
<content type='text'>
The no-claim emulation path now runs a stock CUDA program end to end:
device properties, cudaMalloc, a GPU-authored string kernel read back
byte-for-byte, two 4 MB host-to-device copies, a 1 M-element vectorAdd
executed on the physical GPU through the host bridge, and the
device-to-host copy-back verified element by element. Three consecutive
supervised cycles report MAIL + VADD bad=0 checksum=392344090.500000 +
STATUS OK with identical input/output hashes.

Two data-path correctness fixes make the transfers sound:

- Once-only op execution per GPFIFO entry. The pump replays recently
  consumed ring entries when translation batches are injected so missed
  releases can land; re-executing a CE copy is not idempotent because
  its source is a client staging buffer that may have been refilled.
  Slots now record their raw entry words and a replayed entry matching
  that identity suppresses operations while still processing releases.

- Per-page translation of virtual operands. svc_copy resolved only the
  first page of a VA range and walked the PA linearly; client staging
  ranges are frequently split (observed 195 + 61 pages), so the tail of
  alternating chunks was read from unrelated memory. Multi-page copies
  now re-resolve each 4 KB page through the trusted resolver.

Also carries the earlier uncommitted emulation fixes that got the client
to the launch (QMD address-window gate, counter registration
persistence, 512 MiB emulated FB, bridge slot hygiene) and bounded
diagnostics (sema-bigop, sema-bigcopy, bridge-in/out hashes, daemon
INCHECK/OUTCHECK/dumps).
</content>
</entry>
<entry>
<title>vgsp: host CUDA bridge + sema release recovery; greeneye simulator wave</title>
<updated>2026-10-03T18:05:38+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-10-03T18:05:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=cc79b478843f0230fe6aa8ecd822de7ba71c891e'/>
<id>urn:sha1:cc79b478843f0230fe6aa8ecd822de7ba71c891e</id>
<content type='text'>
- kernel: gsp_cuda_bridge (QMD launch capture, debugfs job/out/done, param+output resolution cached from inline writes), sema drain fixes (never hold/starve a channel), GR ring autopin + counter autoreg, per-page push reads, counter-derive gate; module builds clean
- tools/cuda-bridge: CUDA driver-API daemon executing mail/vadd kernels on the physical GPU, CUBB2/CBD2 v2 protocol, layout check + self-tests
- tools/guest-diag + tools/cuda-ab: scanner/pin fixes, victory push-only mode
- debug/risc-v-gsp-rm-vm: Phase S simulator wave (GSP device model, boot ladder, triage/re-demo harnesses, docs 30-41), GPGPU-sim scaffolding
- STATE-CURRENT/docs updates
</content>
</entry>
</feed>
