show power levels

This commit is contained in:
Ilya Zlobintsev
2022-11-26 11:32:11 +02:00
parent d411cf425c
commit b39ae49e55
5 changed files with 44 additions and 19 deletions

33
Cargo.lock generated
View File

@@ -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",

View File

@@ -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"] }

View File

@@ -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
}
}

View File

@@ -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"

View File

@@ -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)]