back to the past
This commit is contained in:
@@ -12,20 +12,21 @@ pub struct GpuInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_gpu_info() -> Result<GpuInfo, Box<dyn Error>> {
|
pub async fn get_gpu_info() -> Result<GpuInfo, Box<dyn Error>> {
|
||||||
let nvml = Nvml::init()?;
|
//let nvml = Nvml::init()?;
|
||||||
let device = nvml.device_by_index(0)?;
|
//let device = nvml.device_by_index(0)?;
|
||||||
|
|
||||||
let (used, total) = get_gpu_vram_usage(&device)?;
|
//let (used, total) = get_gpu_vram_usage(&device)?;
|
||||||
|
let (gpu_temp, gpu_load, vram_used, vram_total) = get_gpu_metrics()?;
|
||||||
let gpu_name = detect_gpu_name();
|
let gpu_name = detect_gpu_name();
|
||||||
Ok(GpuInfo {
|
Ok(GpuInfo {
|
||||||
name: Some(gpu_name),
|
name: Some(gpu_name),
|
||||||
current_load: get_gpu_load(&device).ok(),
|
current_load: Some(gpu_load),
|
||||||
current_temp: get_gpu_temp(&device).ok(),
|
current_temp: Some(gpu_temp),
|
||||||
vram_total: Some(total),
|
vram_total: Some(vram_total),
|
||||||
vram_used: Some(used),
|
vram_used: Some(vram_used),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
pub fn get_gpu_load(device: &nvml_wrapper::Device) -> Result<f64, Box<dyn Error>> {
|
pub fn get_gpu_load(device: &nvml_wrapper::Device) -> Result<f64, Box<dyn Error>> {
|
||||||
Ok(device.utilization_rates().unwrap().gpu as f64)
|
Ok(device.utilization_rates().unwrap().gpu as f64)
|
||||||
}
|
}
|
||||||
@@ -39,6 +40,33 @@ pub fn get_gpu_temp(device: &nvml_wrapper::Device) -> Result<f64, Box<dyn Error>
|
|||||||
pub fn get_gpu_vram_usage(device: &nvml_wrapper::Device) -> Result<(f64, f64), Box<dyn Error>> {
|
pub fn get_gpu_vram_usage(device: &nvml_wrapper::Device) -> Result<(f64, f64), Box<dyn Error>> {
|
||||||
let mem_info = device.memory_info().unwrap();
|
let mem_info = device.memory_info().unwrap();
|
||||||
Ok((mem_info.used as f64, mem_info.total as f64))
|
Ok((mem_info.used as f64, mem_info.total as f64))
|
||||||
|
}*/
|
||||||
|
|
||||||
|
pub fn get_gpu_metrics() -> Result<(f64, f64, f64, f64), Box<dyn Error>> {
|
||||||
|
let nvml = Nvml::init()?;
|
||||||
|
let (gpu_temp, gpu_load, vram_used, vram_total) = if let nvml = nvml {
|
||||||
|
let device = nvml.device_by_index(0).ok().unwrap();
|
||||||
|
let temp = device
|
||||||
|
.temperature(nvml_wrapper::enum_wrappers::device::TemperatureSensor::Gpu)
|
||||||
|
.unwrap_or(0) as f64;
|
||||||
|
let load = device
|
||||||
|
.utilization_rates()
|
||||||
|
.map(|u| u.gpu as f64)
|
||||||
|
.unwrap_or(0.0);
|
||||||
|
let mem = device.memory_info().ok();
|
||||||
|
let used = mem.clone().map(|m| (m.used as f64)).unwrap_or(0.0); // B
|
||||||
|
let total = mem.map(|m| (m.total as f64)).unwrap_or(0.0); // B
|
||||||
|
(temp, load, used, total)
|
||||||
|
} else {
|
||||||
|
return Err(anyhow::anyhow!("Failed to initialize NVML").into());
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok((
|
||||||
|
gpu_temp as f64,
|
||||||
|
gpu_load as f64,
|
||||||
|
vram_used as f64,
|
||||||
|
vram_total as f64,
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn detect_gpu_name() -> String {
|
fn detect_gpu_name() -> String {
|
||||||
|
Reference in New Issue
Block a user