v1/metrics.proto#
The Metrics API contains metrics & telemetry data queries & messages.
Services#
MetricsManagementService#
MetricsManagementService is responsible for retrieving current policy state, power usage, and other telemetry data from the system.
Currently, all metrics are retrieved via Redfish. Please see the supplemental Metrics API documentation for additional information regarding challenges & limitations of this service.
For dpsctl usage for the MetricsManagementService, see the dpsctl metrics CLI guide.
GPUMetricsQuery#
rpc GPUMetricsQuery(GPUMetricsQueryRequest) returns GPUMetricsQueryResponse
GPUMetricsQuery is used to query GPU power usage metrics from a list of node-GPU pairs.
MetricsQuery#
rpc MetricsQuery(MetricsQueryRequest) returns MetricsQueryResponse
MetricsQuery is used to retrieve standardized GPU, CPU, and memory usage metrics from a list of requested nodes.
Messages#
GPUMetricsQueryRequest#
GPUMetricsQueryRequest is used to query GPU power usage metrics from a given list of node-GPU pairs.
Each pair must specify the node name & GPU ID.
If you are unsure of the GPU IDs available on the node,
you may retrieve the number of available GPUs using the MetricsQuery API.
The available number of GPUs is listed under the num_gpus property, with IDs starting
at zero and ranging to num_gpus - 1.
Example:
{
"gpus": [
{
"node": "viking592",
"gpu": 0
},
{
"node": "viking592",
"gpu": 1
},
{
"node": "viking592",
"gpu": 2
},
{
"node": "viking593",
"gpu": 0
}
]
}
Field |
Type |
Description |
|---|---|---|
gpus |
repeated |
List of node-GPU pairs to query. Must contain at least one item. |
GPUMetricsQueryRequest.GpuMetricsRequest#
Field |
Type |
Description |
|---|---|---|
node |
|
Name of the node entity within the configured Topology. Must not be empty. |
gpu |
|
The GPU ID on the node. IDs typically range from 0 to 7 |
GPUMetricsQueryResponse#
{
"metrics:" [
{
"node": "viking592",
"gpu": 0,
"usage": 700.0
},
{
"node": "viking592",
"gpu": 1,
"usage": 698.2
},
{
"node": "viking592",
"gpu": 2,
"usage": 700.0
},
{
"node": "viking593",
"gpu": 0,
"usage": 374.5
},
]
}
Field |
Type |
Description |
|---|---|---|
metrics |
repeated |
A list of node-GPU pairs with the corresponding GPU power usage |
GPUMetricsQueryResponse.GpuMetrics#
Field |
Type |
Description |
|---|---|---|
node |
|
Name of the node entity |
gpu |
|
GPU ID |
usage |
|
Power usage (in watts) |
oneof _gpu_uuid.gpu_uuid |
optional |
Hardware-backed Redfish Processor UUID. |
MetricsQueryRequest#
MetricsQueryRequest is used to query standardized usage metrics from the requested list of nodes.
Example:
{
"nodes": [
"node001",
"node002",
"node003",
]
}
Field |
Type |
Description |
|---|---|---|
nodes |
repeated |
nodes is the list of nodes to retrieve metrics from. Each node name must not be empty. |
effective |
|
Read power-limit fields from BMC EnvironmentMetrics. |
MetricsQueryResponse#
MetricsQueryResponse contains standardized usage metrics for GPU, CPU, and memory from the requested nodes.
Field |
Type |
Description |
|---|---|---|
nodes |
repeated |
List of node metrics responses, one for each requested node |
NodeMetricsResponse#
NodeMetricsResponse contains aggregated metrics for all components on a single node
Field |
Type |
Description |
|---|---|---|
name |
|
Name of the node |
num_gpus |
|
Number of GPUs present on the node |
num_cpus |
|
Number of CPUs present on the node |
num_memory_units |
|
Number of memory units (DIMMs) present on the node |
power_usage |
|
none |
gpus |
repeated |
List of GPU usage metrics for each GPU on the node |
cpus |
repeated |
List of CPU usage metrics for each CPU on the node |
memory |
repeated |
List of memory usage metrics for each memory unit on the node |
NodeMetricsResponse.ComponentUsage#
ComponentUsage contains power and thermal metrics for a single component (GPU, CPU, or memory). Where not available, metrics will be zero.
Field |
Type |
Description |
|---|---|---|
id |
|
Unique identifier for the component on the node (e.g., GPU ID typically 0-based) |
power_usage |
|
Current power consumption in watts |
energy_usage |
|
Cumulative energy consumption since last reset |
energy_usage_unit |
|
Unit for energy consumption (e.g., “Joules”) |
set_limit |
|
Currently set power limit in watts |
max_limit |
|
Maximum allowed power limit in watts |
min_limit |
|
Minimum allowed power limit in watts |
temperature_celsius |
|
Current temperature in Celsius |
requested_oneshot_watts |
|
Last oneshot OOB power-limit request observed from the BMC. |
requested_persistent_watts |
|
Last persistent OOB power-limit request observed from the BMC. |
oneof _power_limit_persistency.power_limit_persistency |
optional |
Persistency flag for the latest OOB power-limit request. |
oneof _gpu_uuid.gpu_uuid |
optional |
Hardware-backed Redfish Processor UUID. Set only for GPU components. |
Scalar Value Types#
.proto Type |
Notes |
C++ Type |
Java Type |
Python Type |
|---|---|---|---|---|
double |
double |
double |
float |
|
float |
float |
float |
float |
|
int32 |
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. |
int32 |
int |
int |
int64 |
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. |
int64 |
long |
int/long |
uint32 |
Uses variable-length encoding. |
uint32 |
int |
int/long |
uint64 |
Uses variable-length encoding. |
uint64 |
long |
int/long |
sint32 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. |
int32 |
int |
int |
sint64 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. |
int64 |
long |
int/long |
fixed32 |
Always four bytes. More efficient than uint32 if values are often greater than 2^28. |
uint32 |
int |
int |
fixed64 |
Always eight bytes. More efficient than uint64 if values are often greater than 2^56. |
uint64 |
long |
int/long |
sfixed32 |
Always four bytes. |
int32 |
int |
int |
sfixed64 |
Always eight bytes. |
int64 |
long |
int/long |
bool |
bool |
boolean |
boolean |
|
string |
A string must always contain UTF-8 encoded or 7-bit ASCII text. |
string |
String |
str/unicode |
bytes |
May contain any arbitrary sequence of bytes. |
string |
ByteString |
str |