mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-06-26 18:18:24 +00:00
Bump github.com/NVIDIA/go-nvlib
Bumps [github.com/NVIDIA/go-nvlib](https://github.com/NVIDIA/go-nvlib) from 0.0.0-20231115170030-b21432a353e1 to 0.2.0. - [Release notes](https://github.com/NVIDIA/go-nvlib/releases) - [Commits](https://github.com/NVIDIA/go-nvlib/commits/v0.2.0) --- updated-dependencies: - dependency-name: github.com/NVIDIA/go-nvlib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
94
vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/identifier.go
generated
vendored
Normal file
94
vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/identifier.go
generated
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (c) 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 device
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// Identifier can be used to refer to a GPU or MIG device.
|
||||
// This includes a device index or UUID.
|
||||
type Identifier string
|
||||
|
||||
// IsGpuIndex checks if an identifier is a full GPU index
|
||||
func (i Identifier) IsGpuIndex() bool {
|
||||
if _, err := strconv.ParseUint(string(i), 10, 0); err != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// IsMigIndex checks if an identifier is a MIG index
|
||||
func (i Identifier) IsMigIndex() bool {
|
||||
split := strings.Split(string(i), ":")
|
||||
if len(split) != 2 {
|
||||
return false
|
||||
}
|
||||
for _, s := range split {
|
||||
if !Identifier(s).IsGpuIndex() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// IsUUID checks if an identifier is a UUID
|
||||
func (i Identifier) IsUUID() bool {
|
||||
return i.IsGpuUUID() || i.IsMigUUID()
|
||||
}
|
||||
|
||||
// IsGpuUUID checks if an identifier is a GPU UUID
|
||||
// A GPU UUID must be of the form GPU-b1028956-cfa2-0990-bf4a-5da9abb51763
|
||||
func (i Identifier) IsGpuUUID() bool {
|
||||
if !strings.HasPrefix(string(i), "GPU-") {
|
||||
return false
|
||||
}
|
||||
_, err := uuid.Parse(strings.TrimPrefix(string(i), "GPU-"))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsMigUUID checks if an identifier is a MIG UUID
|
||||
// A MIG UUID can be of one of two forms:
|
||||
// - MIG-b1028956-cfa2-0990-bf4a-5da9abb51763
|
||||
// - MIG-GPU-b1028956-cfa2-0990-bf4a-5da9abb51763/3/0
|
||||
func (i Identifier) IsMigUUID() bool {
|
||||
if !strings.HasPrefix(string(i), "MIG-") {
|
||||
return false
|
||||
}
|
||||
suffix := strings.TrimPrefix(string(i), "MIG-")
|
||||
_, err := uuid.Parse(suffix)
|
||||
if err == nil {
|
||||
return true
|
||||
}
|
||||
split := strings.Split(suffix, "/")
|
||||
if len(split) != 3 {
|
||||
return false
|
||||
}
|
||||
if !Identifier(split[0]).IsGpuUUID() {
|
||||
return false
|
||||
}
|
||||
for _, s := range split[1:] {
|
||||
_, err := strconv.ParseUint(s, 10, 0)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
30
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/consts.go
generated
vendored
30
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/consts.go
generated
vendored
@@ -20,6 +20,11 @@ import (
|
||||
"github.com/NVIDIA/go-nvml/pkg/nvml"
|
||||
)
|
||||
|
||||
// General untyped constants
|
||||
const (
|
||||
NVLINK_MAX_LINKS = nvml.NVLINK_MAX_LINKS
|
||||
)
|
||||
|
||||
// Return constants
|
||||
const (
|
||||
SUCCESS = Return(nvml.SUCCESS)
|
||||
@@ -131,3 +136,28 @@ const (
|
||||
EventTypeSingleBitEccError = nvml.EventTypeSingleBitEccError
|
||||
EventTypeDoubleBitEccError = nvml.EventTypeDoubleBitEccError
|
||||
)
|
||||
|
||||
// GPU Topology enumeration
|
||||
const (
|
||||
TOPOLOGY_INTERNAL = GpuTopologyLevel(nvml.TOPOLOGY_INTERNAL)
|
||||
TOPOLOGY_SINGLE = GpuTopologyLevel(nvml.TOPOLOGY_SINGLE)
|
||||
TOPOLOGY_MULTIPLE = GpuTopologyLevel(nvml.TOPOLOGY_MULTIPLE)
|
||||
TOPOLOGY_HOSTBRIDGE = GpuTopologyLevel(nvml.TOPOLOGY_HOSTBRIDGE)
|
||||
TOPOLOGY_NODE = GpuTopologyLevel(nvml.TOPOLOGY_NODE)
|
||||
TOPOLOGY_SYSTEM = GpuTopologyLevel(nvml.TOPOLOGY_SYSTEM)
|
||||
)
|
||||
|
||||
// Generic enable/disable constants
|
||||
const (
|
||||
FEATURE_DISABLED = EnableState(nvml.FEATURE_DISABLED)
|
||||
FEATURE_ENABLED = EnableState(nvml.FEATURE_ENABLED)
|
||||
)
|
||||
|
||||
// Compute mode constants
|
||||
const (
|
||||
COMPUTEMODE_DEFAULT = ComputeMode(nvml.COMPUTEMODE_DEFAULT)
|
||||
COMPUTEMODE_EXCLUSIVE_THREAD = ComputeMode(nvml.COMPUTEMODE_EXCLUSIVE_THREAD)
|
||||
COMPUTEMODE_PROHIBITED = ComputeMode(nvml.COMPUTEMODE_PROHIBITED)
|
||||
COMPUTEMODE_EXCLUSIVE_PROCESS = ComputeMode(nvml.COMPUTEMODE_EXCLUSIVE_PROCESS)
|
||||
COMPUTEMODE_COUNT = ComputeMode(nvml.COMPUTEMODE_COUNT)
|
||||
)
|
||||
|
||||
35
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/device.go
generated
vendored
35
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/device.go
generated
vendored
@@ -22,6 +22,11 @@ type nvmlDevice nvml.Device
|
||||
|
||||
var _ Device = (*nvmlDevice)(nil)
|
||||
|
||||
// nvmlDeviceHandle returns a pointer to the underlying device.
|
||||
func (d nvmlDevice) nvmlDeviceHandle() *nvml.Device {
|
||||
return (*nvml.Device)(&d)
|
||||
}
|
||||
|
||||
// GetIndex returns the index of a Device
|
||||
func (d nvmlDevice) GetIndex() (int, Return) {
|
||||
i, r := nvml.Device(d).GetIndex()
|
||||
@@ -178,3 +183,33 @@ func (d nvmlDevice) GetSupportedEventTypes() (uint64, Return) {
|
||||
e, r := nvml.Device(d).GetSupportedEventTypes()
|
||||
return e, Return(r)
|
||||
}
|
||||
|
||||
// GetTopologyCommonAncestor retrieves the common ancestor for two devices.
|
||||
func (d nvmlDevice) GetTopologyCommonAncestor(o Device) (GpuTopologyLevel, Return) {
|
||||
other := o.nvmlDeviceHandle()
|
||||
if other == nil {
|
||||
return 0, ERROR_INVALID_ARGUMENT
|
||||
}
|
||||
|
||||
l, r := nvml.Device(d).GetTopologyCommonAncestor(*other)
|
||||
return GpuTopologyLevel(l), Return(r)
|
||||
}
|
||||
|
||||
// GetNvLinkState retrieves the state of the device's NvLink for the link specified.
|
||||
func (d nvmlDevice) GetNvLinkState(link int) (EnableState, Return) {
|
||||
s, r := nvml.Device(d).GetNvLinkState(link)
|
||||
return EnableState(s), Return(r)
|
||||
}
|
||||
|
||||
// GetNvLinkRemotePciInfo retrieves the PCI information for the remote node on a NvLink link.
|
||||
// Note: pciSubSystemId is not filled in this function and is indeterminate.
|
||||
func (d nvmlDevice) GetNvLinkRemotePciInfo(link int) (PciInfo, Return) {
|
||||
p, r := nvml.Device(d).GetNvLinkRemotePciInfo(link)
|
||||
return PciInfo(p), Return(r)
|
||||
}
|
||||
|
||||
// SetComputeMode sets the compute mode for the device.
|
||||
func (d nvmlDevice) SetComputeMode(mode ComputeMode) Return {
|
||||
r := nvml.Device(d).SetComputeMode(nvml.ComputeMode(mode))
|
||||
return Return(r)
|
||||
}
|
||||
|
||||
214
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/device_mock.go
generated
vendored
214
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/device_mock.go
generated
vendored
@@ -4,6 +4,7 @@
|
||||
package nvml
|
||||
|
||||
import (
|
||||
"github.com/NVIDIA/go-nvml/pkg/nvml"
|
||||
"sync"
|
||||
)
|
||||
|
||||
@@ -74,12 +75,21 @@ var _ Device = &DeviceMock{}
|
||||
// GetNameFunc: func() (string, Return) {
|
||||
// panic("mock out the GetName method")
|
||||
// },
|
||||
// GetNvLinkRemotePciInfoFunc: func(n int) (PciInfo, Return) {
|
||||
// panic("mock out the GetNvLinkRemotePciInfo method")
|
||||
// },
|
||||
// GetNvLinkStateFunc: func(n int) (EnableState, Return) {
|
||||
// panic("mock out the GetNvLinkState method")
|
||||
// },
|
||||
// GetPciInfoFunc: func() (PciInfo, Return) {
|
||||
// panic("mock out the GetPciInfo method")
|
||||
// },
|
||||
// GetSupportedEventTypesFunc: func() (uint64, Return) {
|
||||
// panic("mock out the GetSupportedEventTypes method")
|
||||
// },
|
||||
// GetTopologyCommonAncestorFunc: func(device Device) (GpuTopologyLevel, Return) {
|
||||
// panic("mock out the GetTopologyCommonAncestor method")
|
||||
// },
|
||||
// GetUUIDFunc: func() (string, Return) {
|
||||
// panic("mock out the GetUUID method")
|
||||
// },
|
||||
@@ -89,9 +99,15 @@ var _ Device = &DeviceMock{}
|
||||
// RegisterEventsFunc: func(v uint64, eventSet EventSet) Return {
|
||||
// panic("mock out the RegisterEvents method")
|
||||
// },
|
||||
// SetComputeModeFunc: func(computeMode ComputeMode) Return {
|
||||
// panic("mock out the SetComputeMode method")
|
||||
// },
|
||||
// SetMigModeFunc: func(Mode int) (Return, Return) {
|
||||
// panic("mock out the SetMigMode method")
|
||||
// },
|
||||
// nvmlDeviceHandleFunc: func() *nvml.Device {
|
||||
// panic("mock out the nvmlDeviceHandle method")
|
||||
// },
|
||||
// }
|
||||
//
|
||||
// // use mockedDevice in code that requires Device
|
||||
@@ -156,12 +172,21 @@ type DeviceMock struct {
|
||||
// GetNameFunc mocks the GetName method.
|
||||
GetNameFunc func() (string, Return)
|
||||
|
||||
// GetNvLinkRemotePciInfoFunc mocks the GetNvLinkRemotePciInfo method.
|
||||
GetNvLinkRemotePciInfoFunc func(n int) (PciInfo, Return)
|
||||
|
||||
// GetNvLinkStateFunc mocks the GetNvLinkState method.
|
||||
GetNvLinkStateFunc func(n int) (EnableState, Return)
|
||||
|
||||
// GetPciInfoFunc mocks the GetPciInfo method.
|
||||
GetPciInfoFunc func() (PciInfo, Return)
|
||||
|
||||
// GetSupportedEventTypesFunc mocks the GetSupportedEventTypes method.
|
||||
GetSupportedEventTypesFunc func() (uint64, Return)
|
||||
|
||||
// GetTopologyCommonAncestorFunc mocks the GetTopologyCommonAncestor method.
|
||||
GetTopologyCommonAncestorFunc func(device Device) (GpuTopologyLevel, Return)
|
||||
|
||||
// GetUUIDFunc mocks the GetUUID method.
|
||||
GetUUIDFunc func() (string, Return)
|
||||
|
||||
@@ -171,9 +196,15 @@ type DeviceMock struct {
|
||||
// RegisterEventsFunc mocks the RegisterEvents method.
|
||||
RegisterEventsFunc func(v uint64, eventSet EventSet) Return
|
||||
|
||||
// SetComputeModeFunc mocks the SetComputeMode method.
|
||||
SetComputeModeFunc func(computeMode ComputeMode) Return
|
||||
|
||||
// SetMigModeFunc mocks the SetMigMode method.
|
||||
SetMigModeFunc func(Mode int) (Return, Return)
|
||||
|
||||
// nvmlDeviceHandleFunc mocks the nvmlDeviceHandle method.
|
||||
nvmlDeviceHandleFunc func() *nvml.Device
|
||||
|
||||
// calls tracks calls to the methods.
|
||||
calls struct {
|
||||
// CreateGpuInstanceWithPlacement holds details about calls to the CreateGpuInstanceWithPlacement method.
|
||||
@@ -247,12 +278,27 @@ type DeviceMock struct {
|
||||
// GetName holds details about calls to the GetName method.
|
||||
GetName []struct {
|
||||
}
|
||||
// GetNvLinkRemotePciInfo holds details about calls to the GetNvLinkRemotePciInfo method.
|
||||
GetNvLinkRemotePciInfo []struct {
|
||||
// N is the n argument value.
|
||||
N int
|
||||
}
|
||||
// GetNvLinkState holds details about calls to the GetNvLinkState method.
|
||||
GetNvLinkState []struct {
|
||||
// N is the n argument value.
|
||||
N int
|
||||
}
|
||||
// GetPciInfo holds details about calls to the GetPciInfo method.
|
||||
GetPciInfo []struct {
|
||||
}
|
||||
// GetSupportedEventTypes holds details about calls to the GetSupportedEventTypes method.
|
||||
GetSupportedEventTypes []struct {
|
||||
}
|
||||
// GetTopologyCommonAncestor holds details about calls to the GetTopologyCommonAncestor method.
|
||||
GetTopologyCommonAncestor []struct {
|
||||
// Device is the device argument value.
|
||||
Device Device
|
||||
}
|
||||
// GetUUID holds details about calls to the GetUUID method.
|
||||
GetUUID []struct {
|
||||
}
|
||||
@@ -266,11 +312,19 @@ type DeviceMock struct {
|
||||
// EventSet is the eventSet argument value.
|
||||
EventSet EventSet
|
||||
}
|
||||
// SetComputeMode holds details about calls to the SetComputeMode method.
|
||||
SetComputeMode []struct {
|
||||
// ComputeMode is the computeMode argument value.
|
||||
ComputeMode ComputeMode
|
||||
}
|
||||
// SetMigMode holds details about calls to the SetMigMode method.
|
||||
SetMigMode []struct {
|
||||
// Mode is the Mode argument value.
|
||||
Mode int
|
||||
}
|
||||
// nvmlDeviceHandle holds details about calls to the nvmlDeviceHandle method.
|
||||
nvmlDeviceHandle []struct {
|
||||
}
|
||||
}
|
||||
lockCreateGpuInstanceWithPlacement sync.RWMutex
|
||||
lockGetArchitecture sync.RWMutex
|
||||
@@ -291,12 +345,17 @@ type DeviceMock struct {
|
||||
lockGetMigMode sync.RWMutex
|
||||
lockGetMinorNumber sync.RWMutex
|
||||
lockGetName sync.RWMutex
|
||||
lockGetNvLinkRemotePciInfo sync.RWMutex
|
||||
lockGetNvLinkState sync.RWMutex
|
||||
lockGetPciInfo sync.RWMutex
|
||||
lockGetSupportedEventTypes sync.RWMutex
|
||||
lockGetTopologyCommonAncestor sync.RWMutex
|
||||
lockGetUUID sync.RWMutex
|
||||
lockIsMigDeviceHandle sync.RWMutex
|
||||
lockRegisterEvents sync.RWMutex
|
||||
lockSetComputeMode sync.RWMutex
|
||||
lockSetMigMode sync.RWMutex
|
||||
locknvmlDeviceHandle sync.RWMutex
|
||||
}
|
||||
|
||||
// CreateGpuInstanceWithPlacement calls CreateGpuInstanceWithPlacementFunc.
|
||||
@@ -846,6 +905,70 @@ func (mock *DeviceMock) GetNameCalls() []struct {
|
||||
return calls
|
||||
}
|
||||
|
||||
// GetNvLinkRemotePciInfo calls GetNvLinkRemotePciInfoFunc.
|
||||
func (mock *DeviceMock) GetNvLinkRemotePciInfo(n int) (PciInfo, Return) {
|
||||
if mock.GetNvLinkRemotePciInfoFunc == nil {
|
||||
panic("DeviceMock.GetNvLinkRemotePciInfoFunc: method is nil but Device.GetNvLinkRemotePciInfo was just called")
|
||||
}
|
||||
callInfo := struct {
|
||||
N int
|
||||
}{
|
||||
N: n,
|
||||
}
|
||||
mock.lockGetNvLinkRemotePciInfo.Lock()
|
||||
mock.calls.GetNvLinkRemotePciInfo = append(mock.calls.GetNvLinkRemotePciInfo, callInfo)
|
||||
mock.lockGetNvLinkRemotePciInfo.Unlock()
|
||||
return mock.GetNvLinkRemotePciInfoFunc(n)
|
||||
}
|
||||
|
||||
// GetNvLinkRemotePciInfoCalls gets all the calls that were made to GetNvLinkRemotePciInfo.
|
||||
// Check the length with:
|
||||
//
|
||||
// len(mockedDevice.GetNvLinkRemotePciInfoCalls())
|
||||
func (mock *DeviceMock) GetNvLinkRemotePciInfoCalls() []struct {
|
||||
N int
|
||||
} {
|
||||
var calls []struct {
|
||||
N int
|
||||
}
|
||||
mock.lockGetNvLinkRemotePciInfo.RLock()
|
||||
calls = mock.calls.GetNvLinkRemotePciInfo
|
||||
mock.lockGetNvLinkRemotePciInfo.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
// GetNvLinkState calls GetNvLinkStateFunc.
|
||||
func (mock *DeviceMock) GetNvLinkState(n int) (EnableState, Return) {
|
||||
if mock.GetNvLinkStateFunc == nil {
|
||||
panic("DeviceMock.GetNvLinkStateFunc: method is nil but Device.GetNvLinkState was just called")
|
||||
}
|
||||
callInfo := struct {
|
||||
N int
|
||||
}{
|
||||
N: n,
|
||||
}
|
||||
mock.lockGetNvLinkState.Lock()
|
||||
mock.calls.GetNvLinkState = append(mock.calls.GetNvLinkState, callInfo)
|
||||
mock.lockGetNvLinkState.Unlock()
|
||||
return mock.GetNvLinkStateFunc(n)
|
||||
}
|
||||
|
||||
// GetNvLinkStateCalls gets all the calls that were made to GetNvLinkState.
|
||||
// Check the length with:
|
||||
//
|
||||
// len(mockedDevice.GetNvLinkStateCalls())
|
||||
func (mock *DeviceMock) GetNvLinkStateCalls() []struct {
|
||||
N int
|
||||
} {
|
||||
var calls []struct {
|
||||
N int
|
||||
}
|
||||
mock.lockGetNvLinkState.RLock()
|
||||
calls = mock.calls.GetNvLinkState
|
||||
mock.lockGetNvLinkState.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
// GetPciInfo calls GetPciInfoFunc.
|
||||
func (mock *DeviceMock) GetPciInfo() (PciInfo, Return) {
|
||||
if mock.GetPciInfoFunc == nil {
|
||||
@@ -900,6 +1023,38 @@ func (mock *DeviceMock) GetSupportedEventTypesCalls() []struct {
|
||||
return calls
|
||||
}
|
||||
|
||||
// GetTopologyCommonAncestor calls GetTopologyCommonAncestorFunc.
|
||||
func (mock *DeviceMock) GetTopologyCommonAncestor(device Device) (GpuTopologyLevel, Return) {
|
||||
if mock.GetTopologyCommonAncestorFunc == nil {
|
||||
panic("DeviceMock.GetTopologyCommonAncestorFunc: method is nil but Device.GetTopologyCommonAncestor was just called")
|
||||
}
|
||||
callInfo := struct {
|
||||
Device Device
|
||||
}{
|
||||
Device: device,
|
||||
}
|
||||
mock.lockGetTopologyCommonAncestor.Lock()
|
||||
mock.calls.GetTopologyCommonAncestor = append(mock.calls.GetTopologyCommonAncestor, callInfo)
|
||||
mock.lockGetTopologyCommonAncestor.Unlock()
|
||||
return mock.GetTopologyCommonAncestorFunc(device)
|
||||
}
|
||||
|
||||
// GetTopologyCommonAncestorCalls gets all the calls that were made to GetTopologyCommonAncestor.
|
||||
// Check the length with:
|
||||
//
|
||||
// len(mockedDevice.GetTopologyCommonAncestorCalls())
|
||||
func (mock *DeviceMock) GetTopologyCommonAncestorCalls() []struct {
|
||||
Device Device
|
||||
} {
|
||||
var calls []struct {
|
||||
Device Device
|
||||
}
|
||||
mock.lockGetTopologyCommonAncestor.RLock()
|
||||
calls = mock.calls.GetTopologyCommonAncestor
|
||||
mock.lockGetTopologyCommonAncestor.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
// GetUUID calls GetUUIDFunc.
|
||||
func (mock *DeviceMock) GetUUID() (string, Return) {
|
||||
if mock.GetUUIDFunc == nil {
|
||||
@@ -990,6 +1145,38 @@ func (mock *DeviceMock) RegisterEventsCalls() []struct {
|
||||
return calls
|
||||
}
|
||||
|
||||
// SetComputeMode calls SetComputeModeFunc.
|
||||
func (mock *DeviceMock) SetComputeMode(computeMode ComputeMode) Return {
|
||||
if mock.SetComputeModeFunc == nil {
|
||||
panic("DeviceMock.SetComputeModeFunc: method is nil but Device.SetComputeMode was just called")
|
||||
}
|
||||
callInfo := struct {
|
||||
ComputeMode ComputeMode
|
||||
}{
|
||||
ComputeMode: computeMode,
|
||||
}
|
||||
mock.lockSetComputeMode.Lock()
|
||||
mock.calls.SetComputeMode = append(mock.calls.SetComputeMode, callInfo)
|
||||
mock.lockSetComputeMode.Unlock()
|
||||
return mock.SetComputeModeFunc(computeMode)
|
||||
}
|
||||
|
||||
// SetComputeModeCalls gets all the calls that were made to SetComputeMode.
|
||||
// Check the length with:
|
||||
//
|
||||
// len(mockedDevice.SetComputeModeCalls())
|
||||
func (mock *DeviceMock) SetComputeModeCalls() []struct {
|
||||
ComputeMode ComputeMode
|
||||
} {
|
||||
var calls []struct {
|
||||
ComputeMode ComputeMode
|
||||
}
|
||||
mock.lockSetComputeMode.RLock()
|
||||
calls = mock.calls.SetComputeMode
|
||||
mock.lockSetComputeMode.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
// SetMigMode calls SetMigModeFunc.
|
||||
func (mock *DeviceMock) SetMigMode(Mode int) (Return, Return) {
|
||||
if mock.SetMigModeFunc == nil {
|
||||
@@ -1021,3 +1208,30 @@ func (mock *DeviceMock) SetMigModeCalls() []struct {
|
||||
mock.lockSetMigMode.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
// nvmlDeviceHandle calls nvmlDeviceHandleFunc.
|
||||
func (mock *DeviceMock) nvmlDeviceHandle() *nvml.Device {
|
||||
if mock.nvmlDeviceHandleFunc == nil {
|
||||
panic("DeviceMock.nvmlDeviceHandleFunc: method is nil but Device.nvmlDeviceHandle was just called")
|
||||
}
|
||||
callInfo := struct {
|
||||
}{}
|
||||
mock.locknvmlDeviceHandle.Lock()
|
||||
mock.calls.nvmlDeviceHandle = append(mock.calls.nvmlDeviceHandle, callInfo)
|
||||
mock.locknvmlDeviceHandle.Unlock()
|
||||
return mock.nvmlDeviceHandleFunc()
|
||||
}
|
||||
|
||||
// nvmlDeviceHandleCalls gets all the calls that were made to nvmlDeviceHandle.
|
||||
// Check the length with:
|
||||
//
|
||||
// len(mockedDevice.nvmlDeviceHandleCalls())
|
||||
func (mock *DeviceMock) nvmlDeviceHandleCalls() []struct {
|
||||
} {
|
||||
var calls []struct {
|
||||
}
|
||||
mock.locknvmlDeviceHandle.RLock()
|
||||
calls = mock.calls.nvmlDeviceHandle
|
||||
mock.locknvmlDeviceHandle.RUnlock()
|
||||
return calls
|
||||
}
|
||||
|
||||
15
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/types.go
generated
vendored
15
vendor/github.com/NVIDIA/go-nvlib/pkg/nvml/types.go
generated
vendored
@@ -59,12 +59,18 @@ type Device interface {
|
||||
GetMigMode() (int, int, Return)
|
||||
GetMinorNumber() (int, Return)
|
||||
GetName() (string, Return)
|
||||
GetNvLinkRemotePciInfo(int) (PciInfo, Return)
|
||||
GetNvLinkState(int) (EnableState, Return)
|
||||
GetPciInfo() (PciInfo, Return)
|
||||
GetSupportedEventTypes() (uint64, Return)
|
||||
GetTopologyCommonAncestor(Device) (GpuTopologyLevel, Return)
|
||||
GetUUID() (string, Return)
|
||||
IsMigDeviceHandle() (bool, Return)
|
||||
RegisterEvents(uint64, EventSet) Return
|
||||
SetComputeMode(ComputeMode) Return
|
||||
SetMigMode(Mode int) (Return, Return)
|
||||
// nvmlDeviceHandle returns a pointer to the underlying NVML device.
|
||||
nvmlDeviceHandle() *nvml.Device
|
||||
}
|
||||
|
||||
// GpuInstance defines the functions implemented by a GpuInstance
|
||||
@@ -145,3 +151,12 @@ type DeviceArchitecture nvml.DeviceArchitecture
|
||||
|
||||
// BrandType represents the brand of a GPU device
|
||||
type BrandType nvml.BrandType
|
||||
|
||||
// GpuTopologyLevel represents level relationships within a system between two GPUs
|
||||
type GpuTopologyLevel nvml.GpuTopologyLevel
|
||||
|
||||
// EnableState represents a generic enable/disable enum
|
||||
type EnableState nvml.EnableState
|
||||
|
||||
// ComputeMode represents the compute mode for a device
|
||||
type ComputeMode nvml.ComputeMode
|
||||
|
||||
24
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/lib.go
generated
vendored
24
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/lib.go
generated
vendored
@@ -38,9 +38,10 @@ var errLibraryAlreadyLoaded = errors.New("library already loaded")
|
||||
// This includes a reference to the underlying DynamicLibrary
|
||||
type library struct {
|
||||
sync.Mutex
|
||||
path string
|
||||
flags int
|
||||
dl dynamicLibrary
|
||||
path string
|
||||
flags int
|
||||
refcount refcount
|
||||
dl dynamicLibrary
|
||||
}
|
||||
|
||||
// libnvml is a global instance of the nvml library.
|
||||
@@ -77,16 +78,17 @@ var newDynamicLibrary = func(path string, flags int) dynamicLibrary {
|
||||
|
||||
// load initializes the library and updates the versioned symbols.
|
||||
// Multiple calls to an already loaded library will return without error.
|
||||
func (l *library) load() error {
|
||||
func (l *library) load() (rerr error) {
|
||||
l.Lock()
|
||||
defer l.Unlock()
|
||||
if l.dl != nil {
|
||||
|
||||
defer func() { l.refcount.IncOnNoError(rerr) }()
|
||||
if l.refcount > 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
dl := newDynamicLibrary(l.path, l.flags)
|
||||
err := dl.Open()
|
||||
if err != nil {
|
||||
if err := dl.Open(); err != nil {
|
||||
return fmt.Errorf("error opening %s: %w", l.path, err)
|
||||
}
|
||||
|
||||
@@ -99,16 +101,16 @@ func (l *library) load() error {
|
||||
// close the underlying library and ensure that the global pointer to the
|
||||
// library is set to nil to ensure that subsequent calls to open will reinitialize it.
|
||||
// Multiple calls to an already closed nvml library will return without error.
|
||||
func (l *library) close() error {
|
||||
func (l *library) close() (rerr error) {
|
||||
l.Lock()
|
||||
defer l.Unlock()
|
||||
|
||||
if l.dl == nil {
|
||||
defer func() { l.refcount.DecOnNoError(rerr) }()
|
||||
if l.refcount != 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
err := l.dl.Close()
|
||||
if err != nil {
|
||||
if err := l.dl.Close(); err != nil {
|
||||
return fmt.Errorf("error closing %s: %w", l.path, err)
|
||||
}
|
||||
|
||||
|
||||
31
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/refcount.go
generated
vendored
Normal file
31
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/refcount.go
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
# Copyright 2024 NVIDIA CORPORATION
|
||||
#
|
||||
# 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 nvml
|
||||
|
||||
type refcount int
|
||||
|
||||
func (r *refcount) IncOnNoError(err error) {
|
||||
if err == nil {
|
||||
(*r)++
|
||||
}
|
||||
}
|
||||
|
||||
func (r *refcount) DecOnNoError(err error) {
|
||||
if err == nil && (*r) > 0 {
|
||||
(*r)--
|
||||
}
|
||||
}
|
||||
77
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/return.go
generated
vendored
77
vendor/github.com/NVIDIA/go-nvml/pkg/nvml/return.go
generated
vendored
@@ -14,7 +14,80 @@
|
||||
|
||||
package nvml
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// nvml.ErrorString()
|
||||
func ErrorString(Result Return) string {
|
||||
return nvmlErrorString(Result)
|
||||
func ErrorString(r Return) string {
|
||||
if err := GetLibrary().Lookup("nvmlErrorString"); err != nil {
|
||||
return fallbackErrorStringFunc(r)
|
||||
}
|
||||
return nvmlErrorString(r)
|
||||
}
|
||||
|
||||
// fallbackErrorStringFunc provides a basic nvmlErrorString implementation.
|
||||
// This allows the nvml.ErrorString function to be used even if the NVML library
|
||||
// is not loaded.
|
||||
var fallbackErrorStringFunc = func(r Return) string {
|
||||
switch r {
|
||||
case SUCCESS:
|
||||
return "SUCCESS"
|
||||
case ERROR_UNINITIALIZED:
|
||||
return "ERROR_UNINITIALIZED"
|
||||
case ERROR_INVALID_ARGUMENT:
|
||||
return "ERROR_INVALID_ARGUMENT"
|
||||
case ERROR_NOT_SUPPORTED:
|
||||
return "ERROR_NOT_SUPPORTED"
|
||||
case ERROR_NO_PERMISSION:
|
||||
return "ERROR_NO_PERMISSION"
|
||||
case ERROR_ALREADY_INITIALIZED:
|
||||
return "ERROR_ALREADY_INITIALIZED"
|
||||
case ERROR_NOT_FOUND:
|
||||
return "ERROR_NOT_FOUND"
|
||||
case ERROR_INSUFFICIENT_SIZE:
|
||||
return "ERROR_INSUFFICIENT_SIZE"
|
||||
case ERROR_INSUFFICIENT_POWER:
|
||||
return "ERROR_INSUFFICIENT_POWER"
|
||||
case ERROR_DRIVER_NOT_LOADED:
|
||||
return "ERROR_DRIVER_NOT_LOADED"
|
||||
case ERROR_TIMEOUT:
|
||||
return "ERROR_TIMEOUT"
|
||||
case ERROR_IRQ_ISSUE:
|
||||
return "ERROR_IRQ_ISSUE"
|
||||
case ERROR_LIBRARY_NOT_FOUND:
|
||||
return "ERROR_LIBRARY_NOT_FOUND"
|
||||
case ERROR_FUNCTION_NOT_FOUND:
|
||||
return "ERROR_FUNCTION_NOT_FOUND"
|
||||
case ERROR_CORRUPTED_INFOROM:
|
||||
return "ERROR_CORRUPTED_INFOROM"
|
||||
case ERROR_GPU_IS_LOST:
|
||||
return "ERROR_GPU_IS_LOST"
|
||||
case ERROR_RESET_REQUIRED:
|
||||
return "ERROR_RESET_REQUIRED"
|
||||
case ERROR_OPERATING_SYSTEM:
|
||||
return "ERROR_OPERATING_SYSTEM"
|
||||
case ERROR_LIB_RM_VERSION_MISMATCH:
|
||||
return "ERROR_LIB_RM_VERSION_MISMATCH"
|
||||
case ERROR_IN_USE:
|
||||
return "ERROR_IN_USE"
|
||||
case ERROR_MEMORY:
|
||||
return "ERROR_MEMORY"
|
||||
case ERROR_NO_DATA:
|
||||
return "ERROR_NO_DATA"
|
||||
case ERROR_VGPU_ECC_NOT_SUPPORTED:
|
||||
return "ERROR_VGPU_ECC_NOT_SUPPORTED"
|
||||
case ERROR_INSUFFICIENT_RESOURCES:
|
||||
return "ERROR_INSUFFICIENT_RESOURCES"
|
||||
case ERROR_FREQ_NOT_SUPPORTED:
|
||||
return "ERROR_FREQ_NOT_SUPPORTED"
|
||||
case ERROR_ARGUMENT_VERSION_MISMATCH:
|
||||
return "ERROR_ARGUMENT_VERSION_MISMATCH"
|
||||
case ERROR_DEPRECATED:
|
||||
return "ERROR_DEPRECATED"
|
||||
case ERROR_UNKNOWN:
|
||||
return "ERROR_UNKNOWN"
|
||||
default:
|
||||
return fmt.Sprintf("unknown return value: %d", r)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user