gpu_metrics/
gpu_metrics.rs1use libdrm_amdgpu_sys::LibDrmAmdgpu;
2use libdrm_amdgpu_sys::AMDGPU::{GPU_INFO, MetricsInfo};
3use std::fs::File;
4
5fn main() {
6 let libdrm_amdgpu = LibDrmAmdgpu::new().unwrap();
7 let device_path = std::env::var("AMDGPU_PATH").unwrap_or("/dev/dri/renderD128".to_string());
8 let (amdgpu_dev, _, _) = {
9 use std::os::fd::IntoRawFd;
10
11 let f = File::open(device_path).unwrap();
12
13 libdrm_amdgpu.init_device_handle(f.into_raw_fd()).unwrap()
14 };
15
16 let path = amdgpu_dev.get_sysfs_path().unwrap();
17
18 match amdgpu_dev.get_gpu_metrics_from_sysfs_path(&path) { Ok(metrics) => {
19 println!("{:#?}", metrics);
20
21 if let Some(socket_power) = metrics.get_average_socket_power() {
22 println!("Average Socket Power: {socket_power} W");
23 }
24
25 if let Some(thr) = metrics.get_throttle_status_info() {
26 println!("Throttle Status: {:?}", thr.get_all_throttler());
27 }
28 } _ => {
29 let ext_info = amdgpu_dev.device_info().unwrap();
30 let asic_name = ext_info.get_asic_name();
31
32 println!("{asic_name} dose not support GPU metrics.");
33 println!("Vega12 (dGPU) or later, Renoir (APU) or later supports GPU metrics.")
34 }}
35}