Skip to content

Commit 94cfa84

Browse files
committed
Use jit-cdi mode for CSV systems
Signed-off-by: Evan Lezar <[email protected]>
1 parent bad48b6 commit 94cfa84

File tree

5 files changed

+33
-15
lines changed

5 files changed

+33
-15
lines changed

internal/info/auto.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ type RuntimeModeResolver interface {
5353
type modeResolver struct {
5454
logger logger.Interface
5555
// TODO: This only needs to consider the requested devices.
56-
image *image.CUDA
57-
propertyExtractor info.PropertyExtractor
58-
defaultMode RuntimeMode
56+
image *image.CUDA
57+
propertyExtractor info.PropertyExtractor
58+
defaultMode RuntimeMode
59+
forceCSVModeForTegraSystems bool
5960
}
6061

6162
type Option func(*modeResolver)
@@ -66,6 +67,12 @@ func WithDefaultMode(defaultMode RuntimeMode) Option {
6667
}
6768
}
6869

70+
func WithForceCSVModeForTegraSystems(forceCSVModeForTegraSystems bool) Option {
71+
return func(mr *modeResolver) {
72+
mr.forceCSVModeForTegraSystems = forceCSVModeForTegraSystems
73+
}
74+
}
75+
6976
func WithLogger(logger logger.Interface) Option {
7077
return func(mr *modeResolver) {
7178
mr.logger = logger
@@ -130,7 +137,10 @@ func (m *modeResolver) ResolveRuntimeMode(mode string) (rmode RuntimeMode) {
130137
case info.PlatformNVML, info.PlatformWSL:
131138
return m.defaultMode
132139
case info.PlatformTegra:
133-
return CSVRuntimeMode
140+
if m.forceCSVModeForTegraSystems {
141+
return CSVRuntimeMode
142+
}
143+
return JitCDIRuntimeMode
134144
}
135145
return m.defaultMode
136146
}

internal/modifier/cdi.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func NewCDIModifier(logger logger.Interface, cfg *config.Config, image image.CUD
6565
automaticDevices = append(automaticDevices, withUniqueDevices(gatedDevices(image)).DeviceRequests()...)
6666
automaticDevices = append(automaticDevices, withUniqueDevices(imexDevices(image)).DeviceRequests()...)
6767

68-
automaticModifier, err := newAutomaticCDISpecModifier(logger, cfg, automaticDevices)
68+
automaticModifier, err := newAutomaticCDISpecModifier(logger, cfg, image, automaticDevices)
6969
if err == nil {
7070
return automaticModifier, nil
7171
}
@@ -163,9 +163,10 @@ func filterAutomaticDevices(devices []string) []string {
163163
return automatic
164164
}
165165

166-
func newAutomaticCDISpecModifier(logger logger.Interface, cfg *config.Config, devices []string) (oci.SpecModifier, error) {
166+
func newAutomaticCDISpecModifier(logger logger.Interface, cfg *config.Config, image image.CUDA, devices []string) (oci.SpecModifier, error) {
167167
logger.Debugf("Generating in-memory CDI specs for devices %v", devices)
168168

169+
csvFileList := getCSVFileList(cfg, image)
169170
cdiModeIdentifiers := cdiModeIdentfiersFromDevices(devices...)
170171

171172
logger.Debugf("Per-mode identifiers: %v", cdiModeIdentifiers)
@@ -179,6 +180,7 @@ func newAutomaticCDISpecModifier(logger logger.Interface, cfg *config.Config, de
179180
nvcdi.WithClass(cdiModeIdentifiers.deviceClassByMode[mode]),
180181
nvcdi.WithMode(mode),
181182
nvcdi.WithFeatureFlags(cfg.NVIDIAContainerRuntimeConfig.Modes.JitCDI.NVCDIFeatureFlags...),
183+
nvcdi.WithCSVFiles(csvFileList),
182184
)
183185
if err != nil {
184186
return nil, fmt.Errorf("failed to construct CDI library for mode %q: %w", mode, err)

internal/modifier/csv.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,7 @@ func NewCSVModifier(logger logger.Interface, cfg *config.Config, container image
4444
return nil, fmt.Errorf("requirements not met: %v", err)
4545
}
4646

47-
csvFiles, err := csv.GetFileList(cfg.NVIDIAContainerRuntimeConfig.Modes.CSV.MountSpecPath)
48-
if err != nil {
49-
return nil, fmt.Errorf("failed to get list of CSV files: %v", err)
50-
}
51-
52-
if container.Getenv(image.EnvVarNvidiaRequireJetpack) != "csv-mounts=all" {
53-
csvFiles = csv.BaseFilesOnly(csvFiles)
54-
}
47+
csvFiles := getCSVFileList(cfg, container)
5548

5649
cdilib, err := nvcdi.New(
5750
nvcdi.WithLogger(logger),
@@ -106,3 +99,14 @@ func checkRequirements(logger logger.Interface, image image.CUDA) error {
10699

107100
return r.Assert()
108101
}
102+
103+
func getCSVFileList(cfg *config.Config, container image.CUDA) []string {
104+
csvFiles, err := csv.GetFileList(cfg.NVIDIAContainerRuntimeConfig.Modes.CSV.MountSpecPath)
105+
if err != nil {
106+
return nil
107+
}
108+
if container.Getenv(image.EnvVarNvidiaRequireJetpack) != "csv-mounts=all" {
109+
csvFiles = csv.BaseFilesOnly(csvFiles)
110+
}
111+
return csvFiles
112+
}

internal/platform-support/tegra/csv/csv.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const (
3434
)
3535

3636
// DefaultFileList returns the list of CSV files that are used by default.
37-
func DefaultFileList() []string {
37+
func DefaultFileList(inFolder string) []string {
3838
files := []string{
3939
"devices.csv",
4040
"drivers.csv",

internal/runtime/runtime_factory.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ func initRuntimeModeAndImage(logger logger.Interface, cfg *config.Config, ociSpe
141141
modeResolver := info.NewRuntimeModeResolver(
142142
info.WithLogger(logger),
143143
info.WithImage(&image),
144+
// TODO: Add a feature flag.
145+
info.WithForceCSVModeForTegraSystems(false),
144146
)
145147
mode := modeResolver.ResolveRuntimeMode(cfg.NVIDIAContainerRuntimeConfig.Mode)
146148
// We update the mode here so that we can continue passing just the config to other functions.

0 commit comments

Comments
 (0)