mirror of
				https://github.com/NVIDIA/nvidia-container-toolkit
				synced 2025-06-26 18:18:24 +00:00 
			
		
		
		
	Create GDS and MOFED modifiers
This change creates GDS and MOFED modifiers and adds them to the modifer created for the selected runtime mode if the NVIDIA_GDS and NVIDIA_MOFED envvars are set to "enabled", respectively. Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
		
							parent
							
								
									cb34f7c6d1
								
							
						
					
					
						commit
						7f7bec0668
					
				| @ -62,6 +62,30 @@ func newNVIDIAContainerRuntime(logger *logrus.Logger, cfg *config.Config, argv [ | ||||
| 
 | ||||
| // newSpecModifier is a factory method that creates constructs an OCI spec modifer based on the provided config.
 | ||||
| func newSpecModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec, argv []string) (oci.SpecModifier, error) { | ||||
| 	modeModifier, err := newModeModifier(logger, cfg, ociSpec, argv) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	gdsModifier, err := modifier.NewGDSModifier(logger, cfg, ociSpec) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	mofedModifier, err := modifier.NewMOFEDModifier(logger, cfg, ociSpec) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	modifiers := modifier.Merge( | ||||
| 		modeModifier, | ||||
| 		gdsModifier, | ||||
| 		mofedModifier, | ||||
| 	) | ||||
| 	return modifiers, nil | ||||
| } | ||||
| 
 | ||||
| func newModeModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec, argv []string) (oci.SpecModifier, error) { | ||||
| 	switch info.ResolveAutoMode(logger, cfg.NVIDIAContainerRuntimeConfig.Mode) { | ||||
| 	case "legacy": | ||||
| 		return modifier.NewStableRuntimeModifier(logger), nil | ||||
|  | ||||
							
								
								
									
										57
									
								
								internal/modifier/gds.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								internal/modifier/gds.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| /** | ||||
| # Copyright (c) 2022, NVIDIA CORPORATION.  All rights reserved. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| **/ | ||||
| 
 | ||||
| package modifier | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/config" | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/discover" | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/oci" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	nvidiaGDSEnvvar = "NVIDIA_GDS" | ||||
| ) | ||||
| 
 | ||||
| // NewGDSModifier creates the modifiers for GDS devices.
 | ||||
| // If the spec does not contain the NVIDIA_GDS=enabled environment variable no changes are made.
 | ||||
| func NewGDSModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec) (oci.SpecModifier, error) { | ||||
| 	_, err := ociSpec.Load() | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to load OCI spec: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// We check whether a modification is required and return a nil modifier if this is not the case.
 | ||||
| 	visibleDevices, exists := ociSpec.LookupEnv(visibleDevicesEnvvar) | ||||
| 	if !exists || visibleDevices == "" || visibleDevices == visibleDevicesVoid { | ||||
| 		logger.Infof("No modification required: %v=%v (exists=%v)", visibleDevicesEnvvar, visibleDevices, exists) | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	if gds, _ := ociSpec.LookupEnv(nvidiaGDSEnvvar); gds != "enabled" { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	d, err := discover.NewGDSDiscoverer(logger, cfg.NVIDIAContainerCLIConfig.Root) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to construct discoverer for GDS devices: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return NewModifierFromDiscoverer(logger, d) | ||||
| } | ||||
							
								
								
									
										57
									
								
								internal/modifier/mofed.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								internal/modifier/mofed.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| /** | ||||
| # Copyright (c) 2022, NVIDIA CORPORATION.  All rights reserved. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| **/ | ||||
| 
 | ||||
| package modifier | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/config" | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/discover" | ||||
| 	"github.com/NVIDIA/nvidia-container-toolkit/internal/oci" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	nvidiaMOFEDEnvvar = "NVIDIA_MOFED" | ||||
| ) | ||||
| 
 | ||||
| // NewMOFEDModifier creates the modifiers for MOFED devices.
 | ||||
| // If the spec does not contain the NVIDIA_MOFED=enabled environment variable no changes are made.
 | ||||
| func NewMOFEDModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec) (oci.SpecModifier, error) { | ||||
| 	_, err := ociSpec.Load() | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to load OCI spec: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// We check whether a modification is required and return a nil modifier if this is not the case.
 | ||||
| 	visibleDevices, exists := ociSpec.LookupEnv(visibleDevicesEnvvar) | ||||
| 	if !exists || visibleDevices == "" || visibleDevices == visibleDevicesVoid { | ||||
| 		logger.Infof("No modification required: %v=%v (exists=%v)", visibleDevicesEnvvar, visibleDevices, exists) | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	if mofed, _ := ociSpec.LookupEnv(nvidiaMOFEDEnvvar); mofed != "enabled" { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	d, err := discover.NewMOFEDDiscoverer(logger, cfg.NVIDIAContainerCLIConfig.Root) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to construct discoverer for MOFED devices: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return NewModifierFromDiscoverer(logger, d) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user