mirror of
https://github.com/ilya-zlobintsev/LACT.git
synced 2025-02-25 18:55:26 -06:00
fix: deduplicate throttle status bits
should help with behaviour described in https://github.com/ilya-zlobintsev/LACT/pull/402
This commit is contained in:
parent
2d00ce0ecb
commit
41f26c7f34
@ -20,11 +20,13 @@ use lact_schema::{
|
|||||||
ClocksInfo, ClockspeedStats, DeviceInfo, DeviceStats, DrmInfo, FanStats, GpuPciInfo, LinkInfo,
|
ClocksInfo, ClockspeedStats, DeviceInfo, DeviceStats, DrmInfo, FanStats, GpuPciInfo, LinkInfo,
|
||||||
PciInfo, PmfwInfo, PowerState, PowerStates, PowerStats, VoltageStats, VramStats,
|
PciInfo, PmfwInfo, PowerState, PowerStates, PowerStats, VoltageStats, VramStats,
|
||||||
};
|
};
|
||||||
|
use libdrm_amdgpu_sys::AMDGPU::ThrottlerBit;
|
||||||
use pciid_parser::Database;
|
use pciid_parser::Database;
|
||||||
use std::{
|
use std::{
|
||||||
borrow::Cow,
|
borrow::Cow,
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
cmp,
|
cmp,
|
||||||
|
collections::{HashMap, HashSet},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
rc::Rc,
|
rc::Rc,
|
||||||
time::Duration,
|
time::Duration,
|
||||||
@ -467,17 +469,27 @@ impl AmdGpuController {
|
|||||||
.and_then(|drm_handle| drm_handle.get_gpu_metrics().ok())
|
.and_then(|drm_handle| drm_handle.get_gpu_metrics().ok())
|
||||||
.and_then(|metrics| metrics.get_throttle_status_info())
|
.and_then(|metrics| metrics.get_throttle_status_info())
|
||||||
.map(|throttle| {
|
.map(|throttle| {
|
||||||
let mut result: BTreeMap<String, Vec<String>> = BTreeMap::new();
|
let mut grouped_bits: HashMap<ThrottlerType, HashSet<u8>> = HashMap::new();
|
||||||
|
|
||||||
for bit in throttle.get_all_throttler() {
|
for bit in throttle.get_all_throttler() {
|
||||||
let throttle_type = ThrottlerType::from(bit);
|
let throttle_type = ThrottlerType::from(bit);
|
||||||
result
|
grouped_bits
|
||||||
.entry(throttle_type.to_string())
|
.entry(throttle_type)
|
||||||
.or_default()
|
.or_default()
|
||||||
.push(bit.to_string());
|
.insert(bit as u8);
|
||||||
}
|
}
|
||||||
|
|
||||||
result
|
grouped_bits
|
||||||
|
.into_iter()
|
||||||
|
.map(|(throttle_type, bits)| {
|
||||||
|
let mut names: Vec<String> = bits
|
||||||
|
.into_iter()
|
||||||
|
.map(|bit| ThrottlerBit::from(bit).to_string())
|
||||||
|
.collect();
|
||||||
|
names.sort_unstable();
|
||||||
|
(throttle_type.to_string(), names)
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user