feat: use drm for getting the gpu device name when possible (#288)

This commit is contained in:
Ilya Zlobintsev 2024-03-16 10:42:49 +02:00 committed by GitHub
parent a8711802f0
commit e74155515d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 39 additions and 17 deletions

4
Cargo.lock generated
View File

@ -1392,9 +1392,9 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
[[package]]
name = "libdrm_amdgpu_sys"
version = "0.5.0"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f52800820eaea512331abeb04797f480eae5ed8967531aa37629aca797520b5"
checksum = "10ae56b30464d68a6d7b5383ace9f5981ba945cbf708c49a13cb8def83ace61d"
dependencies = [
"libc",
]

View File

@ -33,7 +33,7 @@ tokio = { version = "1.35.1", features = [
vulkano = { version = "0.34.1", default-features = false }
futures = { version = "0.3.30", default-features = false }
zbus = { version = "4.1.2", default-features = false, features = ["tokio"] }
libdrm_amdgpu_sys = { optional = true, version = "0.5.0" }
libdrm_amdgpu_sys = { optional = true, version = "0.6.0" }
tar = "0.4.40"
libflate = "2.0.0"
chrono = "0.4.31"

View File

@ -201,9 +201,10 @@ impl GpuController {
cpu_accessible_total: memory_info.cpu_accessible_vram.total_heap_size,
});
drm_handle
.and_then(|handle| handle.device_info().ok())
.map(|drm_info| DrmInfo {
match drm_handle {
Some(handle) => handle.device_info().ok().map(|drm_info| DrmInfo {
device_name: drm_info.find_device_name(),
pci_revision_id: Some(drm_info.pci_rev_id()),
family_name: drm_info.get_family_name().to_string(),
family_id: drm_info.family_id(),
asic_name: drm_info.get_asic_name().to_string(),
@ -216,7 +217,9 @@ impl GpuController {
l2_cache: drm_info.calc_l2_cache_size(),
l3_cache_mb: drm_info.calc_l3_cache_size_mb(),
memory_info: drm_memory_info,
})
}),
None => None,
}
}
#[cfg(not(feature = "libdrm_amdgpu_sys"))]

View File

@ -1,5 +1,5 @@
use gtk::glib::{self, object::ObjectExt, subclass::object::DerivedObjectProperties, Object};
use lact_client::schema::{DeviceInfo, DeviceStats};
use lact_client::schema::{DeviceInfo, DeviceStats, DrmInfo};
use std::fmt::Write;
glib::wrapper! {
@ -17,17 +17,34 @@ impl HardwareInfoSection {
self.reset();
if let Some(pci_info) = &info.pci_info {
let mut gpu_model = pci_info
.device_pci_info
.model
.as_deref()
let mut gpu_model = info
.drm_info
.as_ref()
.and_then(|drm| drm.device_name.as_deref())
.or_else(|| pci_info.device_pci_info.model.as_deref())
.unwrap_or("Unknown")
.to_owned();
match &info.drm_info {
Some(DrmInfo {
pci_revision_id: Some(pci_rev),
..
}) => {
let _ = write!(
gpu_model,
" (0x{}:0x{}:0x{pci_rev:X})",
pci_info.device_pci_info.vendor_id, pci_info.device_pci_info.model_id,
);
}
_ => {
let _ = write!(
gpu_model,
" (0x{}:0x{})",
pci_info.device_pci_info.vendor_id, pci_info.device_pci_info.model_id
);
}
}
self.set_gpu_model(gpu_model);
let mut card_manufacturer = pci_info

View File

@ -91,6 +91,8 @@ pub struct DeviceInfo<'a> {
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct DrmInfo {
pub device_name: Option<String>,
pub pci_revision_id: Option<u32>,
pub family_name: String,
#[serde(default)]
pub family_id: u32,