Skip to content

Commit 90b76ac

Browse files
committed
Create device nodes in JIT-CDI mode
Signed-off-by: Evan Lezar <[email protected]>
1 parent 54ea4a2 commit 90b76ac

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

internal/modifier/cdi.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package modifier
1818

1919
import (
2020
"fmt"
21+
"os/exec"
2122
"strings"
2223

2324
"tags.cncf.io/container-device-interface/pkg/parser"
@@ -28,6 +29,7 @@ import (
2829
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root"
2930
"github.com/NVIDIA/nvidia-container-toolkit/internal/modifier/cdi"
3031
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
32+
"github.com/NVIDIA/nvidia-container-toolkit/internal/system/nvdevices"
3133
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
3234
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec"
3335
)
@@ -204,6 +206,8 @@ func generateAutomaticCDISpec(logger logger.Interface, cfg *config.Config, drive
204206
identifiers = append(identifiers, id)
205207
}
206208

209+
tryCreateDeviceNodes(logger, driver, identifiers...)
210+
207211
deviceSpecs, err := cdilib.GetDeviceSpecsByID(identifiers...)
208212
if err != nil {
209213
return nil, fmt.Errorf("failed to get CDI device specs: %w", err)
@@ -221,3 +225,22 @@ func generateAutomaticCDISpec(logger logger.Interface, cfg *config.Config, drive
221225
spec.WithClass("gpu"),
222226
)
223227
}
228+
229+
func tryCreateDeviceNodes(logger logger.Interface, driver *root.Driver, identifiers ...string) {
230+
devices, err := nvdevices.New(
231+
nvdevices.WithLogger(logger),
232+
nvdevices.WithDevRoot(driver.Root),
233+
)
234+
if err != nil {
235+
return
236+
}
237+
if err := devices.CreateNVIDIAControlDevices(); err != nil {
238+
logger.Warningf("Failed to create control devices: %v", err)
239+
}
240+
241+
// We run nvidia-smi -L to force the creation of the device nodes.
242+
nvidiaSMI := exec.Command("nvidia-smi", "-L")
243+
if err := nvidiaSMI.Run(); err != nil {
244+
logger.Warningf("Failed to run nvidia-smi: %v", err)
245+
}
246+
}

0 commit comments

Comments
 (0)