diff --git a/cmd/nvidia-dra-plugin/nvlib.go b/cmd/nvidia-dra-plugin/nvlib.go index 4ff5f138..6a1f40c6 100644 --- a/cmd/nvidia-dra-plugin/nvlib.go +++ b/cmd/nvidia-dra-plugin/nvlib.go @@ -469,7 +469,21 @@ func walkMigDevices(d nvml.Device, f func(i int, d nvml.Device) error) error { } func (l deviceLib) setTimeSlice(uuids []string, timeSlice int) error { + allocatableDevices, err := l.enumerateAllPossibleDevices() + if err != nil { + return fmt.Errorf("failed to enumerateAllPossibleDevices: %w", err) + } for _, uuid := range uuids { + device := allocatableDevices[uuid] + if device == nil { + klog.InfoS("failed to get device", "uuid", uuid) + continue + } + + if !detactSupportTimeSliceByArch(device.architecture) { + klog.InfoS("the current card does not support setting time slices and will be ignored.", "arch", device.architecture, "uuid", uuid) + continue + } cmd := exec.Command( "nvidia-smi", "compute-policy", @@ -498,3 +512,21 @@ func (l deviceLib) setComputeMode(uuids []string, mode string) error { } return nil } + +// detactSupportTimeSliceByArch Determine whether the architecture series +// supports setting time slices based on the gpu architecture. +func detactSupportTimeSliceByArch(arch string) bool { + // todo: More information is needed to determine the support of various architectures + switch arch { + case "Pascal": + return false + case "Ada": + case "Ampere": + case "Turing": + case "Hopper": + return true + default: + return false + } + return false +}