Skip to content

Add CUDA GPU coredump support to nvproxy#13650

Open
copybara-service[bot] wants to merge 1 commit into
masterfrom
test/cl944582537
Open

Add CUDA GPU coredump support to nvproxy#13650
copybara-service[bot] wants to merge 1 commit into
masterfrom
test/cl944582537

Conversation

@copybara-service

Copy link
Copy Markdown

Add CUDA GPU coredump support to nvproxy

Adds the five missing ioctls required to generate CUDA GPU coredumps using CUDA_ENABLE_COREDUMP_ON_EXCEPTION=1, all on the GT200_DEBUGGER class.

All the new ioctls simple pass-through controls except DEBUG_READ_MEMORY. They are gated on compute,utility, consistent with the existing NV83DE debug controls (SET_EXCEPTION_MASK, READ_ALL_SM_ERROR_STATES, CLEAR_ALL_SM_ERROR_STATES).

Coredump generation additionally uses NV2080_CTRL_CMD_GPU_EXEC_REG_OPS (already supported), so the feature requires running with --nvproxy-allowed-driver-capabilities=all,profiling.

In order for this to work, I added a ctrlDebugReadMemory handler that translates the embedded Buffer pointer in NV83DE_CTRL_DEBUG_READ_MEMORY_PARAMS by substituting a sentry-allocated buffer of the requested Length before invoking the host driver and copying the result back out to the application, mirroring the driver's own embedded-pointer copy logic in embedded_param_copy.c (which disables the RMAPI_PARAM_COPY_MAX_PARAMS_SIZE cap for this control).

Tested on an A10G with a faulting Triton kernel: the generated .nvcudmp matches native (runc) byte-for-byte in size, and cuda-gdb fully decodes it (CUDA Exception: Warp Illegal Address, faulting PC/kernel/warp/lane and backtrace). Without this change, coredump generation silently produces an empty dump (No exception was found on any device).

Assisted-by: Claude
FUTURE_COPYBARA_INTEGRATE_REVIEW=#13644 from luiscape:luis/gpucoredump-support f41356e

Adds the five missing `ioctls` required to generate [CUDA GPU coredumps](https://docs.nvidia.com/cuda/cuda-gdb/index.html#gpu-core-dump-support) using `CUDA_ENABLE_COREDUMP_ON_EXCEPTION=1`, all on the `GT200_DEBUGGER` class.

All the new ioctls simple pass-through controls except `DEBUG_READ_MEMORY`. They are gated on `compute,utility`, consistent with the existing `NV83DE` debug controls (`SET_EXCEPTION_MASK`, `READ_ALL_SM_ERROR_STATES`, `CLEAR_ALL_SM_ERROR_STATES`).

Coredump generation additionally uses `NV2080_CTRL_CMD_GPU_EXEC_REG_OPS` (already supported), so the feature requires running with `--nvproxy-allowed-driver-capabilities=all,profiling`.

In order for this to work, I added a `ctrlDebugReadMemory` handler that translates the embedded `Buffer` pointer in `NV83DE_CTRL_DEBUG_READ_MEMORY_PARAMS` by substituting a sentry-allocated buffer of the requested `Length` before invoking the host driver and copying the result back out to the application, mirroring the driver's own embedded-pointer copy logic in `embedded_param_copy.c` (which disables the `RMAPI_PARAM_COPY_MAX_PARAMS_SIZE` cap for this control).

Tested on an A10G with a faulting Triton kernel: the generated `.nvcudmp` matches native (runc) byte-for-byte in size, and `cuda-gdb` fully decodes it (`CUDA Exception: Warp Illegal Address`, faulting PC/kernel/warp/lane and backtrace). Without this change, coredump generation silently produces an empty dump (`No exception was found on any device`).

Assisted-by: Claude
FUTURE_COPYBARA_INTEGRATE_REVIEW=#13644 from luiscape:luis/gpucoredump-support f41356e
PiperOrigin-RevId: 944582537
@copybara-service copybara-service Bot added the exported Issue was exported automatically label Jul 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

exported Issue was exported automatically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant