mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-06-26 18:18:24 +00:00
Merge pull request #1103 from elezar/reenable-nvsandboxutils
Some checks failed
Some checks failed
Reenable nvsandboxutils for driver discovery
This commit is contained in:
commit
b934c68bef
@ -45,3 +45,13 @@ const (
|
|||||||
// This was added with v1.17.5 of the NVIDIA Container Toolkit.
|
// This was added with v1.17.5 of the NVIDIA Container Toolkit.
|
||||||
HookEnableCudaCompat = HookName("enable-cuda-compat")
|
HookEnableCudaCompat = HookName("enable-cuda-compat")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// A FeatureFlag refers to a specific feature that can be toggled in the CDI api.
|
||||||
|
// All features are off by default.
|
||||||
|
type FeatureFlag string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// FeatureDisableNvsandboxUtils disables the use of nvsandboxutils when
|
||||||
|
// querying devices.
|
||||||
|
FeatureDisableNvsandboxUtils = FeatureFlag("disable-nvsandbox-utils")
|
||||||
|
)
|
||||||
|
@ -56,6 +56,8 @@ type nvcdilib struct {
|
|||||||
|
|
||||||
mergedDeviceOptions []transform.MergedDeviceOption
|
mergedDeviceOptions []transform.MergedDeviceOption
|
||||||
|
|
||||||
|
featureFlags map[FeatureFlag]bool
|
||||||
|
|
||||||
disabledHooks disabledHooks
|
disabledHooks disabledHooks
|
||||||
hookCreator discover.HookCreator
|
hookCreator discover.HookCreator
|
||||||
}
|
}
|
||||||
@ -64,6 +66,7 @@ type nvcdilib struct {
|
|||||||
func New(opts ...Option) (Interface, error) {
|
func New(opts ...Option) (Interface, error) {
|
||||||
l := &nvcdilib{
|
l := &nvcdilib{
|
||||||
disabledHooks: make(disabledHooks),
|
disabledHooks: make(disabledHooks),
|
||||||
|
featureFlags: make(map[FeatureFlag]bool),
|
||||||
}
|
}
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(l)
|
opt(l)
|
||||||
@ -108,24 +111,7 @@ func New(opts ...Option) (Interface, error) {
|
|||||||
}
|
}
|
||||||
l.nvmllib = nvml.New(nvmlOpts...)
|
l.nvmllib = nvml.New(nvmlOpts...)
|
||||||
}
|
}
|
||||||
// TODO: Repeated calls to nvsandboxutils.Init and Shutdown are causing
|
l.nvsandboxutilslib = l.getNvsandboxUtilsLib()
|
||||||
// segmentation violations. Here we disabled nvsandbox utils unless explicitly
|
|
||||||
// specified.
|
|
||||||
// This will be reenabled as soon as we have more visibility into why this is
|
|
||||||
// happening and a mechanism to detect and disable this if required.
|
|
||||||
// if l.nvsandboxutilslib == nil {
|
|
||||||
// var nvsandboxutilsOpts []nvsandboxutils.LibraryOption
|
|
||||||
// // Set the library path for libnvidia-sandboxutils
|
|
||||||
// candidates, err := l.driver.Libraries().Locate("libnvidia-sandboxutils.so.1")
|
|
||||||
// if err != nil {
|
|
||||||
// l.logger.Warningf("Ignoring error in locating libnvidia-sandboxutils.so.1: %v", err)
|
|
||||||
// } else {
|
|
||||||
// libNvidiaSandboxutilsPath := candidates[0]
|
|
||||||
// l.logger.Infof("Using %v", libNvidiaSandboxutilsPath)
|
|
||||||
// nvsandboxutilsOpts = append(nvsandboxutilsOpts, nvsandboxutils.WithLibraryPath(libNvidiaSandboxutilsPath))
|
|
||||||
// }
|
|
||||||
// l.nvsandboxutilslib = nvsandboxutils.New(nvsandboxutilsOpts...)
|
|
||||||
// }
|
|
||||||
if l.devicelib == nil {
|
if l.devicelib == nil {
|
||||||
l.devicelib = device.New(l.nvmllib)
|
l.devicelib = device.New(l.nvmllib)
|
||||||
}
|
}
|
||||||
@ -231,3 +217,26 @@ func (l *nvcdilib) getCudaVersionNvsandboxutils() (string, error) {
|
|||||||
}
|
}
|
||||||
return version, nil
|
return version, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getNvsandboxUtilsLib returns the nvsandboxutilslib to use for CDI spec
|
||||||
|
// generation.
|
||||||
|
func (l *nvcdilib) getNvsandboxUtilsLib() nvsandboxutils.Interface {
|
||||||
|
if l.featureFlags[FeatureDisableNvsandboxUtils] {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if l.nvsandboxutilslib != nil {
|
||||||
|
return l.nvsandboxutilslib
|
||||||
|
}
|
||||||
|
|
||||||
|
var nvsandboxutilsOpts []nvsandboxutils.LibraryOption
|
||||||
|
// Set the library path for libnvidia-sandboxutils
|
||||||
|
candidates, err := l.driver.Libraries().Locate("libnvidia-sandboxutils.so.1")
|
||||||
|
if err != nil {
|
||||||
|
l.logger.Warningf("Ignoring error in locating libnvidia-sandboxutils.so.1: %v", err)
|
||||||
|
} else {
|
||||||
|
libNvidiaSandboxutilsPath := candidates[0]
|
||||||
|
l.logger.Infof("Using %v", libNvidiaSandboxutilsPath)
|
||||||
|
nvsandboxutilsOpts = append(nvsandboxutilsOpts, nvsandboxutils.WithLibraryPath(libNvidiaSandboxutilsPath))
|
||||||
|
}
|
||||||
|
return nvsandboxutils.New(nvsandboxutilsOpts...)
|
||||||
|
}
|
||||||
|
@ -166,3 +166,14 @@ func WithDisabledHook(hook HookName) Option {
|
|||||||
o.disabledHooks[hook] = true
|
o.disabledHooks[hook] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithFeatureFlag allows specified features to be toggled on.
|
||||||
|
// This option can be specified multiple times for each feature flag.
|
||||||
|
func WithFeatureFlag(featureFlag FeatureFlag) Option {
|
||||||
|
return func(o *nvcdilib) {
|
||||||
|
if o.featureFlags == nil {
|
||||||
|
o.featureFlags = make(map[FeatureFlag]bool)
|
||||||
|
}
|
||||||
|
o.featureFlags[featureFlag] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user