Add nvproxy support for V100 Nvidia GPUs.

Tested on 1 V100 GPU:
```
$ docker run --runtime=runsc --rm --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubi8
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
```

PiperOrigin-RevId: 549837326
This commit is contained in:
Ayush Ranjan
2023-07-20 22:09:39 -07:00
committed by gVisor bot
parent d40be91ac3
commit 41ec0d4189
4 changed files with 19 additions and 5 deletions
+10
View File
@@ -30,6 +30,8 @@ const (
FERMI_CONTEXT_SHARE_A = 0x00009067
FERMI_VASPACE_A = 0x000090f1
KEPLER_CHANNEL_GROUP_A = 0x0000a06c
VOLTA_USERMODE_A = 0x0000c361
VOLTA_CHANNEL_GPFIFO_A = 0x0000c36f
TURING_USERMODE_A = 0x0000c461
TURING_CHANNEL_GPFIFO_A = 0x0000c46f
AMPERE_CHANNEL_GPFIFO_A = 0x0000c56f
@@ -45,6 +47,14 @@ const (
HOPPER_COMPUTE_A = 0x0000cbc0
)
// Class handles for older generations that are not supported by the open source
// driver. Volta was the last such generation. These are defined in files under
// src/common/sdk/nvidia/inc/class/.
const (
VOLTA_COMPUTE_A = 0x0000c3c0
VOLTA_DMA_COPY_A = 0x0000c3b5
)
// NV0005_ALLOC_PARAMETERS is the alloc params type for NV01_EVENT_OS_EVENT,
// from src/common/sdk/nvidia/inc/class/cl0005.h.
//
+1
View File
@@ -243,6 +243,7 @@ const (
// From src/common/sdk/nvidia/inc/ctrl/ctrl90e6.h:
const (
NV90E6_CTRL_CMD_MASTER_GET_ERROR_INTR_OFFSET_MASK = 0x90e60101
NV90E6_CTRL_CMD_MASTER_GET_VIRTUAL_FUNCTION_ERROR_CONT_INTR_MASK = 0x90e60102
)
+5 -4
View File
@@ -596,6 +596,7 @@ func rmControl(fi *frontendIoctlState) (uintptr, error) {
nvgpu.NV83DE_CTRL_CMD_DEBUG_READ_ALL_SM_ERROR_STATES,
nvgpu.NV83DE_CTRL_CMD_DEBUG_CLEAR_ALL_SM_ERROR_STATES,
nvgpu.NV906F_CTRL_CMD_RESET_CHANNEL,
nvgpu.NV90E6_CTRL_CMD_MASTER_GET_ERROR_INTR_OFFSET_MASK,
nvgpu.NV90E6_CTRL_CMD_MASTER_GET_VIRTUAL_FUNCTION_ERROR_CONT_INTR_MASK,
nvgpu.NVC36F_CTRL_GET_CLASS_ENGINEID,
nvgpu.NVC36F_CTRL_CMD_GPFIFO_GET_WORK_SUBMIT_TOKEN,
@@ -770,15 +771,15 @@ func rmAlloc(fi *frontendIoctlState) (uintptr, error) {
return rmAllocSimple[nvgpu.NV_VASPACE_ALLOCATION_PARAMETERS](fi, &ioctlParams, isNVOS64)
case nvgpu.KEPLER_CHANNEL_GROUP_A:
return rmAllocSimple[nvgpu.NV_CHANNEL_GROUP_ALLOCATION_PARAMETERS](fi, &ioctlParams, isNVOS64)
case nvgpu.TURING_CHANNEL_GPFIFO_A, nvgpu.AMPERE_CHANNEL_GPFIFO_A:
case nvgpu.VOLTA_CHANNEL_GPFIFO_A, nvgpu.TURING_CHANNEL_GPFIFO_A, nvgpu.AMPERE_CHANNEL_GPFIFO_A:
return rmAllocSimple[nvgpu.NV_CHANNEL_ALLOC_PARAMS](fi, &ioctlParams, isNVOS64)
case nvgpu.TURING_DMA_COPY_A, nvgpu.AMPERE_DMA_COPY_A, nvgpu.AMPERE_DMA_COPY_B, nvgpu.HOPPER_DMA_COPY_A:
case nvgpu.VOLTA_DMA_COPY_A, nvgpu.TURING_DMA_COPY_A, nvgpu.AMPERE_DMA_COPY_A, nvgpu.AMPERE_DMA_COPY_B, nvgpu.HOPPER_DMA_COPY_A:
return rmAllocSimple[nvgpu.NVB0B5_ALLOCATION_PARAMETERS](fi, &ioctlParams, isNVOS64)
case nvgpu.TURING_COMPUTE_A, nvgpu.AMPERE_COMPUTE_A, nvgpu.AMPERE_COMPUTE_B, nvgpu.ADA_COMPUTE_A, nvgpu.HOPPER_COMPUTE_A:
case nvgpu.VOLTA_COMPUTE_A, nvgpu.TURING_COMPUTE_A, nvgpu.AMPERE_COMPUTE_A, nvgpu.AMPERE_COMPUTE_B, nvgpu.ADA_COMPUTE_A, nvgpu.HOPPER_COMPUTE_A:
return rmAllocSimple[nvgpu.NV_GR_ALLOCATION_PARAMETERS](fi, &ioctlParams, isNVOS64)
case nvgpu.HOPPER_USERMODE_A:
return rmAllocSimple[nvgpu.NV_HOPPER_USERMODE_A_PARAMS](fi, &ioctlParams, isNVOS64)
case nvgpu.GF100_SUBDEVICE_MASTER, nvgpu.TURING_USERMODE_A:
case nvgpu.GF100_SUBDEVICE_MASTER, nvgpu.VOLTA_USERMODE_A, nvgpu.TURING_USERMODE_A:
return rmAllocNoParams(fi, &ioctlParams, isNVOS64)
default:
fi.ctx.Warningf("nvproxy: unknown allocation class %#08x", ioctlParams.HClass)
+3 -1
View File
@@ -13,7 +13,9 @@
// limitations under the License.
// Package nvproxy implements proxying for the Nvidia GPU Linux kernel driver:
// https://github.com/NVIDIA/open-gpu-kernel-modules
// https://github.com/NVIDIA/open-gpu-kernel-modules.
//
// Supported Nvidia GPUs: T4, L4, A100, A10G, V100 and H100.
package nvproxy
import (