mirror of
https://github.com/ilya-zlobintsev/LACT.git
synced 2025-02-25 18:55:26 -06:00
show power levels
This commit is contained in:
33
Cargo.lock
generated
33
Cargo.lock
generated
@@ -16,9 +16,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.19"
|
||||
version = "0.7.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
|
||||
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
@@ -38,9 +38,9 @@ checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
|
||||
|
||||
[[package]]
|
||||
name = "ash"
|
||||
version = "0.37.0+1.3.209"
|
||||
version = "0.37.1+1.3.235"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "006ca68e0f2b03f22d6fa9f2860f85aed430d257fec20f8879b2145e7c7ae1a6"
|
||||
checksum = "911015c962d56e2e4052f40182ca5462ba60a3d2ff04e827c365a0ab3d65726d"
|
||||
dependencies = [
|
||||
"libloading",
|
||||
]
|
||||
@@ -112,9 +112,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.2.1"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
|
||||
checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
|
||||
|
||||
[[package]]
|
||||
name = "cairo-rs"
|
||||
@@ -186,9 +186,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-queue"
|
||||
version = "0.3.6"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7"
|
||||
checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
@@ -196,9 +196,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.12"
|
||||
version = "0.8.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
|
||||
checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
@@ -558,6 +558,7 @@ dependencies = [
|
||||
"amdgpu-sysfs",
|
||||
"anyhow",
|
||||
"bincode",
|
||||
"indexmap",
|
||||
"lact-schema",
|
||||
"nix",
|
||||
"pciid-parser",
|
||||
@@ -786,9 +787,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pest"
|
||||
version = "2.4.1"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a528564cc62c19a7acac4d81e01f39e53e25e17b934878f4c6d25cc2836e62f8"
|
||||
checksum = "5f400b0f7905bf702f9f3dc3df5a121b16c54e9e8012c082905fdf09a931861a"
|
||||
dependencies = [
|
||||
"thiserror",
|
||||
"ucd-trie",
|
||||
@@ -961,9 +962,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.88"
|
||||
version = "1.0.89"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e8b3801309262e8184d9687fb697586833e939767aea0dda89f5a8e650e8bd7"
|
||||
checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
@@ -1227,7 +1228,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "vulkano"
|
||||
version = "0.32.0"
|
||||
source = "git+https://github.com/vulkano-rs/vulkano#89e1c56db4c94752e9444483ebd1c12bdb135128"
|
||||
source = "git+https://github.com/vulkano-rs/vulkano#ebcea02c1e9fd4db62d6dd52c058544351140e36"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"ash",
|
||||
@@ -1237,9 +1238,9 @@ dependencies = [
|
||||
"half",
|
||||
"heck",
|
||||
"indexmap",
|
||||
"lazy_static",
|
||||
"libloading",
|
||||
"objc",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
||||
@@ -27,3 +27,4 @@ tracing = "0.1"
|
||||
tracing-subscriber = "0.3"
|
||||
vulkano = { git = "https://github.com/vulkano-rs/vulkano" }
|
||||
lact-schema = { path = "../lact-schema" }
|
||||
indexmap = { version = "1.9", features = ["serde"] }
|
||||
|
||||
@@ -5,10 +5,11 @@ use super::vulkan::get_vulkan_info;
|
||||
use crate::fork::run_forked;
|
||||
use amdgpu_sysfs::{
|
||||
error::Error,
|
||||
gpu_handle::GpuHandle,
|
||||
gpu_handle::{GpuHandle, PowerLevels, PowerStateKind},
|
||||
hw_mon::{FanControlMethod, HwMon},
|
||||
};
|
||||
use anyhow::{anyhow, Context};
|
||||
use indexmap::IndexMap;
|
||||
use lact_schema::{
|
||||
ClocksInfo, ClockspeedStats, DeviceInfo, DeviceStats, FanStats, GpuPciInfo, LinkInfo, PciInfo,
|
||||
PowerStats, VoltageStats, VramStats,
|
||||
@@ -25,6 +26,13 @@ use tracing::{debug, error, info, trace, warn};
|
||||
|
||||
type FanControlHandle = (Arc<Notify>, JoinHandle<()>, FanCurve);
|
||||
|
||||
const POWER_LEVEL_TYPES: [PowerStateKind; 4] = [
|
||||
PowerStateKind::CoreClock,
|
||||
PowerStateKind::MemoryClock,
|
||||
PowerStateKind::PcieSpeed,
|
||||
PowerStateKind::SOCClock,
|
||||
];
|
||||
|
||||
pub struct GpuController {
|
||||
pub handle: GpuHandle,
|
||||
pub pci_info: Option<GpuPciInfo>,
|
||||
@@ -109,7 +117,7 @@ impl GpuController {
|
||||
let driver = self.handle.get_driver();
|
||||
let vbios_version = self.handle.get_vbios_version().ok();
|
||||
let link_info = self.get_link_info();
|
||||
let clocks_table = self.handle.get_power_table().ok();
|
||||
let clocks_table = self.handle.get_clocks_table().ok();
|
||||
let clocks_info = clocks_table
|
||||
.as_ref()
|
||||
.map_or_else(Default::default, ClocksInfo::from);
|
||||
@@ -172,6 +180,7 @@ impl GpuController {
|
||||
temps: self.hw_mon_map(HwMon::get_temps).unwrap_or_default(),
|
||||
busy_percent: self.handle.get_busy_percent().ok(),
|
||||
performance_level: self.handle.get_power_force_performance_level().ok(),
|
||||
power_levels: self.read_power_levels(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -268,4 +277,16 @@ impl GpuController {
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn read_power_levels(&self) -> IndexMap<PowerStateKind, PowerLevels> {
|
||||
let mut map = IndexMap::with_capacity(POWER_LEVEL_TYPES.len());
|
||||
|
||||
for kind in POWER_LEVEL_TYPES {
|
||||
if let Ok(levels) = self.handle.get_power_levels(kind) {
|
||||
map.insert(kind, levels);
|
||||
}
|
||||
}
|
||||
|
||||
map
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ edition = "2021"
|
||||
[dependencies]
|
||||
amdgpu-sysfs = { path = "../../amdgpu-sysfs-rs", features = ["serde"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
indexmap = { version = "1.9", features = ["serde"] }
|
||||
indexmap = { version = "*", features = ["serde"] }
|
||||
|
||||
[dev-dependencies]
|
||||
serde_json = "1.0"
|
||||
|
||||
@@ -4,6 +4,7 @@ mod response;
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
use amdgpu_sysfs::gpu_handle::{PowerLevels, PowerStateKind};
|
||||
pub use request::Request;
|
||||
pub use response::Response;
|
||||
|
||||
@@ -111,6 +112,7 @@ pub struct DeviceStats {
|
||||
pub temps: HashMap<String, Temperature>,
|
||||
pub busy_percent: Option<u8>,
|
||||
pub performance_level: Option<PerformanceLevel>,
|
||||
pub power_levels: IndexMap<PowerStateKind, PowerLevels>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
|
||||
Reference in New Issue
Block a user