summaryrefslogtreecommitdiffstats
path: root/src/app/data_harvester/processes
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/data_harvester/processes')
-rw-r--r--src/app/data_harvester/processes/linux.rs26
-rw-r--r--src/app/data_harvester/processes/unix/process_ext.rs6
-rw-r--r--src/app/data_harvester/processes/windows.rs26
3 files changed, 57 insertions, 1 deletions
diff --git a/src/app/data_harvester/processes/linux.rs b/src/app/data_harvester/processes/linux.rs
index 8f50823b..0a1ed539 100644
--- a/src/app/data_harvester/processes/linux.rs
+++ b/src/app/data_harvester/processes/linux.rs
@@ -250,6 +250,12 @@ fn read_proc(
uid,
user,
time,
+ #[cfg(feature = "gpu")]
+ gpu_mem: 0,
+ #[cfg(feature = "gpu")]
+ gpu_mem_percent: 0.0,
+ #[cfg(feature = "gpu")]
+ gpu_util: 0,
},
new_process_times,
))
@@ -326,7 +332,8 @@ pub(crate) fn linux_process_data(
let pid = process.pid;
let prev_proc_details = pid_mapping.entry(pid).or_default();
- if let Ok((process_harvest, new_process_times)) = read_proc(
+ #[allow(unused_mut)]
+ if let Ok((mut process_harvest, new_process_times)) = read_proc(
prev_proc_details,
process,
cpu_usage,
@@ -336,6 +343,23 @@ pub(crate) fn linux_process_data(
total_memory,
user_table,
) {
+ #[cfg(feature = "gpu")]
+ if let Some(gpus) = &collector.gpu_pids {
+ gpus.iter().for_each(|gpu| {
+ // add mem/util for all gpus to pid
+ if let Some((mem, util)) = gpu.get(&(pid as u32)) {
+ process_harvest.gpu_mem += mem;
+ process_harvest.gpu_util += util;
+ }
+ });
+ if let Some(gpu_total_mem) = &collector.gpus_total_mem {
+ process_harvest.gpu_mem_percent = (process_harvest.gpu_mem as f64
+ / *gpu_total_mem as f64
+ * 100.0)
+ as f32;
+ }
+ }
+
prev_proc_details.cpu_time = new_process_times;
prev_proc_details.total_read_bytes = process_harvest.total_read_bytes;
prev_proc_details.total_write_bytes = process_harvest.total_write_bytes;
diff --git a/src/app/data_harvester/processes/unix/process_ext.rs b/src/app/data_harvester/processes/unix/process_ext.rs
index 999a893f..93ef3a94 100644
--- a/src/app/data_harvester/processes/unix/process_ext.rs
+++ b/src/app/data_harvester/processes/unix/process_ext.rs
@@ -97,6 +97,12 @@ pub(crate) trait UnixProcessExt {
})
.unwrap_or_else(|| "N/A".into()),
time: Duration::from_secs(process_val.run_time()),
+ #[cfg(feature = "gpu")]
+ gpu_mem: 0,
+ #[cfg(feature = "gpu")]
+ gpu_mem_percent: 0.0,
+ #[cfg(feature = "gpu")]
+ gpu_util: 0,
});
}
diff --git a/src/app/data_harvester/processes/windows.rs b/src/app/data_harvester/processes/windows.rs
index b0b93b16..11c58cf3 100644
--- a/src/app/data_harvester/processes/windows.rs
+++ b/src/app/data_harvester/processes/windows.rs
@@ -67,6 +67,26 @@ pub fn sysinfo_process_data(
let disk_usage = process_val.disk_usage();
let process_state = (process_val.status().to_string(), 'R');
+
+ #[cfg(feature = "gpu")]
+ let (gpu_mem, gpu_util, gpu_mem_percent) = {
+ let mut gpu_mem = 0;
+ let mut gpu_util = 0;
+ let mut gpu_mem_percent = 0.0;
+ if let Some(gpus) = &collector.gpu_pids {
+ gpus.iter().for_each(|gpu| {
+ // add mem/util for all gpus to pid
+ if let Some((mem, util)) = gpu.get(&process_val.pid().as_u32()) {
+ gpu_mem += mem;
+ gpu_util += util;
+ }
+ });
+ }
+ if let Some(gpu_total_mem) = &collector.gpus_total_mem {
+ gpu_mem_percent = (gpu_mem as f64 / *gpu_total_mem as f64 * 100.0) as f32;
+ }
+ (gpu_mem, gpu_util, gpu_mem_percent)
+ };
process_vector.push(ProcessHarvest {
pid: process_val.pid().as_u32() as _,
parent_pid: process_val.parent().map(|p| p.as_u32() as _),
@@ -95,6 +115,12 @@ pub fn sysinfo_process_data(
} else {
Duration::from_secs(process_val.run_time())
},
+ #[cfg(feature = "gpu")]
+ gpu_mem,
+ #[cfg(feature = "gpu")]
+ gpu_util,
+ #[cfg(feature = "gpu")]
+ gpu_mem_percent,
});
}