Only init nvml as required when generating CDI specs

CDI generation modes such as management and wsl don't require
NVML. This change removes the top-level instantiation of nvmllib
and replaces it with an instanitation in the nvml CDI spec generation
code.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar 2023-03-15 10:12:44 +02:00
parent 380eb8340a
commit 685802b1ce
4 changed files with 12 additions and 12 deletions

View File

@ -3,6 +3,7 @@
## v1.13.0-rc.3 ## v1.13.0-rc.3
* Prefer /run over /var/run when locating nvidia-persistenced and nvidia-fabricmanager sockets. * Prefer /run over /var/run when locating nvidia-persistenced and nvidia-fabricmanager sockets.
* Only initialize NVML for modes that require it when runing `nvidia-ctk cdi generate`
## v1.13.0-rc.2 ## v1.13.0-rc.2

View File

@ -30,8 +30,6 @@ import (
specs "github.com/container-orchestrated-devices/container-device-interface/specs-go" specs "github.com/container-orchestrated-devices/container-device-interface/specs-go"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvml"
) )
const ( const (
@ -190,21 +188,11 @@ func (m command) generateSpec(cfg *config) (spec.Interface, error) {
return nil, fmt.Errorf("failed to create device namer: %v", err) return nil, fmt.Errorf("failed to create device namer: %v", err)
} }
nvmllib := nvml.New()
if r := nvmllib.Init(); r != nvml.SUCCESS {
return nil, r
}
defer nvmllib.Shutdown()
devicelib := device.New(device.WithNvml(nvmllib))
cdilib := nvcdi.New( cdilib := nvcdi.New(
nvcdi.WithLogger(m.logger), nvcdi.WithLogger(m.logger),
nvcdi.WithDriverRoot(cfg.driverRoot), nvcdi.WithDriverRoot(cfg.driverRoot),
nvcdi.WithNVIDIACTKPath(cfg.nvidiaCTKPath), nvcdi.WithNVIDIACTKPath(cfg.nvidiaCTKPath),
nvcdi.WithDeviceNamer(deviceNamer), nvcdi.WithDeviceNamer(deviceNamer),
nvcdi.WithDeviceLib(devicelib),
nvcdi.WithNvmlLib(nvmllib),
nvcdi.WithMode(string(cfg.mode)), nvcdi.WithMode(string(cfg.mode)),
) )

View File

@ -31,6 +31,11 @@ import (
// NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation. // NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation.
// The supplied NVML Library is used to query the expected driver version. // The supplied NVML Library is used to query the expected driver version.
func NewDriverDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { func NewDriverDiscoverer(logger *logrus.Logger, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) {
if r := nvmllib.Init(); r != nvml.SUCCESS {
return nil, fmt.Errorf("failed to initalize NVML: %v", r)
}
defer nvmllib.Shutdown()
version, r := nvmllib.SystemGetDriverVersion() version, r := nvmllib.SystemGetDriverVersion()
if r != nvml.SUCCESS { if r != nvml.SUCCESS {
return nil, fmt.Errorf("failed to determine driver version: %v", r) return nil, fmt.Errorf("failed to determine driver version: %v", r)

View File

@ -24,6 +24,7 @@ import (
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
"github.com/container-orchestrated-devices/container-device-interface/specs-go" "github.com/container-orchestrated-devices/container-device-interface/specs-go"
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device" "gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvml"
) )
type nvmllib nvcdilib type nvmllib nvcdilib
@ -39,6 +40,11 @@ func (l *nvmllib) GetSpec() (spec.Interface, error) {
func (l *nvmllib) GetAllDeviceSpecs() ([]specs.Device, error) { func (l *nvmllib) GetAllDeviceSpecs() ([]specs.Device, error) {
var deviceSpecs []specs.Device var deviceSpecs []specs.Device
if r := l.nvmllib.Init(); r != nvml.SUCCESS {
return nil, fmt.Errorf("failed to initalize NVML: %v", r)
}
defer l.nvmllib.Shutdown()
gpuDeviceSpecs, err := l.getGPUDeviceSpecs() gpuDeviceSpecs, err := l.getGPUDeviceSpecs()
if err != nil { if err != nil {
return nil, err return nil, err