Class LinuxGpuStats
- All Implemented Interfaces:
AutoCloseable, GpuStats
GpuStats session. Dynamic metrics are sourced in priority order: NVML (NVIDIA GPUs), then sysfs DRM
driver files under /sys/class/drm/cardN/device/. The hwmon path and driver-specific sysfs paths are resolved
once at construction time.
GPU ticks are not available on Linux and always return (0L, 0L). Shared memory is not available and always
returns -1.
Subclasses provide the NVML integration via JNA or FFM by implementing the nvml* methods.
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedLinuxGpuStats(String drmDevicePath, String driverName, String pciBusId, String cardName) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Releases any native resources held by this session.protected StringResolves the NVML device identifier, caching the result.protected StringReturns the card name.longReturns the current GPU core clock speed.doubleReturns the GPU fan speed as a percentage of maximum.Returns a snapshot of cumulative GPU active and idle ticks in opaque, platform-native units.doubleReturns the instantaneous GPU core utilization as a percentage, computed internally as a delta between the current sample and the previous one recorded by this session.longReturns the current GPU memory clock speed.protected StringReturns the PCI bus ID.doubleReturns the GPU power consumption.longReturns the amount of shared system memory currently used by this GPU.doubleReturns the GPU temperature.longReturns the amount of dedicated VRAM currently in use.booleanisClosed()ReturnstrueifGpuStats.close()has been called on this session.protected abstract StringnvmlFindDevice(String busId) Finds the NVML device by PCI bus ID.protected abstract StringnvmlFindDeviceByName(String name) Finds the NVML device by GPU name.protected abstract longnvmlGetCoreClockMhz(String deviceId) Returns GPU core clock via NVML, or -1.protected abstract doublenvmlGetFanSpeedPercent(String deviceId) Returns GPU fan speed via NVML, or -1.protected abstract longnvmlGetMemoryClockMhz(String deviceId) Returns GPU memory clock via NVML, or -1.protected abstract doublenvmlGetPowerDraw(String deviceId) Returns GPU power draw via NVML, or -1.protected abstract doublenvmlGetTemperature(String deviceId) Returns GPU temperature via NVML, or -1.protected abstract longnvmlGetVramUsed(String deviceId) Returns VRAM used in bytes via NVML, or -1.protected abstract booleanReturns whether NVML is available.
-
Constructor Details
-
LinuxGpuStats
-
-
Method Details
-
getPciBusId
-
getCardName
-
nvmlIsAvailable
protected abstract boolean nvmlIsAvailable()Returns whether NVML is available.- Returns:
- true if NVML can be used
-
nvmlFindDevice
-
nvmlFindDeviceByName
-
nvmlGetVramUsed
Returns VRAM used in bytes via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- bytes used or -1
-
nvmlGetTemperature
Returns GPU temperature via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- temperature in °C or -1
-
nvmlGetPowerDraw
Returns GPU power draw via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- power in watts or -1
-
nvmlGetCoreClockMhz
Returns GPU core clock via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- core clock in MHz or -1
-
nvmlGetMemoryClockMhz
Returns GPU memory clock via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- memory clock in MHz or -1
-
nvmlGetFanSpeedPercent
Returns GPU fan speed via NVML, or -1.- Parameters:
deviceId- NVML device identifier- Returns:
- fan speed percentage or -1
-
findNvmlDevice
Resolves the NVML device identifier, caching the result.- Returns:
- device identifier, or
nullif unavailable
-
close
public void close()Description copied from interface:GpuStatsReleases any native resources held by this session. Safe to call multiple times; subsequent calls after the first are no-ops. Does not throw checked exceptions.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceGpuStats
-
isClosed
public boolean isClosed()Description copied from interface:GpuStatsReturnstrueifGpuStats.close()has been called on this session. Does not throw. -
getGpuTicks
Description copied from interface:GpuStatsReturns a snapshot of cumulative GPU active and idle ticks in opaque, platform-native units. The counters are monotonically increasing; diff two snapshots to compute utilization:long dActive = curr.getActiveTicks() - prev.getActiveTicks(); long dIdle = curr.getIdleTicks() - prev.getIdleTicks(); long dTotal = dActive + dIdle; double utilPct = dTotal > 0 ? dActive * 100.0 / dTotal : -1d;Both counters are
0on platforms where tick-level GPU metrics are not available (seeGpuTicksfor the sentinel semantics). UseGpuStats.getGpuUtilization()as an alternative.- Specified by:
getGpuTicksin interfaceGpuStats- Returns:
- a
GpuTickssnapshot; never null
-
getGpuUtilization
public double getGpuUtilization()Description copied from interface:GpuStatsReturns the instantaneous GPU core utilization as a percentage, computed internally as a delta between the current sample and the previous one recorded by this session.Behaviour on the first call is implementation-dependent. Backends that derive utilization from an energy or residency counter record an initial baseline on the first call and return
-1; subsequent calls return the utilization computed over the elapsed interval. Backends that read an instantaneous hardware register may return a valid value immediately. To ensure the first polling iteration returns a valid value on delta-based backends, call this method once as a priming step before the polling loop begins:stats.getGpuUtilization(); // prime — may return -1 on delta-based backends Thread.sleep(intervalMs); double util = stats.getGpuUtilization(); // valid on all backends- Specified by:
getGpuUtilizationin interfaceGpuStats- Returns:
- utilization in the range 0.0 to 100.0, or -1 if not available or not yet primed
-
getVramUsed
public long getVramUsed()Description copied from interface:GpuStatsReturns the amount of dedicated VRAM currently in use.- Specified by:
getVramUsedin interfaceGpuStats- Returns:
- bytes of VRAM in use, or -1 if unavailable
-
getTemperature
public double getTemperature()Description copied from interface:GpuStatsReturns the GPU temperature.- Specified by:
getTemperaturein interfaceGpuStats- Returns:
- temperature in degrees Celsius, or -1 if unavailable
-
getPowerDraw
public double getPowerDraw()Description copied from interface:GpuStatsReturns the GPU power consumption. On backends that derive power from an energy counter (e.g. macOS Apple Silicon via IOReport), this is computed as a delta between the current sample and the previous one; the first call records the initial baseline and returns-1. On backends that read an instantaneous hardware sensor (e.g. Windows via NVML/ADL/LHM), a valid value may be returned immediately.To ensure the first polling iteration returns a valid value on delta-based backends, call this method once as a priming step before the polling loop begins:
stats.getPowerDraw(); // prime — may return -1 on delta-based backends Thread.sleep(intervalMs); double watts = stats.getPowerDraw(); // valid on all backends- Specified by:
getPowerDrawin interfaceGpuStats- Returns:
- power draw in watts, or -1 if unavailable or not yet primed
-
getCoreClockMhz
public long getCoreClockMhz()Description copied from interface:GpuStatsReturns the current GPU core clock speed.- Specified by:
getCoreClockMhzin interfaceGpuStats- Returns:
- core clock in MHz, or -1 if unavailable
-
getMemoryClockMhz
public long getMemoryClockMhz()Description copied from interface:GpuStatsReturns the current GPU memory clock speed.- Specified by:
getMemoryClockMhzin interfaceGpuStats- Returns:
- memory clock in MHz, or -1 if unavailable
-
getFanSpeedPercent
public double getFanSpeedPercent()Description copied from interface:GpuStatsReturns the GPU fan speed as a percentage of maximum.- Specified by:
getFanSpeedPercentin interfaceGpuStats- Returns:
- fan speed in the range 0.0 to 100.0, or -1 if unavailable
-