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.
 | // 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) { | 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) { | 	switch info.ResolveAutoMode(logger, cfg.NVIDIAContainerRuntimeConfig.Mode) { | ||||||
| 	case "legacy": | 	case "legacy": | ||||||
| 		return modifier.NewStableRuntimeModifier(logger), nil | 		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