Skip to content

Commit 03cbf9c

Browse files
committed
Merge branch 'CNT-4798/gdrcopy' into 'main'
Add a new gated modifier for GDRCopy which injects the gdrdrv device node See merge request nvidia/container-toolkit/container-toolkit!530
2 parents 738ebd8 + 55097b3 commit 03cbf9c

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* Add `crun` to the list of configured low-level runtimes.
1212
* Added support for `--ldconfig-path` to `nvidia-ctk cdi generate` command.
1313
* Fix `nvidia-ctk runtime configure --cdi.enabled` for Docker.
14+
* Add discovery of the GDRCopy device (`gdrdrv`) if the `NVIDIA_GDRCOPY` environment variable of the container is set to `enabled`
1415

1516
* [toolkit-container] Bump CUDA base image version to 12.3.1.
1617

internal/discover/gdrcopy.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
# Copyright (c) NVIDIA CORPORATION. All rights reserved.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
**/
16+
17+
package discover
18+
19+
import "github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
20+
21+
func NewGDRCopyDiscoverer(logger logger.Interface, devRoot string) (Discover, error) {
22+
return NewCharDeviceDiscoverer(
23+
logger,
24+
devRoot,
25+
[]string{"/dev/gdrdrv"},
26+
), nil
27+
}

internal/modifier/gated.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const (
3030
nvidiaGDSEnvvar = "NVIDIA_GDS"
3131
nvidiaMOFEDEnvvar = "NVIDIA_MOFED"
3232
nvidiaNVSWITCHEnvvar = "NVIDIA_NVSWITCH"
33+
nvidiaGDRCOPYEnvvar = "NVIDIA_GDRCOPY"
3334
)
3435

3536
// NewFeatureGatedModifier creates the modifiers for optional features.
@@ -38,6 +39,7 @@ const (
3839
// NVIDIA_GDS=enabled
3940
// NVIDIA_MOFED=enabled
4041
// NVIDIA_NVSWITCH=enabled
42+
// NVIDIA_GDRCOPY=enabled
4143
//
4244
// If not devices are selected, no changes are made.
4345
func NewFeatureGatedModifier(logger logger.Interface, cfg *config.Config, image image.CUDA) (oci.SpecModifier, error) {
@@ -75,5 +77,13 @@ func NewFeatureGatedModifier(logger logger.Interface, cfg *config.Config, image
7577
discoverers = append(discoverers, d)
7678
}
7779

80+
if image.Getenv(nvidiaGDRCOPYEnvvar) == "enabled" {
81+
d, err := discover.NewGDRCopyDiscoverer(logger, devRoot)
82+
if err != nil {
83+
return nil, fmt.Errorf("failed to construct discoverer for GDRCopy devices: %w", err)
84+
}
85+
discoverers = append(discoverers, d)
86+
}
87+
7888
return NewModifierFromDiscoverer(logger, discover.Merge(discoverers...))
7989
}

0 commit comments

Comments
 (0)