Skip to content

Semantic Conventions

Metric names follow the OpenTelemetry hardware GPU semantic conventions where specified. Shield360 extension metrics are listed explicitly below.

InstrumentTypeUnitKey attributesSourceNotes
hw.gpu.utilizationGauge1hw.id, hw.gpu.taskNVML / AMD / Intel
hw.gpu.memory.utilizationGauge1hw.idvendor (usage/limit)
hw.gpu.memory.controller.utilizationGauge1hw.idvendor / DCGM Preferextension
hw.gpu.memory.limitUpDownCounterByhw.idvendor
hw.gpu.memory.usageUpDownCounterByhw.idvendor
hw.gpu.memory.freeUpDownCounterByhw.idvendor
hw.powerGaugeWhw.idvendor
hw.power.limitGaugeWhw.idvendor
hw.energyCounterJhw.idvendor
hw.temperatureGaugeCelhw.id, hw.sensor_locationvendor
hw.fan.speedGaugerpmhw.idvendor
hw.fan.speed_ratioGauge1hw.idvendor (NVIDIA %)
hw.gpu.speedGaugeHzhw.id, hw.gpu.clock_domainvendorgraphics / sm / memory
hw.gpu.ioCounterByhw.id, network.io.directionvendor / DCGM
hw.gpu.interconnect.ioCounterByhw.id, hw.gpu.interconnect.typevendor / DCGM
hw.statusUpDownCounter1hw.id, state attrsvendor
hw.errorsCounter{error}error.type, hw.type=gpuvendor
hw.gpu.allocatedGauge1hw.idderived
hw.gpu.idleGauge1hw.idderived
InstrumentTypeUnitKey attributesSource
process.gpu.memory.usageUpDownCounterByprocess.pid, hw.id, k8s.*NVML / DRM fdinfo
process.gpu.utilizationGauge1process.pid, hw.idNVML / DRM fdinfo
process.uptimeGaugesprocess.pid/proc enrichment

DCGM extension (gpu.measurement.source=dcgm)

Section titled “DCGM extension (gpu.measurement.source=dcgm)”

DCP-only series always emit when DCGM is enabled. Overlapping series (hw.gpu.io, interconnect, hw.power, hw.gpu.utilization, hw.gpu.memory.controller.utilization, SM hw.gpu.speed) emit only when OTEL_GPU_DCGM_PREFER=true and the sample is non-blank; the vendor (NVML) path then suppresses the same instruments so there is a single producer. Blank Prefer samples re-enable NVML until the next healthy DCGM scrape. Spec hw.gpu.memory.utilization (usage/limit) always comes from the vendor path.

InstrumentTypeUnitKey attributesNotes
hw.gpu.engine.utilizationGauge1hw.gpu.engineDCGM eng util
hw.gpu.sm.utilizationGauge1SM active (DCP)
hw.gpu.sm.occupancyGauge1SM occupancy (DCP)
hw.gpu.pipe.utilizationGauge1hw.gpu.pipe=tensor|fp16|fp32|fp64DCP pipe
hw.gpu.memory.bandwidth.utilizationGauge1DRAM util
hw.gpu.io / hw.gpu.interconnect.ioCounterByPrefer onlyRate-integrated int64
hw.gpu.speedGaugeHzPrefer only; clock_domain=graphicsField 100 (keeps NVML graphics series identity)
hw.gpu.idleGauge1Prefer onlyDerived from Prefer util
hw.power / hw.gpu.utilization / hw.gpu.memory.controller.utilizationGaugePrefer onlyFields 155 / 203 / 204
shield360.collector.gpu.dcgm.sample_validUpDownCounter1hw.id0 on blank sample

AMD RDC extension (gpu.measurement.source=rdc)

Section titled “AMD RDC extension (gpu.measurement.source=rdc)”
InstrumentTypeUnitKey attributesNotes
hw.gpu.sm.utilizationGauge1RDC_FI_PROF_SM_ACTIVE
hw.gpu.sm.occupancyGauge1hw.parent (partitions)Soft-fail when librdc missing
hw.gpu.pipe.utilizationGauge1hw.gpu.pipe=fp16|fp32|fp64EVAL_FLOPS percent fields
hw.gpu.simd.utilizationGauge1RDC_FI_PROF_SIMD_UTILIZATION
InstrumentTypeUnitFamily
gpu.kernel.launch.callsCounter{call}activity
gpu.kernel.grid.size / block.sizeHistogram{thread}activity
gpu.kernel.shared_memoryHistogramByactivity
gpu.kernel.durationHistogramslaunch→sync model; cardinality-capped cuda.kernel.name
gpu.graph.launch.callsCounter{call}graph replay invocations, not kernels inside the replay
gpu.memory.allocationsCounterByactivity
gpu.memory.copiesHistogramByactivity
process.gpu.core.usage / process.gpu.estimated.sm_activeGauge{cores} / 1occupancy model (gpu.measurement.source=ebpf_model)
hw.gpu.core.limit / hw.gpu.estimated.sm_activeGauge{cores} / 1not DCGM hw.gpu.sm.*
InstrumentTypeUnitNotes
shield360.collector.gpu.scrape.errorsCounter{error}Optional backends (DCGM/RDC)
shield360.collector.gpu.dcgm.sample_validUpDownCounter1Per-GPU blank-sample health
shield360.collector.profile.requestsCounter{request}Control plane profiling

Join continuous GPU, host, and on-demand profile data with these keys. Prefer (OTEL_GPU_DCGM_PREFER=true) keeps a single producer for overlapping NVML/DCGM series; if a Prefer sample is blank, NVML fills until the next healthy DCGM sample.

JoinAttributes
GPU across NVML / DCGM / RDC / eBPFhw.id (UUID) + gpu.index + gpu.pci_address + gpu.measurement.source
Host NIC vs (when NIC off) system networknetwork.interface.name (= hw.id on hw.network.*)
TPU vs GPUhw.type + namespaced hw.id (tpu:<accelerator_id>) + hw.tpu.accelerator_id
Soft util overlapNVML hw.gpu.utilization ≠ DCGM hw.gpu.sm.utilization ≠ eBPF hw.gpu.estimated.sm_active — different semantics; do not sum or equate
eBPF activity joingpu.measurement.source=ebpf (+ hw.id / hw.type when device known)
On-demand profilesControl API default 127.0.0.1:1919 (profile-fanout --port 1919)

hw.id, hw.name, hw.vendor, hw.type, gpu.index, gpu.pci_address, gpu.measurement.source, optional MIG attrs, and host/k8s/cloud resource attributes from identity detection. Partition samples may set hw.parent and hw.gpu.partition.