Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nvidia-settings for openSUSE:Factory checked in at 2025-02-09 19:59:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nvidia-settings (Old) and /work/SRC/openSUSE:Factory/.nvidia-settings.new.2316 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nvidia-settings" Sun Feb 9 19:59:22 2025 rev:7 rq:1243982 version:570.86.16 Changes: -------- --- /work/SRC/openSUSE:Factory/nvidia-settings/nvidia-settings.changes 2024-12-08 11:38:01.683859032 +0100 +++ /work/SRC/openSUSE:Factory/.nvidia-settings.new.2316/nvidia-settings.changes 2025-02-09 19:59:42.314135140 +0100 @@ -1,0 +2,6 @@ +Tue Jan 28 03:39:35 UTC 2025 - Stefan Dirsch <sndir...@suse.com> + +- update to release 570.86.16 + --> https://github.com/NVIDIA/nvidia-settings/commit/e55a7ed + +------------------------------------------------------------------- Old: ---- nvidia-settings-565.77.tar.bz2 New: ---- nvidia-settings-570.86.16.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nvidia-settings.spec ++++++ --- /var/tmp/diff_new_pack.4ZyOi9/_old 2025-02-09 19:59:42.842156849 +0100 +++ /var/tmp/diff_new_pack.4ZyOi9/_new 2025-02-09 19:59:42.842156849 +0100 @@ -1,7 +1,7 @@ # # spec file for package nvidia-settings # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: nvidia-settings -Version: 565.77 +Version: 570.86.16 Release: 0 Summary: Configure the NVIDIA graphics driver License: GPL-2.0-only ++++++ nvidia-settings-565.77.tar.bz2 -> nvidia-settings-570.86.16.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/doc/version.mk new/nvidia-settings-570.86.16/doc/version.mk --- old/nvidia-settings-565.77/doc/version.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/doc/version.mk 2025-01-24 23:03:57.000000000 +0100 @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 565.77 +NVIDIA_VERSION = 570.86.16 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/samples/version.mk new/nvidia-settings-570.86.16/samples/version.mk --- old/nvidia-settings-565.77/samples/version.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/samples/version.mk 2025-01-24 23:03:57.000000000 +0100 @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 565.77 +NVIDIA_VERSION = 570.86.16 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrl/utils.mk new/nvidia-settings-570.86.16/src/libXNVCtrl/utils.mk --- old/nvidia-settings-565.77/src/libXNVCtrl/utils.mk 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrl/utils.mk 2025-01-24 23:03:57.000000000 +0100 @@ -541,6 +541,8 @@ ifeq ($(DEBUG),1) NVIDSTRING_BUILD_TYPE_STRING = Debug Build +else ifeq ($(DEVELOP),1) + NVIDSTRING_BUILD_TYPE_STRING = Develop Build else NVIDSTRING_BUILD_TYPE_STRING = Release Build endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrl/version.mk new/nvidia-settings-570.86.16/src/libXNVCtrl/version.mk --- old/nvidia-settings-565.77/src/libXNVCtrl/version.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrl/version.mk 2025-01-24 23:03:57.000000000 +0100 @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 565.77 +NVIDIA_VERSION = 570.86.16 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributes.c new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributes.c --- old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributes.c 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributes.c 2025-01-24 23:03:57.000000000 +0100 @@ -1341,6 +1341,8 @@ return "Attribute not available"; break; case NvCtrlNotSupported: return "Operation not supported"; break; + case NvCtrlNoPermission: + return "Operation not permitted for the current user"; break; case NvCtrlError: /* fall through to default */ default: return "Unknown Error"; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributes.h new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributes.h --- old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributes.h 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributes.h 2025-01-24 23:03:57.000000000 +0100 @@ -319,6 +319,7 @@ NvCtrlWriteOnlyAttribute, NvCtrlAttributeNotAvailable, NvCtrlNotSupported, + NvCtrlNoPermission, NvCtrlError } ReturnStatus; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributesNvml.c new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributesNvml.c --- old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributesNvml.c 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributesNvml.c 2025-01-24 23:03:57.000000000 +0100 @@ -269,6 +269,13 @@ GET_SYMBOL(_OPTIONAL, DeviceGetThermalSettings); GET_SYMBOL(_OPTIONAL, DeviceGetFanSpeedRPM); GET_SYMBOL(_OPTIONAL, DeviceGetCoolerInfo); + GET_SYMBOL(_OPTIONAL, DeviceGetClockOffsets); + GET_SYMBOL(_OPTIONAL, DeviceSetClockOffsets); + GET_SYMBOL(_OPTIONAL, DeviceGetPerformanceModes); + GET_SYMBOL(_OPTIONAL, DeviceGetCurrentClockFreqs); + GET_SYMBOL(_OPTIONAL, DeviceGetPerformanceState); + GET_SYMBOL(_OPTIONAL, DeviceGetSupportedPerformanceStates); + GET_SYMBOL(_OPTIONAL, DeviceGetArchitecture); #undef GET_SYMBOL #undef EXPAND_STRING #undef STRINGIFY_SYMBOL @@ -596,7 +603,7 @@ static ReturnStatus NvCtrlNvmlGetGPUStringAttribute(const CtrlTarget *ctrl_target, int attr, char **ptr) { - char res[MAX_NVML_STR_LEN]; + char res[NVML_PERF_MODES_BUFFER_SIZE]; const NvCtrlAttributePrivateHandle *h = getPrivateHandleConst(ctrl_target); const NvCtrlNvmlAttributes *nvml; nvmlDevice_t device; @@ -647,9 +654,31 @@ break; } - case NV_CTRL_STRING_SLI_MODE: case NV_CTRL_STRING_PERFORMANCE_MODES: + { + nvmlDevicePerfModes_t perfModes; + + perfModes.version = nvmlDevicePerfModes_v1; + ret = nvml->lib.DeviceGetPerformanceModes(device, &perfModes); + if (ret == NVML_SUCCESS) { + strcpy(res, perfModes.str); + } + break; + } + case NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS: + { + nvmlDeviceCurrentClockFreqs_t currentClockFreqs; + + currentClockFreqs.version = nvmlDeviceCurrentClockFreqs_v1; + ret = nvml->lib.DeviceGetCurrentClockFreqs(device, ¤tClockFreqs); + if (ret == NVML_SUCCESS) { + strcpy(res, currentClockFreqs.str); + } + break; + } + + case NV_CTRL_STRING_SLI_MODE: case NV_CTRL_STRING_MULTIGPU_MODE: /* * XXX We'll eventually need to add support for this attributes @@ -809,7 +838,74 @@ } } +static nvmlReturn_t nvmlClockOffsetHelper(nvmlDevice_t device, + const NvCtrlNvmlAttributes *nvml, + int attr, int64_t *val, + CtrlAttributeValidValues *valid_values, + int *setVal) +{ + nvmlReturn_t ret; + + switch (attr) { + case NV_CTRL_GPU_NVCLOCK_OFFSET: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + { + nvmlDeviceArchitecture_t arch; + + /* attributes are supported on Maxwell GPUs only */ + ret = nvml->lib.DeviceGetArchitecture(device, &arch); + if ((ret != NVML_SUCCESS) || (arch != NVML_DEVICE_ARCH_MAXWELL)) { + return NVML_ERROR_NOT_SUPPORTED; + } + /* fallthrough to case + * NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS */ + __attribute__((fallthrough)); + } + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + { + nvmlClockOffset_t info; + + switch (attr) { + case NV_CTRL_GPU_NVCLOCK_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + info.type = NVML_CLOCK_GRAPHICS; + break; + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + info.type = NVML_CLOCK_MEM; + break; + } + info.version = nvmlClockOffset_v1; + info.pstate = NVML_PSTATE_0; + if (val || valid_values) { + /* get current clock offset and valid values */ + ret = nvml->lib.DeviceGetClockOffsets(device, &info); + + if (ret != NVML_SUCCESS) { + return ret; + } + if (val) { + *val = info.clockOffsetMHz; + } + if (valid_values) { + valid_values->valid_type = CTRL_ATTRIBUTE_VALID_TYPE_RANGE; + valid_values->range.min = info.minClockOffsetMHz; + valid_values->range.max = info.maxClockOffsetMHz; + } + return NVML_SUCCESS; + } + if (setVal) { + /* set new clock offset value */ + info.clockOffsetMHz = *setVal; + ret = nvml->lib.DeviceSetClockOffsets(device, &info); + return ret; + } + } + } + return NVML_SUCCESS; +} /* * Get NVML Attribute Values @@ -1069,11 +1165,45 @@ } break; + case NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL: + { + nvmlPstates_t pState; + nvmlPstates_t pStates[NVML_MAX_GPU_PERF_PSTATES]; + nvmlReturn_t ret1; + int i = 0; + + ret = nvml->lib.DeviceGetPerformanceState(device, &pState); + ret1 = nvml->lib.DeviceGetSupportedPerformanceStates(device, pStates, NVML_MAX_GPU_PERF_PSTATES); + if ((ret != NVML_SUCCESS) || (ret1 != NVML_SUCCESS)) { + return NvCtrlNotSupported; + } + + for (i = 0; i < NVML_MAX_GPU_PERF_PSTATES; i++) { + if (pStates[i] == NVML_PSTATE_UNKNOWN) { + continue; + } + if (pStates[i] == pState) { + res = i; + break; + } + } + } + break; + + case NV_CTRL_GPU_NVCLOCK_OFFSET: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + ret = nvmlClockOffsetHelper(device, nvml, attr, val, NULL, NULL); + if (ret == NVML_SUCCESS) { + return NvCtrlSuccess; + } + break; + case NV_CTRL_VIDEO_RAM: case NV_CTRL_GPU_PCIE_MAX_LINK_SPEED: case NV_CTRL_GPU_PCIE_CURRENT_LINK_SPEED: case NV_CTRL_BUS_TYPE: - case NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL: case NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE: case NV_CTRL_GPU_POWER_MIZER_MODE: case NV_CTRL_GPU_POWER_MIZER_DEFAULT_MODE: @@ -1678,6 +1808,13 @@ } break; + case NV_CTRL_GPU_NVCLOCK_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + ret = nvmlClockOffsetHelper(device, nvml, attr, NULL, NULL, &val); + break; + case NV_CTRL_GPU_CURRENT_CLOCK_FREQS: case NV_CTRL_GPU_POWER_MIZER_MODE: case NV_CTRL_DITHERING: @@ -1708,6 +1845,9 @@ /* An NVML error occurred */ printNvmlError(ret); + if (ret == NVML_ERROR_NO_PERMISSION) { + return NvCtrlNoPermission; + } return NvCtrlNotSupported; } @@ -1758,6 +1898,9 @@ /* An NVML error occurred */ printNvmlError(ret); + if (ret == NVML_ERROR_NO_PERMISSION) { + return NvCtrlNoPermission; + } return NvCtrlNotSupported; } @@ -2040,13 +2183,13 @@ case NV_CTRL_STRING_PRODUCT_NAME: case NV_CTRL_STRING_VBIOS_VERSION: case NV_CTRL_STRING_GPU_UUID: + case NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS: + case NV_CTRL_STRING_PERFORMANCE_MODES: val->valid_type = CTRL_ATTRIBUTE_VALID_TYPE_STRING; return NvCtrlSuccess; case NV_CTRL_STRING_SLI_MODE: - case NV_CTRL_STRING_PERFORMANCE_MODES: case NV_CTRL_STRING_MULTIGPU_MODE: - case NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS: case NV_CTRL_STRING_GPU_UTILIZATION: /* * XXX We'll eventually need to add support for this attributes. For @@ -2190,9 +2333,17 @@ case NV_CTRL_ATTR_NVML_GPU_GET_POWER_USAGE: case NV_CTRL_ATTR_NVML_GPU_MAX_TGP: case NV_CTRL_ATTR_NVML_GPU_DEFAULT_TGP: + case NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL: val->valid_type = CTRL_ATTRIBUTE_VALID_TYPE_INTEGER; break; + case NV_CTRL_GPU_NVCLOCK_OFFSET: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + ret = nvmlClockOffsetHelper(device, nvml, attr, NULL, val, NULL); + break; + case NV_CTRL_GPU_ECC_SUPPORTED: case NV_CTRL_GPU_ECC_STATUS: case NV_CTRL_GPU_ECC_CONFIGURATION: @@ -2220,7 +2371,6 @@ case NV_CTRL_GPU_PCIE_MAX_LINK_SPEED: case NV_CTRL_GPU_PCIE_CURRENT_LINK_SPEED: case NV_CTRL_BUS_TYPE: - case NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL: case NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE: case NV_CTRL_GPU_POWER_MIZER_MODE: case NV_CTRL_GPU_POWER_MIZER_DEFAULT_MODE: @@ -2466,6 +2616,10 @@ { /* Set write permissions */ switch (attr) { + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET: case NV_CTRL_GPU_COOLER_MANUAL_CONTROL: case NV_CTRL_THERMAL_COOLER_LEVEL: case NV_CTRL_GPU_ECC_CONFIGURATION: @@ -2509,7 +2663,14 @@ case NV_CTRL_GPU_ECC_AGGREGATE_SINGLE_BIT_ERRORS: case NV_CTRL_GPU_ECC_DOUBLE_BIT_ERRORS: case NV_CTRL_GPU_ECC_AGGREGATE_DOUBLE_BIT_ERRORS: + case NV_CTRL_GPU_NVCLOCK_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET_ALL_PERFORMANCE_LEVELS: + case NV_CTRL_GPU_MEM_TRANSFER_RATE_OFFSET: + case NV_CTRL_GPU_NVCLOCK_OFFSET: /* CTRL_ATTRIBUTE_VALID_TYPE_INT_BITS */ + perms->read = NV_TRUE; + perms->valid_targets = CTRL_TARGET_PERM_BIT(GPU_TARGET); + break; /* GPU_TARGET non-readable attribute */ case NV_CTRL_GPU_ECC_RESET_ERROR_STATUS: perms->read = NV_FALSE; @@ -2551,6 +2712,8 @@ case NV_CTRL_STRING_PRODUCT_NAME: case NV_CTRL_STRING_VBIOS_VERSION: case NV_CTRL_STRING_GPU_UUID: + case NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS: + case NV_CTRL_STRING_PERFORMANCE_MODES: perms->valid_targets = CTRL_TARGET_PERM_BIT(GPU_TARGET); perms->read = NV_TRUE; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributesPrivate.h new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributesPrivate.h --- old/nvidia-settings-565.77/src/libXNVCtrlAttributes/NvCtrlAttributesPrivate.h 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/libXNVCtrlAttributes/NvCtrlAttributesPrivate.h 2025-01-24 23:03:57.000000000 +0100 @@ -210,6 +210,13 @@ typeof(nvmlDeviceGetThermalSettings) (*DeviceGetThermalSettings); typeof(nvmlDeviceGetFanSpeedRPM) (*DeviceGetFanSpeedRPM); typeof(nvmlDeviceGetCoolerInfo) (*DeviceGetCoolerInfo); + typeof(nvmlDeviceGetSupportedPerformanceStates) (*DeviceGetSupportedPerformanceStates); + typeof(nvmlDeviceGetClockOffsets) (*DeviceGetClockOffsets); + typeof(nvmlDeviceSetClockOffsets) (*DeviceSetClockOffsets); + typeof(nvmlDeviceGetPerformanceModes) (*DeviceGetPerformanceModes); + typeof(nvmlDeviceGetCurrentClockFreqs) (*DeviceGetCurrentClockFreqs); + typeof(nvmlDeviceGetPerformanceState) (*DeviceGetPerformanceState); + typeof(nvmlDeviceGetArchitecture) (*DeviceGetArchitecture); } lib; unsigned int deviceIdx; /* XXX Needed while using NV-CONTROL as fallback */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/nvml.h new/nvidia-settings-570.86.16/src/nvml.h --- old/nvidia-settings-565.77/src/nvml.h 2024-11-28 01:00:41.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/nvml.h 2025-01-24 23:03:57.000000000 +0100 @@ -764,6 +764,18 @@ #define nvmlFlagForce 0x01 /** + * DRAM Encryption Info + */ +typedef struct +{ + unsigned int version; //!< IN - the API version number + nvmlEnableState_t encryptionState; //!< IN/OUT - DRAM Encryption state +} nvmlDramEncryptionInfo_v1_t; +typedef nvmlDramEncryptionInfo_v1_t nvmlDramEncryptionInfo_t; + +#define nvmlDramEncryptionInfo_v1 NVML_STRUCT_VERSION(DramEncryptionInfo, 1) + +/** * * The Brand of the GPU * */ typedef enum nvmlBrandType_enum @@ -828,6 +840,19 @@ } nvmlTemperatureSensors_t; /** + * Margin temperature values + */ +typedef struct +{ + unsigned int version; //!< The version number of this struct + int marginTemperature; //!< The margin temperature value +} nvmlMarginTemperature_v1_t; + +typedef nvmlMarginTemperature_v1_t nvmlMarginTemperature_t; + +#define nvmlMarginTemperature_v1 NVML_STRUCT_VERSION(MarginTemperature, 1) + +/** * Compute mode. * * NVML_COMPUTEMODE_EXCLUSIVE_PROCESS was added in CUDA 4.0. @@ -1115,7 +1140,7 @@ NVML_INFOROM_OEM = 0, //!< An object defined by OEM NVML_INFOROM_ECC = 1, //!< The ECC object determining the level of ECC support NVML_INFOROM_POWER = 2, //!< The power management object - + NVML_INFOROM_DEN = 3, //!< DRAM Encryption object // Keep this last NVML_INFOROM_COUNT //!< This counts the number of infoROM objects the driver knows about } nvmlInforomObject_t; @@ -1516,15 +1541,16 @@ */ typedef enum nvmlDeviceVgpuCapability_enum { - NVML_DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU = 0, //!< Query if the fractional vGPU profiles on this GPU can be used in multi-vGPU configurations - NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES = 1, //!< Query if the GPU support concurrent execution of timesliced vGPU profiles of differing types - NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES = 2, //!< Query if the GPU support concurrent execution of timesliced vGPU profiles of differing framebuffer sizes + NVML_DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU = 0, //!< Query whether the fractional vGPU profiles on this GPU can be used in multi-vGPU configurations + NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES = 1, //!< Query whether the GPU support concurrent execution of timesliced vGPU profiles of differing types + NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES = 2, //!< Query whether the GPU support concurrent execution of timesliced vGPU profiles of differing framebuffer sizes NVML_DEVICE_VGPU_CAP_READ_DEVICE_BUFFER_BW = 3, //!< Query the GPU's read_device_buffer expected bandwidth capacity in megabytes per second NVML_DEVICE_VGPU_CAP_WRITE_DEVICE_BUFFER_BW = 4, //!< Query the GPU's write_device_buffer expected bandwidth capacity in megabytes per second - NVML_DEVICE_VGPU_CAP_DEVICE_STREAMING = 5, //!< Query if vGPU profiles on the GPU supports migration data streaming + NVML_DEVICE_VGPU_CAP_DEVICE_STREAMING = 5, //!< Query whether the vGPU profiles on the GPU supports migration data streaming NVML_DEVICE_VGPU_CAP_MINI_QUARTER_GPU = 6, //!< Set/Get support for mini-quarter vGPU profiles NVML_DEVICE_VGPU_CAP_COMPUTE_MEDIA_ENGINE_GPU = 7, //!< Set/Get support for compute media engine vGPU profiles - NVML_DEVICE_VGPU_CAP_WARM_UPDATE = 8, //!< Query if the GPU supports FSR and warm update + NVML_DEVICE_VGPU_CAP_WARM_UPDATE = 8, //!< Query whether the GPU supports FSR and warm update + NVML_DEVICE_VGPU_CAP_HOMOGENEOUS_PLACEMENTS = 9, //!< Query whether the GPU supports reporting of placements of timesliced vGPU profiles with identical framebuffer sizes // Keep this last NVML_DEVICE_VGPU_CAP_COUNT } nvmlDeviceVgpuCapability_t; @@ -1567,6 +1593,12 @@ #define NVML_VGPU_PGPU_VIRTUALIZATION_CAP_MIGRATION_NO 0x0 #define NVML_VGPU_PGPU_VIRTUALIZATION_CAP_MIGRATION_YES 0x1 +/** + * Macros to indicate the vGPU mode of the GPU. + */ +#define NVML_VGPU_PGPU_HETEROGENEOUS_MODE 0 +#define NVML_VGPU_PGPU_HOMOGENEOUS_MODE 1 + /** @} */ /***************************************************************************************************/ @@ -1611,10 +1643,23 @@ unsigned int count; //!< Count of placement IDs fetched unsigned int *placementIds; //!< Placement IDs for the vGPU type } nvmlVgpuPlacementList_v1_t; -typedef nvmlVgpuPlacementList_v1_t nvmlVgpuPlacementList_t; #define nvmlVgpuPlacementList_v1 NVML_STRUCT_VERSION(VgpuPlacementList, 1) /** + * Structure to store the list of vGPU placements -- version 2 + */ +typedef struct +{ + unsigned int version; //!< IN: The version number of this struct + unsigned int placementSize; //!< OUT: The number of slots occupied by the vGPU type + unsigned int count; //!< IN/OUT: Count of the placement IDs + unsigned int *placementIds; //!< IN/OUT: Placement IDs for the vGPU type + unsigned int mode; //!< IN: The vGPU mode. Either NVML_VGPU_PGPU_HETEROGENEOUS_MODE or NVML_VGPU_PGPU_HOMOGENEOUS_MODE +} nvmlVgpuPlacementList_v2_t; +typedef nvmlVgpuPlacementList_v2_t nvmlVgpuPlacementList_t; +#define nvmlVgpuPlacementList_v2 NVML_STRUCT_VERSION(VgpuPlacementList, 2) + +/** * Structure to store BAR1 size information of vGPU type -- Version 1 */ typedef struct @@ -1912,6 +1957,7 @@ NVML_GPU_RECOVERY_ACTION_GPU_RESET = 1, NVML_GPU_RECOVERY_ACTION_NODE_REBOOT = 2, NVML_GPU_RECOVERY_ACTION_DRAIN_P2P = 3, + NVML_GPU_RECOVERY_ACTION_DRAIN_AND_RESET = 4, } nvmlDeviceGpuRecoveryAction_t; /** @} */ @@ -2236,9 +2282,9 @@ #define NVML_FI_DEV_PCIE_COUNT_TX_BYTES 197 //!< PCIe transmit bytes. Value can be wrapped. #define NVML_FI_DEV_PCIE_COUNT_RX_BYTES 198 //!< PCIe receive bytes. Value can be wrapped. -#define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX 199 //!< Max Nvlink Power Threshold. See NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD +#define NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE 199 //!< MIG mode independent, MIG query capable device. 1=yes. 0=no. -#define NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE 200 //!< MIG mode independent, MIG query capable device. 1=yes. 0=no. +#define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX 200 //!< Max Nvlink Power Threshold. See NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD #define NVML_FI_DEV_NVLINK_COUNT_XMIT_PACKETS 201 //!<Total Tx packets on the link in NVLink5 #define NVML_FI_DEV_NVLINK_COUNT_XMIT_BYTES 202 //!<Total Tx bytes on the link in NVLink5 @@ -2260,8 +2306,8 @@ #define NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 216 //!<Deprecated, do not use #define NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 217 //!<Deprecated, do not use #define NVML_FI_DEV_NVLINK_COUNT_RAW_BER 218 //!<Deprecated, do not use -#define NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS 219 //!<Deprecated, do not use -#define NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER 220 //!<Deprecated, do not use +#define NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS 219 //!<Sum of the number of errors in each Nvlink packet +#define NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER 220 //!<Effective BER for effective errors #define NVML_FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS 221 //!<Number of errors in rx symbols #define NVML_FI_DEV_NVLINK_COUNT_SYMBOL_BER 222 //!<BER for symbol errors @@ -2269,12 +2315,48 @@ #define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS 224 //!< Values are in the form NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_* #define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED 225 //!< Determine if Nvlink Power Threshold feature is supported -#define NVML_FI_DEV_RESET_STATUS 226 //!< GPU reset status -#define NVML_FI_DEV_DRAIN_AND_RESET_STATUS 227 //!< GPU drain and reset status +#define NVML_FI_DEV_RESET_STATUS 226 //!< Depracated, do not use (use NVML_FI_DEV_GET_GPU_RECOVERY_ACTION instead) +#define NVML_FI_DEV_DRAIN_AND_RESET_STATUS 227 //!< Deprecated, do not use (use NVML_FI_DEV_GET_GPU_RECOVERY_ACTION instead) #define NVML_FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK 228 #define NVML_FI_DEV_PCIE_INBOUND_ATOMICS_MASK 229 -#define NVML_FI_DEV_GET_GPU_RECOVERY_ACTION 230 //!< GPU Recovery action - None/Reset/Reboot/Drain P2P -#define NVML_FI_MAX 231 //!< One greater than the largest field ID defined above +#define NVML_FI_DEV_GET_GPU_RECOVERY_ACTION 230 //!< GPU Recovery action - None/Reset/Reboot/Drain P2P/Drain and Reset +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 235 //!< Count of symbol errors that are corrected - bin 0 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_1 236 //!< Count of symbol errors that are corrected - bin 1 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_2 237 //!< Count of symbol errors that are corrected - bin 2 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_3 238 //!< Count of symbol errors that are corrected - bin 3 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_4 239 //!< Count of symbol errors that are corrected - bin 4 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_5 240 //!< Count of symbol errors that are corrected - bin 5 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_6 241 //!< Count of symbol errors that are corrected - bin 6 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_7 242 //!< Count of symbol errors that are corrected - bin 7 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_8 243 //!< Count of symbol errors that are corrected - bin 8 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_9 244 //!< Count of symbol errors that are corrected - bin 9 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_10 245 //!< Count of symbol errors that are corrected - bin 10 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_11 246 //!< Count of symbol errors that are corrected - bin 11 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_12 247 //!< Count of symbol errors that are corrected - bin 12 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_13 248 //!< Count of symbol errors that are corrected - bin 13 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_14 249 //!< Count of symbol errors that are corrected - bin 14 +#define NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_15 250 //!< Count of symbol errors that are corrected - bin 15 +/* Power Smoothing */ +#define NVML_FI_PWR_SMOOTHING_ENABLED 251 //!< Enablement (0/DISABLED or 1/ENABLED) +#define NVML_FI_PWR_SMOOTHING_PRIV_LVL 252 //!< Current privilege level +#define NVML_FI_PWR_SMOOTHING_IMM_RAMP_DOWN_ENABLED 253 //!< Immediate ramp down enablement (0/DISABLED or 1/ENABLED) +#define NVML_FI_PWR_SMOOTHING_APPLIED_TMP_CEIL 254 //!< Applied TMP ceiling value in Watts +#define NVML_FI_PWR_SMOOTHING_APPLIED_TMP_FLOOR 255 //!< Applied TMP floor value in Watts +#define NVML_FI_PWR_SMOOTHING_MAX_PERCENT_TMP_FLOOR_SETTING 256 //!< Max % TMP Floor value +#define NVML_FI_PWR_SMOOTHING_MIN_PERCENT_TMP_FLOOR_SETTING 257 //!< Min % TMP Floor value +#define NVML_FI_PWR_SMOOTHING_HW_CIRCUITRY_PERCENT_LIFETIME_REMAINING 258 //!< HW Circuitry % lifetime remaining +#define NVML_FI_PWR_SMOOTHING_MAX_NUM_PRESET_PROFILES 259 //!< Max number of preset profiles +#define NVML_FI_PWR_SMOOTHING_PROFILE_PERCENT_TMP_FLOOR 260 //!< % TMP floor for a given profile +#define NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_UP_RATE 261 //!< Ramp up rate in mW/s for a given profile +#define NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_RATE 262 //!< Ramp down rate in mW/s for a given profile +#define NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_HYST_VAL 263 //!< Ramp down hysteresis value in ms for a given profile +#define NVML_FI_PWR_SMOOTHING_ACTIVE_PRESET_PROFILE 264 //!< Active preset profile number +#define NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PERCENT_TMP_FLOOR 265 //!< % TMP floor for a given profile +#define NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_UP_RATE 266 //!< Ramp up rate in mW/s for a given profile +#define NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_RATE 267 //!< Ramp down rate in mW/s for a given profile +#define NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_HYST_VAL 268 //!< Ramp down hysteresis value in ms for a given profile + +#define NVML_FI_MAX 269 //!< One greater than the largest field ID defined above /** * NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS @@ -2533,8 +2615,8 @@ { nvmlDevice_t device; //!< Specific device where the event occurred unsigned long long eventType; //!< Information about what specific event occurred - unsigned long long eventData; //!< Stores XID error for the device in the event of nvmlEventTypeXidCriticalError, - // eventData is 0 for any other event. eventData is set as 999 for unknown xid error. + unsigned long long eventData; //!< Stores Xid error for the device in the event of nvmlEventTypeXidCriticalError, + // eventData is 0 for any other event. eventData is set as 999 for unknown Xid error. unsigned int gpuInstanceId; //!< If MIG is enabled and nvmlEventTypeXidCriticalError event is attributable to a GPU // instance, stores a valid GPU instance ID. gpuInstanceId is set to 0xFFFFFFFF // otherwise. @@ -3016,12 +3098,45 @@ nvmlGpuFabricState_t state; //!< Current state of GPU registration process } nvmlGpuFabricInfo_t; +/* + * Fabric Degraded BW + */ #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED 0 #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE 1 #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE 2 #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW 0 -#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW 0x11 +#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW 0x3 + +/* + * Fabric Route Recovery + */ +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED 0 +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE 1 +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE 2 + +#define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY 2 +#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY 0x3 + +/* + * Nvlink Fabric Route Unhealthy + */ +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED 0 +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE 1 +#define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE 2 + +#define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY 4 +#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY 0x3 + +/* + * Fabric Access Timeout Recovery + */ +#define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED 0 +#define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE 1 +#define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE 2 + +#define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY 6 +#define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY 0x3 /** * GPU Fabric Health Status Mask for various fields can be obtained @@ -5000,6 +5115,22 @@ nvmlReturn_t DECLDIR nvmlDeviceGetTemperatureThreshold(nvmlDevice_t device, nvmlTemperatureThresholds_t thresholdType, unsigned int *temp); /** + * Retrieves the thermal margin temperature (distance to nearest slowdown threshold). + * + * @param[in] device The identifier of the target device + * @param[in,out] marginTempInfo Versioned structure in which to return the temperature reading + * + * @returns + * - \ref NVML_SUCCESS if the margin temperature was retrieved successfully + * - \ref NVML_ERROR_NOT_SUPPORTED if request is not supported on the current platform + * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a temperature is NULL + * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the right versioned structure is not used + * - \ref NVML_ERROR_UNKNOWN on any unexpected error + */ +nvmlReturn_t DECLDIR nvmlDeviceGetMarginTemperature(nvmlDevice_t device, nvmlMarginTemperature_t *marginTempInfo); + +/** * Used to execute a list of thermal system instructions. * * @param device The identifier of the target device @@ -5653,6 +5784,66 @@ nvmlReturn_t DECLDIR nvmlDeviceGetCudaComputeCapability(nvmlDevice_t device, int *major, int *minor); /** + * Retrieves the current and pending DRAM Encryption modes for the device. + * + * %BLACKWELL_OR_NEWER% + * Only applicable to devices that support DRAM Encryption + * Requires \a NVML_INFOROM_DEN version 1.0 or higher. + * + * Changing DRAM Encryption modes requires a reboot. The "pending" DRAM Encryption mode refers to the target mode following + * the next reboot. + * + * See \ref nvmlEnableState_t for details on allowed modes. + * + * @param device The identifier of the target device + * @param current Reference in which to return the current DRAM Encryption mode + * @param pending Reference in which to return the pending DRAM Encryption mode + * + * @return + * - \ref NVML_SUCCESS if \a current and \a pending have been set + * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or either \a current or \a pending is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature + * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the argument version is not supported + * - \ref NVML_ERROR_UNKNOWN on any unexpected error + * + * @see nvmlDeviceSetDramEncryptionMode() + */ +nvmlReturn_t DECLDIR nvmlDeviceGetDramEncryptionMode(nvmlDevice_t device, nvmlDramEncryptionInfo_t *current, nvmlDramEncryptionInfo_t *pending); + +/** + * Set the DRAM Encryption mode for the device. + * + * For Kepler &tm; or newer fully supported devices. + * Only applicable to devices that support DRAM Encryption. + * Requires \a NVML_INFOROM_DEN version 1.0 or higher. + * Requires root/admin permissions. + * + * The DRAM Encryption mode determines whether the GPU enables its DRAM Encryption support. + * + * This operation takes effect after the next reboot. + * + * See \ref nvmlEnableState_t for details on available modes. + * + * @param device The identifier of the target device + * @param dramEncryption The target DRAM Encryption mode + * + * @return + * - \ref NVML_SUCCESS if the DRAM Encryption mode was set + * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a DRAM Encryption is invalid + * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature + * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation + * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the argument version is not supported + * - \ref NVML_ERROR_UNKNOWN on any unexpected error + * + * @see nvmlDeviceGetDramEncryptionMode() + */ +nvmlReturn_t DECLDIR nvmlDeviceSetDramEncryptionMode(nvmlDevice_t device, const nvmlDramEncryptionInfo_t *dramEncryption); + +/** * Retrieves the current and pending ECC modes for the device. * * For Fermi &tm; or newer fully supported devices. @@ -6500,7 +6691,7 @@ * @param numCores The number of cores for the specified device * * @return - * - \ref NVML_SUCCESS if Gpu core count is successfully retrieved + * - \ref NVML_SUCCESS if GPU core count is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a numCores is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device @@ -6548,7 +6739,7 @@ * @param maxSpeed The devices's PCIE Max Link speed in MBPS * * @return - * - \ref NVML_SUCCESS if Pcie Max Link Speed is successfully retrieved + * - \ref NVML_SUCCESS if PCIe Max Link Speed is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a maxSpeed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device @@ -6738,7 +6929,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetConfComputeProtectedMemoryUsage(nvmlDevice_t device, nvmlMemory_t *memory); /** - * Get Conf Computing Gpu certificate details. + * Get Conf Computing GPU certificate details. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. @@ -6757,7 +6948,7 @@ nvmlConfComputeGpuCertificate_t *gpuCert); /** - * Get Conf Computing Gpu attestation report. + * Get Conf Computing GPU attestation report. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. @@ -7000,8 +7191,8 @@ * * For Kepler &tm; or newer fully supported devices. * - * To just query the number of processes ready to be queried, call this function with *count = 0 and - * pids=NULL. The return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if list is empty. + * To query the number of processes under Accounting Mode, call this function with *count = 0 and pids=NULL. + * The return code will be NVML_ERROR_INSUFFICIENT_SIZE with an updated count value indicating the number of processes. * * For more details see \ref nvmlDeviceGetAccountingStats. * @@ -7059,7 +7250,7 @@ /** * Returns the list of retired pages by source, including pages that are pending retirement * The address information provided from this API is the hardware address of the page that was retired. Note - * that this does not match the virtual address used in CUDA, but will match the address information in XID 63 + * that this does not match the virtual address used in CUDA, but will match the address information in Xid 63 * * For Kepler &tm; or newer fully supported devices. * @@ -7087,7 +7278,7 @@ /** * Returns the list of retired pages by source, including pages that are pending retirement * The address information provided from this API is the hardware address of the page that was retired. Note - * that this does not match the virtual address used in CUDA, but will match the address information in XID 63 + * that this does not match the virtual address used in CUDA, but will match the address information in Xid 63 * * \note nvmlDeviceGetRetiredPages_v2 adds an additional timestamps parameter to return the time of each page's * retirement. @@ -7307,7 +7498,7 @@ * * %BLACKWELL_OR_NEWER% * - * See \ref nvmlPlatformInfo_t for more information on the struct. + * See \ref nvmlPlatformInfo_v1_t for more information on the struct. * * @param device The identifier of the target device * @param platformInfo Pointer to the caller-provided structure of nvmlPlatformInfo_t. @@ -8109,6 +8300,65 @@ */ nvmlReturn_t DECLDIR nvmlDeviceSetPowerManagementLimit_v2(nvmlDevice_t device, nvmlPowerValue_v2_t *powerValue); +/***************************************************************************************************/ +/** @defgroup NVML NVLink + * @{ + */ +/***************************************************************************************************/ + +#define NVML_NVLINK_BER_MANTISSA_SHIFT 8 +#define NVML_NVLINK_BER_MANTISSA_WIDTH 0xf + +#define NVML_NVLINK_BER_EXP_SHIFT 0 +#define NVML_NVLINK_BER_EXP_WIDTH 0xff + +/** + * Nvlink Error counter BER can be obtained using the below macros + * Ex - NVML_NVLINK_ERROR_COUNTER_BER_GET(var, BER_MANTISSA) + */ +#define NVML_NVLINK_ERROR_COUNTER_BER_GET(var, type) \ + (((var) >> NVML_NVLINK_##type##_SHIFT) & \ + (NVML_NVLINK_##type##_WIDTH)) \ + +/* + * NVML_FI_DEV_NVLINK_GET_STATE state enums + */ +#define NVML_NVLINK_STATE_INACTIVE 0x0 +#define NVML_NVLINK_STATE_ACTIVE 0x1 +#define NVML_NVLINK_STATE_SLEEP 0x2 + +#define NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES 23 + +typedef struct +{ + unsigned int version; + unsigned char bwModes[NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES]; + unsigned char totalBwModes; +} nvmlNvlinkSupportedBwModes_v1_t; +typedef nvmlNvlinkSupportedBwModes_v1_t nvmlNvlinkSupportedBwModes_t; +#define nvmlNvlinkSupportedBwModes_v1 NVML_STRUCT_VERSION(NvlinkSupportedBwModes, 1) + +typedef struct +{ + unsigned int version; + unsigned int bIsBest; + unsigned char bwMode; +} nvmlNvlinkGetBwMode_v1_t; +typedef nvmlNvlinkGetBwMode_v1_t nvmlNvlinkGetBwMode_t; +#define nvmlNvlinkGetBwMode_v1 NVML_STRUCT_VERSION(NvlinkGetBwMode, 1) + +typedef struct +{ + unsigned int version; + unsigned int bSetBest; + unsigned char bwMode; +} nvmlNvlinkSetBwMode_v1_t; +typedef nvmlNvlinkSetBwMode_v1_t nvmlNvlinkSetBwMode_t; +#define nvmlNvlinkSetBwMode_v1 NVML_STRUCT_VERSION(NvlinkSetBwMode, 1) + +/** @} */ // @defgroup NVML NVLink + + /** @} */ /***************************************************************************************************/ @@ -8387,6 +8637,7 @@ * - \ref NVML_SUCCESS if the \a Threshold is successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a Threshold is not within range + * - \ref NVML_ERROR_NOT_READY if an internal driver setting prevents the threshold from being used * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * **/ @@ -8417,6 +8668,58 @@ */ nvmlReturn_t DECLDIR nvmlSystemGetNvlinkBwMode(unsigned int *nvlinkBwMode); +/** + * Get the supported NvLink Reduced Bandwidth Modes of the device + * + * %BLACKWELL_OR_NEWER% + * + * @param device The identifier of the target device + * @param supportedBwMode Reference to \a nvmlNvlinkSupportedBwModes_t + * + * @return + * - \ref NVML_SUCCESS if the query was successful + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or supportedBwMode is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported + **/ +nvmlReturn_t DECLDIR nvmlDeviceGetNvlinkSupportedBwModes(nvmlDevice_t device, + nvmlNvlinkSupportedBwModes_t *supportedBwMode); + +/** + * Get the NvLink Reduced Bandwidth Mode for the device + * + * %BLACKWELL_OR_NEWER% + * + * @param device The identifier of the target device + * @param getBwMode Reference to \a nvmlNvlinkGetBwMode_t + * + * @return + * - \ref NVML_SUCCESS if the query was successful + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or getBwMode is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported + **/ +nvmlReturn_t DECLDIR nvmlDeviceGetNvlinkBwMode(nvmlDevice_t device, + nvmlNvlinkGetBwMode_t *getBwMode); + +/** + * Set the NvLink Reduced Bandwidth Mode for the device + * + * %BLACKWELL_OR_NEWER% + * + * @param device The identifier of the target device + * @param setBwMode Reference to \a nvmlNvlinkSetBwMode_t + * + * @return + * - \ref NVML_SUCCESS if the Bandwidth mode was successfully set + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or setBwMode is NULL + * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change Bandwidth mode + * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported + **/ +nvmlReturn_t DECLDIR nvmlDeviceSetNvlinkBwMode(nvmlDevice_t device, + nvmlNvlinkSetBwMode_t *setBwMode); + /** @} */ /***************************************************************************************************/ @@ -8448,7 +8751,7 @@ * Starts recording of events on a specified devices and add the events to specified \ref nvmlEventSet_t * * For Fermi &tm; or newer fully supported devices. - * Ecc events are available only on ECC enabled devices (see \ref nvmlDeviceGetTotalEccErrors) + * ECC events are available only on ECC-enabled devices (see \ref nvmlDeviceGetTotalEccErrors) * Power capping events are available only on Power Management enabled devices (see \ref nvmlDeviceGetPowerManagementMode) * * For Linux only. @@ -8514,11 +8817,11 @@ * but not longer than specified timeout. This function in certain conditions can return before * specified timeout passes (e.g. when interrupt arrives) * - * On Windows, in case of xid error, the function returns the most recent xid error type seen by the system. - * If there are multiple xid errors generated before nvmlEventSetWait is invoked then the last seen xid error - * type is returned for all xid error events. + * On Windows, in case of Xid error, the function returns the most recent Xid error type seen by the system. + * If there are multiple Xid errors generated before nvmlEventSetWait is invoked then the last seen Xid error + * type is returned for all Xid error events. * - * On Linux, every xid error event would return the associated event data and other information if applicable. + * On Linux, every Xid error event would return the associated event data and other information if applicable. * * In MIG mode, if device handle is provided, the API reports all the events for the available instances, * only if the caller has appropriate privileges. In absence of required privileges, only the events which @@ -8853,11 +9156,16 @@ /** * Query the supported vGPU placement ID of the vGPU type. * - * An array of supported vGPU placement IDs for the vGPU type ID indicated by \a vgpuTypeId is returned in the - * caller-supplied buffer of \a pPlacementList->placementIds. Memory needed for the placementIds array should be - * allocated based on maximum instances of a vGPU type which can be queried via \ref nvmlVgpuTypeGetMaxInstances(). - * - * This function will return supported placement IDs even if GPU is not in vGPU heterogeneous mode. + * The function returns an array of supported vGPU placement IDs for the specified vGPU type ID in the buffer provided + * by the caller at \a pPlacementList->placementIds. The required memory for the placementIds array must be allocated + * based on the maximum number of vGPU type instances, which is retrievable through \ref nvmlVgpuTypeGetMaxInstances(). + * If the provided count by the caller is insufficient, the function will return NVML_ERROR_INSUFFICIENT_SIZE along with + * the number of required entries in \a pPlacementList->count. The caller should then reallocate a buffer with the size + * of pPlacementList->count * sizeof(pPlacementList->placementIds) and invoke the function again. + * + * To obtain a list of homogeneous placement IDs, the caller needs to set \a pPlacementList->mode to NVML_VGPU_PGPU_HOMOGENEOUS_MODE. + * For heterogeneous placement IDs, \a pPlacementList->mode should be set to NVML_VGPU_PGPU_HETEROGENEOUS_MODE. + * By default, a list of heterogeneous placement IDs is returned. * * @param device Identifier of the target device * @param vgpuTypeId Handle to vGPU type. The vGPU type ID @@ -8870,6 +9178,7 @@ * - \ref NVML_ERROR_NOT_SUPPORTED If \a device or \a vgpuTypeId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pPlacementList is invalid + * - \ref NVML_ERROR_INSUFFICIENT_SIZE If the buffer is small, element count is returned in \a pPlacementList->count * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuTypeSupportedPlacements(nvmlDevice_t device, nvmlVgpuTypeId_t vgpuTypeId, nvmlVgpuPlacementList_t *pPlacementList); @@ -8880,11 +9189,13 @@ * An array of creatable vGPU placement IDs for the vGPU type ID indicated by \a vgpuTypeId is returned in the * caller-supplied buffer of \a pPlacementList->placementIds. Memory needed for the placementIds array should be * allocated based on maximum instances of a vGPU type which can be queried via \ref nvmlVgpuTypeGetMaxInstances(). + * If the provided count by the caller is insufficient, the function will return NVML_ERROR_INSUFFICIENT_SIZE along with + * the number of required entries in \a pPlacementList->count. The caller should then reallocate a buffer with the size + * of pPlacementList->count * sizeof(pPlacementList->placementIds) and invoke the function again. + * * The creatable vGPU placement IDs may differ over time, as there may be restrictions on what type of vGPU the * vGPU instance is running. * - * The function will return \ref NVML_ERROR_NOT_SUPPORTED if the \a device is not in vGPU heterogeneous mode. - * * @param device The identifier of the target device * @param vgpuTypeId Handle to vGPU type. The vGPU type ID * @param pPlacementList Pointer to the list of vGPU placement structure \a nvmlVgpuPlacementList_t @@ -8927,7 +9238,7 @@ nvmlReturn_t DECLDIR nvmlVgpuTypeGetFbReservation(nvmlVgpuTypeId_t vgpuTypeId, unsigned long long *fbReservation); /** - * Specify the currently used runtime state size of the vGPU instance + * Retrieve the currently used runtime state size of the vGPU instance * * This size represents the maximum in-memory data size utilized by a vGPU instance during standard operation. * This measurement is exclusive of frame buffer (FB) data size assigned to the vGPU instance. @@ -10446,7 +10757,10 @@ #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1 0x7 #define NVML_GPU_INSTANCE_PROFILE_2_SLICE_REV1 0x8 #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV2 0x9 -#define NVML_GPU_INSTANCE_PROFILE_COUNT 0xA +#define NVML_GPU_INSTANCE_PROFILE_1_SLICE_GFX 0xA +#define NVML_GPU_INSTANCE_PROFILE_2_SLICE_GFX 0xB +#define NVML_GPU_INSTANCE_PROFILE_4_SLICE_GFX 0xC +#define NVML_GPU_INSTANCE_PROFILE_COUNT 0xD /** * MIG GPU instance profile capability. @@ -10454,7 +10768,9 @@ * Bit field values representing MIG profile capabilities * \ref nvmlGpuInstanceProfileInfo_v3_t.capabilities */ -#define NVML_GPU_INTSTANCE_PROFILE_CAPS_P2P 0x1 +#define NVML_GPU_INSTANCE_PROFILE_CAPS_P2P 0x1 +#define NVML_GPU_INTSTANCE_PROFILE_CAPS_P2P 0x1 //!< Deprecated, do not use +#define NVML_GPU_INSTANCE_PROFILE_CAPS_GFX 0x2 /** * MIG compute instance profile capability. @@ -10462,7 +10778,7 @@ * Bit field values representing MIG profile capabilities * \ref nvmlComputeInstanceProfileInfo_v3_t.capabilities */ -/* No capabilities for compute profiles currently exposed */ +#define NVML_COMPUTE_INSTANCE_PROFILE_CAPS_GFX 0x1 typedef struct nvmlGpuInstancePlacement_st { @@ -11357,78 +11673,77 @@ */ typedef enum { - NVML_GPM_METRIC_GRAPHICS_UTIL = 1, //!< Percentage of time any compute/graphics app was active on the GPU. 0.0 - 100.0 - NVML_GPM_METRIC_SM_UTIL = 2, //!< Percentage of SMs that were busy. 0.0 - 100.0 - NVML_GPM_METRIC_SM_OCCUPANCY = 3, //!< Percentage of warps that were active vs theoretical maximum. 0.0 - 100.0 - NVML_GPM_METRIC_INTEGER_UTIL = 4, //!< Percentage of time the GPU's SMs were doing integer operations. 0.0 - 100.0 - NVML_GPM_METRIC_ANY_TENSOR_UTIL = 5, //!< Percentage of time the GPU's SMs were doing ANY tensor operations. 0.0 - 100.0 - NVML_GPM_METRIC_DFMA_TENSOR_UTIL = 6, //!< Percentage of time the GPU's SMs were doing DFMA tensor operations. 0.0 - 100.0 - NVML_GPM_METRIC_HMMA_TENSOR_UTIL = 7, //!< Percentage of time the GPU's SMs were doing HMMA tensor operations. 0.0 - 100.0 - NVML_GPM_METRIC_IMMA_TENSOR_UTIL = 9, //!< Percentage of time the GPU's SMs were doing IMMA tensor operations. 0.0 - 100.0 - NVML_GPM_METRIC_DRAM_BW_UTIL = 10, //!< Percentage of DRAM bw used vs theoretical maximum. 0.0 - 100.0 */ - NVML_GPM_METRIC_FP64_UTIL = 11, //!< Percentage of time the GPU's SMs were doing non-tensor FP64 math. 0.0 - 100.0 - NVML_GPM_METRIC_FP32_UTIL = 12, //!< Percentage of time the GPU's SMs were doing non-tensor FP32 math. 0.0 - 100.0 - NVML_GPM_METRIC_FP16_UTIL = 13, //!< Percentage of time the GPU's SMs were doing non-tensor FP16 math. 0.0 - 100.0 - NVML_GPM_METRIC_PCIE_TX_PER_SEC = 20, //!< PCIe traffic from this GPU in MiB/sec - NVML_GPM_METRIC_PCIE_RX_PER_SEC = 21, //!< PCIe traffic to this GPU in MiB/sec - NVML_GPM_METRIC_NVDEC_0_UTIL = 30, //!< Percent utilization of NVDEC 0. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_1_UTIL = 31, //!< Percent utilization of NVDEC 1. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_2_UTIL = 32, //!< Percent utilization of NVDEC 2. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_3_UTIL = 33, //!< Percent utilization of NVDEC 3. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_4_UTIL = 34, //!< Percent utilization of NVDEC 4. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_5_UTIL = 35, //!< Percent utilization of NVDEC 5. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_6_UTIL = 36, //!< Percent utilization of NVDEC 6. 0.0 - 100.0 - NVML_GPM_METRIC_NVDEC_7_UTIL = 37, //!< Percent utilization of NVDEC 7. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_0_UTIL = 40, //!< Percent utilization of NVJPG 0. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_1_UTIL = 41, //!< Percent utilization of NVJPG 1. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_2_UTIL = 42, //!< Percent utilization of NVJPG 2. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_3_UTIL = 43, //!< Percent utilization of NVJPG 3. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_4_UTIL = 44, //!< Percent utilization of NVJPG 4. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_5_UTIL = 45, //!< Percent utilization of NVJPG 5. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_6_UTIL = 46, //!< Percent utilization of NVJPG 6. 0.0 - 100.0 - NVML_GPM_METRIC_NVJPG_7_UTIL = 47, //!< Percent utilization of NVJPG 7. 0.0 - 100.0 - NVML_GPM_METRIC_NVOFA_0_UTIL = 50, //!< Percent utilization of NVOFA 0. 0.0 - 100.0 - NVML_GPM_METRIC_NVOFA_1_UTIL = 51, //!< Percent utilization of NVOFA 1. 0.0 - 100.0 - NVML_GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC = 60, //!< NvLink read bandwidth for all links in MiB/sec - NVML_GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC = 61, //!< NvLink write bandwidth for all links in MiB/sec - NVML_GPM_METRIC_NVLINK_L0_RX_PER_SEC = 62, //!< NvLink read bandwidth for link 0 in MiB/sec - NVML_GPM_METRIC_NVLINK_L0_TX_PER_SEC = 63, //!< NvLink write bandwidth for link 0 in MiB/sec - NVML_GPM_METRIC_NVLINK_L1_RX_PER_SEC = 64, //!< NvLink read bandwidth for link 1 in MiB/sec - NVML_GPM_METRIC_NVLINK_L1_TX_PER_SEC = 65, //!< NvLink write bandwidth for link 1 in MiB/sec - NVML_GPM_METRIC_NVLINK_L2_RX_PER_SEC = 66, //!< NvLink read bandwidth for link 2 in MiB/sec - NVML_GPM_METRIC_NVLINK_L2_TX_PER_SEC = 67, //!< NvLink write bandwidth for link 2 in MiB/sec - NVML_GPM_METRIC_NVLINK_L3_RX_PER_SEC = 68, //!< NvLink read bandwidth for link 3 in MiB/sec - NVML_GPM_METRIC_NVLINK_L3_TX_PER_SEC = 69, //!< NvLink write bandwidth for link 3 in MiB/sec - NVML_GPM_METRIC_NVLINK_L4_RX_PER_SEC = 70, //!< NvLink read bandwidth for link 4 in MiB/sec - NVML_GPM_METRIC_NVLINK_L4_TX_PER_SEC = 71, //!< NvLink write bandwidth for link 4 in MiB/sec - NVML_GPM_METRIC_NVLINK_L5_RX_PER_SEC = 72, //!< NvLink read bandwidth for link 5 in MiB/sec - NVML_GPM_METRIC_NVLINK_L5_TX_PER_SEC = 73, //!< NvLink write bandwidth for link 5 in MiB/sec - NVML_GPM_METRIC_NVLINK_L6_RX_PER_SEC = 74, //!< NvLink read bandwidth for link 6 in MiB/sec - NVML_GPM_METRIC_NVLINK_L6_TX_PER_SEC = 75, //!< NvLink write bandwidth for link 6 in MiB/sec - NVML_GPM_METRIC_NVLINK_L7_RX_PER_SEC = 76, //!< NvLink read bandwidth for link 7 in MiB/sec - NVML_GPM_METRIC_NVLINK_L7_TX_PER_SEC = 77, //!< NvLink write bandwidth for link 7 in MiB/sec - NVML_GPM_METRIC_NVLINK_L8_RX_PER_SEC = 78, //!< NvLink read bandwidth for link 8 in MiB/sec - NVML_GPM_METRIC_NVLINK_L8_TX_PER_SEC = 79, //!< NvLink write bandwidth for link 8 in MiB/sec - NVML_GPM_METRIC_NVLINK_L9_RX_PER_SEC = 80, //!< NvLink read bandwidth for link 9 in MiB/sec - NVML_GPM_METRIC_NVLINK_L9_TX_PER_SEC = 81, //!< NvLink write bandwidth for link 9 in MiB/sec - NVML_GPM_METRIC_NVLINK_L10_RX_PER_SEC = 82, //!< NvLink read bandwidth for link 10 in MiB/sec - NVML_GPM_METRIC_NVLINK_L10_TX_PER_SEC = 83, //!< NvLink write bandwidth for link 10 in MiB/sec - NVML_GPM_METRIC_NVLINK_L11_RX_PER_SEC = 84, //!< NvLink read bandwidth for link 11 in MiB/sec - NVML_GPM_METRIC_NVLINK_L11_TX_PER_SEC = 85, //!< NvLink write bandwidth for link 11 in MiB/sec - NVML_GPM_METRIC_NVLINK_L12_RX_PER_SEC = 86, //!< NvLink read bandwidth for link 12 in MiB/sec - NVML_GPM_METRIC_NVLINK_L12_TX_PER_SEC = 87, //!< NvLink write bandwidth for link 12 in MiB/sec - NVML_GPM_METRIC_NVLINK_L13_RX_PER_SEC = 88, //!< NvLink read bandwidth for link 13 in MiB/sec - NVML_GPM_METRIC_NVLINK_L13_TX_PER_SEC = 89, //!< NvLink write bandwidth for link 13 in MiB/sec - NVML_GPM_METRIC_NVLINK_L14_RX_PER_SEC = 90, //!< NvLink read bandwidth for link 14 in MiB/sec - NVML_GPM_METRIC_NVLINK_L14_TX_PER_SEC = 91, //!< NvLink write bandwidth for link 14 in MiB/sec - NVML_GPM_METRIC_NVLINK_L15_RX_PER_SEC = 92, //!< NvLink read bandwidth for link 15 in MiB/sec - NVML_GPM_METRIC_NVLINK_L15_TX_PER_SEC = 93, //!< NvLink write bandwidth for link 15 in MiB/sec - NVML_GPM_METRIC_NVLINK_L16_RX_PER_SEC = 94, //!< NvLink read bandwidth for link 16 in MiB/sec - NVML_GPM_METRIC_NVLINK_L16_TX_PER_SEC = 95, //!< NvLink write bandwidth for link 16 in MiB/sec - NVML_GPM_METRIC_NVLINK_L17_RX_PER_SEC = 96, //!< NvLink read bandwidth for link 17 in MiB/sec - NVML_GPM_METRIC_NVLINK_L17_TX_PER_SEC = 97, //!< NvLink write bandwidth for link 17 in MiB/sec - //Put new metrics for BLACKWELL here... - NVML_GPM_METRIC_MAX = 98, //!< Maximum value above +1. Note that changing this should also change NVML_GPM_METRICS_GET_VERSION due to struct size change + NVML_GPM_METRIC_GRAPHICS_UTIL = 1, //!< Percentage of time any compute/graphics app was active on the GPU. 0.0 - 100.0 + NVML_GPM_METRIC_SM_UTIL = 2, //!< Percentage of SMs that were busy. 0.0 - 100.0 + NVML_GPM_METRIC_SM_OCCUPANCY = 3, //!< Percentage of warps that were active vs theoretical maximum. 0.0 - 100.0 + NVML_GPM_METRIC_INTEGER_UTIL = 4, //!< Percentage of time the GPU's SMs were doing integer operations. 0.0 - 100.0 + NVML_GPM_METRIC_ANY_TENSOR_UTIL = 5, //!< Percentage of time the GPU's SMs were doing ANY tensor operations. 0.0 - 100.0 + NVML_GPM_METRIC_DFMA_TENSOR_UTIL = 6, //!< Percentage of time the GPU's SMs were doing DFMA tensor operations. 0.0 - 100.0 + NVML_GPM_METRIC_HMMA_TENSOR_UTIL = 7, //!< Percentage of time the GPU's SMs were doing HMMA tensor operations. 0.0 - 100.0 + NVML_GPM_METRIC_IMMA_TENSOR_UTIL = 9, //!< Percentage of time the GPU's SMs were doing IMMA tensor operations. 0.0 - 100.0 + NVML_GPM_METRIC_DRAM_BW_UTIL = 10, //!< Percentage of DRAM bw used vs theoretical maximum. 0.0 - 100.0 */ + NVML_GPM_METRIC_FP64_UTIL = 11, //!< Percentage of time the GPU's SMs were doing non-tensor FP64 math. 0.0 - 100.0 + NVML_GPM_METRIC_FP32_UTIL = 12, //!< Percentage of time the GPU's SMs were doing non-tensor FP32 math. 0.0 - 100.0 + NVML_GPM_METRIC_FP16_UTIL = 13, //!< Percentage of time the GPU's SMs were doing non-tensor FP16 math. 0.0 - 100.0 + NVML_GPM_METRIC_PCIE_TX_PER_SEC = 20, //!< PCIe traffic from this GPU in MiB/sec + NVML_GPM_METRIC_PCIE_RX_PER_SEC = 21, //!< PCIe traffic to this GPU in MiB/sec + NVML_GPM_METRIC_NVDEC_0_UTIL = 30, //!< Percent utilization of NVDEC 0. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_1_UTIL = 31, //!< Percent utilization of NVDEC 1. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_2_UTIL = 32, //!< Percent utilization of NVDEC 2. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_3_UTIL = 33, //!< Percent utilization of NVDEC 3. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_4_UTIL = 34, //!< Percent utilization of NVDEC 4. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_5_UTIL = 35, //!< Percent utilization of NVDEC 5. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_6_UTIL = 36, //!< Percent utilization of NVDEC 6. 0.0 - 100.0 + NVML_GPM_METRIC_NVDEC_7_UTIL = 37, //!< Percent utilization of NVDEC 7. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_0_UTIL = 40, //!< Percent utilization of NVJPG 0. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_1_UTIL = 41, //!< Percent utilization of NVJPG 1. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_2_UTIL = 42, //!< Percent utilization of NVJPG 2. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_3_UTIL = 43, //!< Percent utilization of NVJPG 3. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_4_UTIL = 44, //!< Percent utilization of NVJPG 4. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_5_UTIL = 45, //!< Percent utilization of NVJPG 5. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_6_UTIL = 46, //!< Percent utilization of NVJPG 6. 0.0 - 100.0 + NVML_GPM_METRIC_NVJPG_7_UTIL = 47, //!< Percent utilization of NVJPG 7. 0.0 - 100.0 + NVML_GPM_METRIC_NVOFA_0_UTIL = 50, //!< Percent utilization of NVOFA 0. 0.0 - 100.0 + NVML_GPM_METRIC_NVOFA_1_UTIL = 51, //!< Percent utilization of NVOFA 1. 0.0 - 100.0 + NVML_GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC = 60, //!< NvLink read bandwidth for all links in MiB/sec + NVML_GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC = 61, //!< NvLink write bandwidth for all links in MiB/sec + NVML_GPM_METRIC_NVLINK_L0_RX_PER_SEC = 62, //!< NvLink read bandwidth for link 0 in MiB/sec + NVML_GPM_METRIC_NVLINK_L0_TX_PER_SEC = 63, //!< NvLink write bandwidth for link 0 in MiB/sec + NVML_GPM_METRIC_NVLINK_L1_RX_PER_SEC = 64, //!< NvLink read bandwidth for link 1 in MiB/sec + NVML_GPM_METRIC_NVLINK_L1_TX_PER_SEC = 65, //!< NvLink write bandwidth for link 1 in MiB/sec + NVML_GPM_METRIC_NVLINK_L2_RX_PER_SEC = 66, //!< NvLink read bandwidth for link 2 in MiB/sec + NVML_GPM_METRIC_NVLINK_L2_TX_PER_SEC = 67, //!< NvLink write bandwidth for link 2 in MiB/sec + NVML_GPM_METRIC_NVLINK_L3_RX_PER_SEC = 68, //!< NvLink read bandwidth for link 3 in MiB/sec + NVML_GPM_METRIC_NVLINK_L3_TX_PER_SEC = 69, //!< NvLink write bandwidth for link 3 in MiB/sec + NVML_GPM_METRIC_NVLINK_L4_RX_PER_SEC = 70, //!< NvLink read bandwidth for link 4 in MiB/sec + NVML_GPM_METRIC_NVLINK_L4_TX_PER_SEC = 71, //!< NvLink write bandwidth for link 4 in MiB/sec + NVML_GPM_METRIC_NVLINK_L5_RX_PER_SEC = 72, //!< NvLink read bandwidth for link 5 in MiB/sec + NVML_GPM_METRIC_NVLINK_L5_TX_PER_SEC = 73, //!< NvLink write bandwidth for link 5 in MiB/sec + NVML_GPM_METRIC_NVLINK_L6_RX_PER_SEC = 74, //!< NvLink read bandwidth for link 6 in MiB/sec + NVML_GPM_METRIC_NVLINK_L6_TX_PER_SEC = 75, //!< NvLink write bandwidth for link 6 in MiB/sec + NVML_GPM_METRIC_NVLINK_L7_RX_PER_SEC = 76, //!< NvLink read bandwidth for link 7 in MiB/sec + NVML_GPM_METRIC_NVLINK_L7_TX_PER_SEC = 77, //!< NvLink write bandwidth for link 7 in MiB/sec + NVML_GPM_METRIC_NVLINK_L8_RX_PER_SEC = 78, //!< NvLink read bandwidth for link 8 in MiB/sec + NVML_GPM_METRIC_NVLINK_L8_TX_PER_SEC = 79, //!< NvLink write bandwidth for link 8 in MiB/sec + NVML_GPM_METRIC_NVLINK_L9_RX_PER_SEC = 80, //!< NvLink read bandwidth for link 9 in MiB/sec + NVML_GPM_METRIC_NVLINK_L9_TX_PER_SEC = 81, //!< NvLink write bandwidth for link 9 in MiB/sec + NVML_GPM_METRIC_NVLINK_L10_RX_PER_SEC = 82, //!< NvLink read bandwidth for link 10 in MiB/sec + NVML_GPM_METRIC_NVLINK_L10_TX_PER_SEC = 83, //!< NvLink write bandwidth for link 10 in MiB/sec + NVML_GPM_METRIC_NVLINK_L11_RX_PER_SEC = 84, //!< NvLink read bandwidth for link 11 in MiB/sec + NVML_GPM_METRIC_NVLINK_L11_TX_PER_SEC = 85, //!< NvLink write bandwidth for link 11 in MiB/sec + NVML_GPM_METRIC_NVLINK_L12_RX_PER_SEC = 86, //!< NvLink read bandwidth for link 12 in MiB/sec + NVML_GPM_METRIC_NVLINK_L12_TX_PER_SEC = 87, //!< NvLink write bandwidth for link 12 in MiB/sec + NVML_GPM_METRIC_NVLINK_L13_RX_PER_SEC = 88, //!< NvLink read bandwidth for link 13 in MiB/sec + NVML_GPM_METRIC_NVLINK_L13_TX_PER_SEC = 89, //!< NvLink write bandwidth for link 13 in MiB/sec + NVML_GPM_METRIC_NVLINK_L14_RX_PER_SEC = 90, //!< NvLink read bandwidth for link 14 in MiB/sec + NVML_GPM_METRIC_NVLINK_L14_TX_PER_SEC = 91, //!< NvLink write bandwidth for link 14 in MiB/sec + NVML_GPM_METRIC_NVLINK_L15_RX_PER_SEC = 92, //!< NvLink read bandwidth for link 15 in MiB/sec + NVML_GPM_METRIC_NVLINK_L15_TX_PER_SEC = 93, //!< NvLink write bandwidth for link 15 in MiB/sec + NVML_GPM_METRIC_NVLINK_L16_RX_PER_SEC = 94, //!< NvLink read bandwidth for link 16 in MiB/sec + NVML_GPM_METRIC_NVLINK_L16_TX_PER_SEC = 95, //!< NvLink write bandwidth for link 16 in MiB/sec + NVML_GPM_METRIC_NVLINK_L17_RX_PER_SEC = 96, //!< NvLink read bandwidth for link 17 in MiB/sec + NVML_GPM_METRIC_NVLINK_L17_TX_PER_SEC = 97, //!< NvLink write bandwidth for link 17 in MiB/sec + NVML_GPM_METRIC_MAX = 98, //!< Maximum value above +1. Note that changing this should also change NVML_GPM_METRICS_GET_VERSION due to struct size change } nvmlGpmMetricId_t; /** @} */ // @defgroup nvmlGpmEnums @@ -11624,28 +11939,6 @@ /** @} */ // @defgroup nvmlGpmFunctions /** @} */ // @defgroup GPM -/***************************************************************************************************/ -/** @defgroup NVML NVLink - * @{ - */ -/***************************************************************************************************/ - -#define NVML_NVLINK_SYMBOL_BER_MANTISSA_SHIFT 8 -#define NVML_NVLINK_SYMBOL_BER_MANTISSA_WIDTH 0xf - -#define NVML_NVLINK_SYMBOL_BER_EXP_SHIFT 0 -#define NVML_NVLINK_SYMBOL_BER_EXP_WIDTH 0xff - -/** - * Nvlink Error counter BER can be obtained using the below macros - * Ex - NVML_NVLINK_ERROR_COUNTER_BER_GET(var, SYMBOL_BER_MANTISSA) - */ -#define NVML_NVLINK_ERROR_COUNTER_BER_GET(var, type) \ - (((var) >> NVML_NVLINK_##type##_SHIFT) & \ - (NVML_NVLINK_##type##_WIDTH)) \ - -/** @} */ // @defgroup NVML NVLink - #define NVML_DEV_CAP_EGM (1 << 0) // Extended GPU memory /** * Device capabilities @@ -11700,6 +11993,282 @@ unsigned int mask[NVML_255_MASK_NUM_ELEMS]; //<! Array to hold 255 bits } nvmlMask255_t; +/***************************************************************************************************/ +/** @defgroup nvmlPowerProfiles Power Profile Information + * @{ + */ +/***************************************************************************************************/ +#define NVML_WORKLOAD_POWER_MAX_PROFILES (255) +typedef enum +{ + NVML_POWER_PROFILE_MAX_P = 0, + NVML_POWER_PROFILE_MAX_Q = 1, + NVML_POWER_PROFILE_COMPUTE = 2, + NVML_POWER_PROFILE_MEMORY_BOUND = 3, + NVML_POWER_PROFILE_NETWORK = 4, + NVML_POWER_PROFILE_BALANCED = 5, + NVML_POWER_PROFILE_LLM_INFERENCE = 6, + NVML_POWER_PROFILE_LLM_TRAINING = 7, + NVML_POWER_PROFILE_RBM = 8, + NVML_POWER_PROFILE_DCPCIE = 9, + NVML_POWER_PROFILE_HMMA_SPARSE = 10, + NVML_POWER_PROFILE_HMMA_DENSE = 11, + NVML_POWER_PROFILE_SYNC_BALANCED = 12, + NVML_POWER_PROFILE_HPC = 13, + NVML_POWER_PROFILE_MIG = 14, + + NVML_POWER_PROFILE_MAX = 15, +} nvmlPowerProfileType_t; + +/** + * Profile Metadata + */ +typedef struct +{ + unsigned int version; //!< the API version number + unsigned int profileId; //<! Performance Profile Id to provide semantic name such as compute, Memory, Max-Q... + unsigned int priority; //<! Priority of the profile + nvmlMask255_t conflictingMask; //<! Mask of conflicting performance profiles +} nvmlWorkloadPowerProfileInfo_v1_t; +typedef nvmlWorkloadPowerProfileInfo_v1_t nvmlWorkloadPowerProfileInfo_t; +#define nvmlWorkloadPowerProfileInfo_v1 NVML_STRUCT_VERSION(WorkloadPowerProfileInfo, 1) + +/** + * Profiles Info + */ +typedef struct +{ + unsigned int version; //!< the API version number + nvmlMask255_t perfProfilesMask; //!< Mask bit set to true for each valid performance profile + nvmlWorkloadPowerProfileInfo_t perfProfile[NVML_WORKLOAD_POWER_MAX_PROFILES]; //!< Array of performance profile info parameters +} nvmlWorkloadPowerProfileProfilesInfo_v1_t; +typedef nvmlWorkloadPowerProfileProfilesInfo_v1_t nvmlWorkloadPowerProfileProfilesInfo_t; +#define nvmlWorkloadPowerProfileProfilesInfo_v1 NVML_STRUCT_VERSION(WorkloadPowerProfileProfilesInfo, 1) + +/** + * Current Profiles + */ +typedef struct +{ + unsigned int version; + nvmlMask255_t perfProfilesMask; //!< Mask bit set to true for each valid performance profile + nvmlMask255_t requestedProfilesMask; //!< Mask of currently requested performance profiles + nvmlMask255_t enforcedProfilesMask; //!< Mask of currently enforced performance profiles post all arbitrations among the requested profiles. +} nvmlWorkloadPowerProfileCurrentProfiles_v1_t; +typedef nvmlWorkloadPowerProfileCurrentProfiles_v1_t nvmlWorkloadPowerProfileCurrentProfiles_t; +#define nvmlWorkloadPowerProfileCurrentProfiles_v1 NVML_STRUCT_VERSION(WorkloadPowerProfileCurrentProfiles, 1) + +/** + * Requested Profiles + */ +typedef struct +{ + unsigned int version; //!< the API version number + nvmlMask255_t requestedProfilesMask; //!< Mask of 255 bits, each bit representing index of respective perf profile +} nvmlWorkloadPowerProfileRequestedProfiles_v1_t; +typedef nvmlWorkloadPowerProfileRequestedProfiles_v1_t nvmlWorkloadPowerProfileRequestedProfiles_t; +#define nvmlWorkloadPowerProfileRequestedProfiles_v1 NVML_STRUCT_VERSION(WorkloadPowerProfileRequestedProfiles, 1) + +/** + * Get Performance Profiles Information + * + * %BLACKWELL_OR_NEWER% + * See \ref nvmlWorkloadPowerProfileProfilesInfo_v1_t for more information on the struct. + * The mask \a perfProfilesMask is bitmask of all supported mode indices where the + * mode is supported if the index is 1. Each supported mode will have a corresponding + * entry in the \a perfProfile array which will contain the \a profileId, the + * \a priority of this mode, where the lower the value, the higher the priority, + * and a \a conflictingMask, where each bit set in the mask corresponds to a different + * profile which cannot be used in conjunction with the given profile. + * + * @param device The identifier of the target device + * @param profilesInfo Reference to struct \a nvmlWorkloadPowerProfileProfilesInfo_t + * + * @return + * - \ref NVML_SUCCESS If the query is successful + * - \ref NVML_ERROR_INSUFFICIENT_SIZE If struct is fully allocated + * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a pointer to struct is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature + * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported + * - \ref NVML_ERROR_UNKNOWN On any unexpected error + */ +nvmlReturn_t DECLDIR nvmlDeviceWorkloadPowerProfileGetProfilesInfo(nvmlDevice_t device, + nvmlWorkloadPowerProfileProfilesInfo_t *profilesInfo); +/** + * Get Current Performance Profiles + * + * %BLACKWELL_OR_NEWER% + * See \ref nvmlWorkloadPowerProfileCurrentProfiles_v1_t for more information on the struct. + * This API returns a stuct which contains the current \a perfProfilesMask, + * \a requestedProfilesMask and \a enforcedProfilesMask. Each bit set in each + * bitmasks indicates the profile is supported, currently requested or currently + * engaged, respectively. + * + * @param device The identifier of the target device + * @param currentProfiles Reference to struct \a nvmlWorkloadPowerProfileCurrentProfiles_v1_t + * + * @return + * - \ref NVML_SUCCESS If the query is successful + * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or the pointer to struct is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature + * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported + * - \ref NVML_ERROR_UNKNOWN On any unexpected error + */ +nvmlReturn_t DECLDIR nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(nvmlDevice_t device, + nvmlWorkloadPowerProfileCurrentProfiles_t *currentProfiles); +/** + * Set Requested Performance Profiles + * + * %BLACKWELL_OR_NEWER% + * See \ref nvmlWorkloadPowerProfileRequestedProfiles_v1_t for more information on the struct. + * Reuqest one or more performance profiles be activated using the input bitmask + * \a requestedProfilesMask, where each bit set corresponds to a supported bit from + * the \a perfProfilesMask. These profiles will be added to existing list of + * currently requested profiles. + * + * @param device The identifier of the target device + * @param requestedProfiles Reference to struct \a nvmlWorkloadPowerProfileRequestedProfiles_v1_t + * + * @return + * - \ref NVML_SUCCESS If the query is successful + * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a pointer to struct is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature + * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported + * - \ref NVML_ERROR_UNKNOWN On any unexpected error + */ +nvmlReturn_t DECLDIR nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(nvmlDevice_t device, + nvmlWorkloadPowerProfileRequestedProfiles_t *requestedProfiles); +/** + * Clear Requested Performance Profiles + * + * %BLACKWELL_OR_NEWER% + * See \ref nvmlWorkloadPowerProfileRequestedProfiles_v1_t for more information on the struct. + * Clear one or more performance profiles be using the input bitmask + * \a requestedProfilesMask, where each bit set corresponds to a supported bit from + * the \a perfProfilesMask. These profiles will be removed from the existing list of + * currently requested profiles. + * + * @param device The identifier of the target device + * @param requestedProfiles Reference to struct \a nvmlWorkloadPowerProfileRequestedProfiles_v1_t + * + * @return + * - \ref NVML_SUCCESS If the query is successful + * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized + * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a pointer to struct is NULL + * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature + * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported + * - \ref NVML_ERROR_UNKNOWN On any unexpected error + */ +nvmlReturn_t DECLDIR nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(nvmlDevice_t device, + nvmlWorkloadPowerProfileRequestedProfiles_t *requestedProfiles); +/** @} */ // @defgroup + +/***************************************************************************************************/ +/** @defgroup nvmlPowerSmoothing Power Smoothing Information + * @{ + */ +/***************************************************************************************************/ +#define NVML_POWER_SMOOTHING_IDX_FROM_FIELD_VAL(field_val) \ + (field_val - NVML_FI_PWR_SMOOTHING_ENABLED) + +#define NVML_POWER_SMOOTHING_MAX_NUM_PROFILES 5 +#define NVML_POWER_SMOOTHING_NUM_PROFILE_PARAMS 4 +#define NVML_POWER_SMOOTHING_ADMIN_OVERRIDE_NOT_SET 0xFFFFFFFFU +#define NVML_POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR 0 +#define NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE 1 +#define NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE 2 +#define NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS 3 + +/* + * Power Smoothing Structure for Profile information + */ +typedef struct +{ + unsigned int version; //!< the API version number + + unsigned int profileId; //!< The requested profile ID + unsigned int paramId; //!< The requested paramater ID + double value; //!< The requested value for the given parameter +} nvmlPowerSmoothingProfile_v1_t; +typedef nvmlPowerSmoothingProfile_v1_t nvmlPowerSmoothingProfile_t; //!< Current version for the power smoothing profile structure +#define nvmlPowerSmoothingProfile_v1 NVML_STRUCT_VERSION(PowerSmoothingProfile, 1) + +/* + * Power Smoothing Structure for Feature Enablement + */ +typedef struct +{ + unsigned int version; //!< the API version number + nvmlEnableState_t state; //!< 0/Disabled or 1/Enabled +} nvmlPowerSmoothingState_v1_t; +typedef nvmlPowerSmoothingState_v1_t nvmlPowerSmoothingState_t; //!< Current version for the power smoothing state structure +#define nvmlPowerSmoothingState_v1 NVML_STRUCT_VERSION(PowerSmoothingState, 1) + +/** + * Activiate a specific preset profile for datacenter power smoothing + * The API only sets the active preset profile based on the input profileId, + * and ignores the other parameters of the structure. + * + * @param device The identifier of the target device + * @param profile Reference to \ref nvmlPowerSmoothingProfile_t. + * Note that only \a profile->profileId is used and + * the rest of the structure is ignored. + * + * @return + * - \ref NVML_SUCCESS if the Desired Profile was successfully set + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or structure was NULL + * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change the profile number + * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device + * + **/ +nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingActivatePresetProfile(nvmlDevice_t device, + nvmlPowerSmoothingProfile_t *profile); + +/** + * Update the value of a specific profile parameter contained within \ref nvmlPowerSmoothingProfile_t + * + * NVML_POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR expects a value as a percentage from 00.00-100.00% + * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE expects a value in W/s + * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE expects a value in W/s + * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS expects a value in ms + * + * @param device The identifier of the target device + * @param profile Reference to \ref nvmlPowerSmoothingProfile_t struct + * + * @return + * - \ref NVML_SUCCESS if the Active Profile was successfully set + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or profile parameter/value was invalid + * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change any profile parameters + * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the structure version is not supported + * + **/ +nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingUpdatePresetProfileParam(nvmlDevice_t device, + nvmlPowerSmoothingProfile_t *profile); +/** + * Enable or disable the Power Smoothing Feature + * See \ref nvmlEnableState_t for details on allowed states + * + * @param device The identifier of the target device + * @param state Reference to \ref nvmlPowerSmoothingState_t + * + * @return + * - \ref NVML_SUCCESS if the feature state was successfully set + * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or state is NULL + * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change feature state + * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device + * + **/ +nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingSetState(nvmlDevice_t device, + nvmlPowerSmoothingState_t *state); +/** @} */ // @defgroup + /** * NVML API versioning support */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/src/version.mk new/nvidia-settings-570.86.16/src/version.mk --- old/nvidia-settings-565.77/src/version.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/src/version.mk 2025-01-24 23:03:57.000000000 +0100 @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 565.77 +NVIDIA_VERSION = 570.86.16 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/utils.mk new/nvidia-settings-570.86.16/utils.mk --- old/nvidia-settings-565.77/utils.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/utils.mk 2025-01-24 23:03:57.000000000 +0100 @@ -541,6 +541,8 @@ ifeq ($(DEBUG),1) NVIDSTRING_BUILD_TYPE_STRING = Debug Build +else ifeq ($(DEVELOP),1) + NVIDSTRING_BUILD_TYPE_STRING = Develop Build else NVIDSTRING_BUILD_TYPE_STRING = Release Build endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nvidia-settings-565.77/version.mk new/nvidia-settings-570.86.16/version.mk --- old/nvidia-settings-565.77/version.mk 2024-11-28 01:00:40.000000000 +0100 +++ new/nvidia-settings-570.86.16/version.mk 2025-01-24 23:03:57.000000000 +0100 @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 565.77 +NVIDIA_VERSION = 570.86.16 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))