summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 07:32:26 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 07:32:26 -0400
commit1a49c7eb69c03f58bc51939828de222a2ac42fea (patch)
tree1687bbde27f03f7e7faa913960741ad840b4cbe2
parent9ccdaed4349219e06741fe506227fa414fddc701 (diff)
downloadopen-iov-1a49c7eb69c03f58bc51939828de222a2ac42fea.tar.gz
open-iov-1a49c7eb69c03f58bc51939828de222a2ac42fea.zip
vgsp-sema: keep the learned VA map across the session flush (re-compact, not wipe)
The flush fires when the channel table momentarily empties - a live client's UVM channel cycling triggers it - and wiping the map left the client's already-resolved data VAs unresolvable until a rebuild scan re-found them, which it may not. Evidence: a mid-battery boot where multikernel's operands went NO ENTRY 40+ s after a flush (the rebuild restored 14-31 K entries without them); the pump stalled for minutes and the next clients read back whole-page garbage. The map is a cache with a merge-on-rebuild contract, so re-compact it (dedup + sort) and keep it as the merge base; reused-VA correctness stays with the ledger landing, the pin-wins rule and the fresh scan. Also: push_battery.sh now pushes inplace_scale (the battery list had it, the push list did not).
-rw-r--r--kernel/gsp_sema_service.c18
-rwxr-xr-xtools/cuda-ab/push_battery.sh2
2 files changed, 18 insertions, 2 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 42e8d76..22eccb7 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -11700,7 +11700,23 @@ static void svc_session_flush(void)
}
svc_gr_diag_reset(); /* m150: per-session diagnostic budgets */
- svc.map_n = 0;
+ /*
+ * r532: the learned map is NOT wiped here. The flush fires when the
+ * channel table momentarily empties - which a live client's UVM
+ * channel cycling triggers - and wiping the map then left the
+ * client's already-resolved data VAs unresolvable until a rebuild
+ * scan re-found them, which it may not: r531 multikernel's operands
+ * (0x72a05a5...) went NO ENTRY 40+ s after the gen-12 flush (the
+ * rebuild restored 14-31 K entries without them) and the pump
+ * stalled for minutes with the client spinning; streams2/
+ * streams_events then read back whole-page garbage. The map is a
+ * cache with a merge-on-rebuild contract (the fresh scan updates a
+ * VA it re-finds and appends the rest), so a re-compaction keeps it
+ * bounded without dropping live translations. Reused-VA correctness
+ * is carried by the ledger (the launch's own landing, r349), the
+ * pin-wins rule and the fresh scan - not by wholesale eviction.
+ */
+ svc_map_finalize();
svc_pb_n = 0;
svc_pd_found = 0;
svc_pd_attempts = 0;
diff --git a/tools/cuda-ab/push_battery.sh b/tools/cuda-ab/push_battery.sh
index 644beba..0557238 100755
--- a/tools/cuda-ab/push_battery.sh
+++ b/tools/cuda-ab/push_battery.sh
@@ -6,7 +6,7 @@ set -u
HERE="$(cd "$(dirname "$0")" && pwd)"
RUN="$HERE/run"
GUEST_DIR="${1:-/tmp}"
-CLIENTS="victory_mail smiley vecadd_loop streams2 memcpy_roundtrip multikernel victory_saxpy victory_reduce victory_matmul victory_strided victory_memset2d victory_atomics victory_streams_events victory_math vector_add"
+CLIENTS="victory_mail smiley vecadd_loop streams2 memcpy_roundtrip multikernel victory_saxpy victory_reduce victory_matmul victory_strided victory_memset2d victory_atomics victory_streams_events victory_math vector_add inplace_scale"
export SSHPASS="${VGPU_GUEST_PASS:-ubuntu}"
FILES=""
for c in $CLIENTS; do [ -x "$RUN/$c" ] && FILES="$FILES $RUN/$c"; done