@@ -23,6 +23,7 @@ import (
2323const (
2424 CCModeON CCMode = "ON"
2525 CCModeOFF CCMode = "OFF"
26+ CCModeDevTools CCMode = "DEVTOOLS"
2627 installerContainerID = "tee-gpu-driver-installer-container"
2728 installerSnapshotID = "tee-gpu-driver-installer-snapshot"
2829)
@@ -36,7 +37,7 @@ type CCMode string
3637
3738func (ccm CCMode ) isValid () error {
3839 switch ccm {
39- case CCModeOFF , CCModeON :
40+ case CCModeOFF , CCModeON , CCModeDevTools :
4041 return nil
4142 }
4243 return fmt .Errorf ("invalid gpu cc mode: %s" , ccm )
@@ -90,8 +91,7 @@ func (di *DriverInstaller) InstallGPUDrivers(ctx context.Context) error {
9091 return fmt .Errorf ("failed to pull installer image: %v" , err )
9192 }
9293
93- installerDigest := image .Target ().Digest .String ()
94- if err := verifyInstallerImageDigest (installerDigest ); err != nil {
94+ if err := verifyInstallerImageDigest (image ); err != nil {
9595 return err
9696 }
9797
@@ -195,7 +195,8 @@ func getInstallerImageReference() (string, error) {
195195 return installerImageRef , nil
196196}
197197
198- func verifyInstallerImageDigest (installerDigest string ) error {
198+ func verifyInstallerImageDigest (image containerd.Image ) error {
199+ installerDigest := image .Target ().Digest .String ()
199200 imageDigestBytes , err := os .ReadFile (InstallerImageDigestFile )
200201 if err != nil {
201202 return fmt .Errorf ("failed to get the cos-gpu-installer image digest: %v" , err )
@@ -239,16 +240,16 @@ func setGPUStateToReady() error {
239240}
240241
241242func isGPUCCModeEnabled () (bool , error ) {
242- ccMode , err := GetGPUCCMode ()
243+ ccMode , err := QueryCCMode ()
243244 if err != nil {
244245 return false , err
245246 }
246247 return ccMode == CCModeON , nil
247248}
248249
249- // GetGPUCCMode executes nvidia-smi to determine the current Confidential Computing (CC) mode status of the GPU.
250- // It returns the CC mode ("ON" or "OFF") and an error if the command fails or if the output cannot be parsed .
251- func GetGPUCCMode () (CCMode , error ) {
250+ // QueryCCMode executes nvidia-smi to determine the current Confidential Computing (CC) mode status of the GPU.
251+ // If DEVTOOLS mode is enabled, it would override CC mode as DEVTOOLS. DEVTOOLS mode would be enabled only when CC mode is ON .
252+ func QueryCCMode () (CCMode , error ) {
252253 // Run nvidia-smi conf-compute command to get the confidential computing mode status.
253254 nvidiaSmiCmd := fmt .Sprintf ("%s/bin/nvidia-smi" , InstallationHostDir )
254255 ccModeOutput , err := exec .Command (nvidiaSmiCmd , "conf-compute" , "-f" ).Output ()
@@ -259,7 +260,17 @@ func GetGPUCCMode() (CCMode, error) {
259260 if err != nil {
260261 return "" , err
261262 }
262- return CCMode (ccMode ), nil
263+
264+ devToolsEnabled , err := isDevToolsModeEnabled ()
265+ if err != nil {
266+ return "" , err
267+ }
268+
269+ if devToolsEnabled {
270+ ccMode = CCModeDevTools
271+ }
272+
273+ return ccMode , nil
263274}
264275
265276func parseCCStatus (output string ) (CCMode , error ) {
@@ -276,6 +287,21 @@ func parseCCStatus(output string) (CCMode, error) {
276287 return ccMode , nil
277288}
278289
290+ func isDevToolsModeEnabled () (bool , error ) {
291+ nvidiaSmiCmd := fmt .Sprintf ("%s/bin/nvidia-smi" , InstallationHostDir )
292+ output , err := exec .Command (nvidiaSmiCmd , "conf-compute" , "-d" ).Output ()
293+ if err != nil {
294+ return false , err
295+ }
296+ re := regexp .MustCompile (`DevTools Mode:\s*(ON|OFF)` )
297+ match := re .FindStringSubmatch (string (output ))
298+
299+ if len (match ) < 2 {
300+ return false , fmt .Errorf ("DevTools mode not found in output: %s" , output )
301+ }
302+ return match [1 ] == "ON" , nil
303+ }
304+
279305func launchNvidiaPersistencedProcess (logger logging.Logger ) error {
280306 nvidiaPersistencedCmd := fmt .Sprintf ("%s/bin/nvidia-persistenced" , InstallationHostDir )
281307 logger .Info ("Starting nvidia-persistenced process" )
0 commit comments