From 9e98cdf95dc49980c30167f0ae0854e68d0341bb Mon Sep 17 00:00:00 2001 From: Chengdong Li Date: Wed, 23 Apr 2025 15:44:22 +0800 Subject: [PATCH 1/3] RPS: avoid collecting virtual network interfaces. --- crates/psh-system/src/rps/raw.rs | 19 +++++-------------- .../x86_64/intel/net/enp3s0/device/.gitkeep | 0 .../x86_64/intel/net/wlo1/device/.gitkeep | 0 3 files changed, 5 insertions(+), 14 deletions(-) create mode 100644 crates/psh-system/test_resources/arch/x86_64/intel/net/enp3s0/device/.gitkeep create mode 100644 crates/psh-system/test_resources/arch/x86_64/intel/net/wlo1/device/.gitkeep diff --git a/crates/psh-system/src/rps/raw.rs b/crates/psh-system/src/rps/raw.rs index 0ea91f2..41dd178 100644 --- a/crates/psh-system/src/rps/raw.rs +++ b/crates/psh-system/src/rps/raw.rs @@ -33,6 +33,10 @@ fn parse_queue_impl(dir: fs::DirEntry) -> Option { fn parse_device_impl(dir: fs::DirEntry) -> Option { let dev_path = dir.path(); + // Check if device file exists + if !dev_path.join("device").exists() { + return None; + } let cur_path = dev_path.join("queues"); match (dev_path.file_name(), fs::read_dir(cur_path)) { (Some(dev_name), Ok(rx_list)) => { @@ -78,20 +82,7 @@ mod tests { rps_path.push("./test_resources/arch/x86_64/intel/net"); let result = parse_rps_impl(rps_path.to_str().unwrap()); - assert_eq!(result.len(), 3); - - let rps_lo = result.iter().find(|rps| rps.dev == "lo"); - assert_eq!( - rps_lo, - Some(&RpsDetails { - dev: "lo".to_string(), - queues: vec![RpsQueue { - name: "rx-0".to_string(), - cpus: Some(CpuMask(vec![false; 20])), - flow_cnt: Some(0), - }] - }) - ); + assert_eq!(result.len(), 2); let rps_enp3s0 = result.iter().find(|rps| rps.dev == "enp3s0"); assert_eq!( diff --git a/crates/psh-system/test_resources/arch/x86_64/intel/net/enp3s0/device/.gitkeep b/crates/psh-system/test_resources/arch/x86_64/intel/net/enp3s0/device/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/crates/psh-system/test_resources/arch/x86_64/intel/net/wlo1/device/.gitkeep b/crates/psh-system/test_resources/arch/x86_64/intel/net/wlo1/device/.gitkeep new file mode 100644 index 0000000..e69de29 From a2a16101727949a156cceecd84db9a84fbc2dff4 Mon Sep 17 00:00:00 2001 From: Chengdong Li Date: Wed, 23 Apr 2025 15:45:33 +0800 Subject: [PATCH 2/3] DiskStat: aovid collecting loopback devices. --- crates/psh-system/src/disk/handle.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/psh-system/src/disk/handle.rs b/crates/psh-system/src/disk/handle.rs index 297cc7c..a4de33d 100644 --- a/crates/psh-system/src/disk/handle.rs +++ b/crates/psh-system/src/disk/handle.rs @@ -36,6 +36,14 @@ impl DiskHandle { } pub fn stat(&self, interval: Option) -> Result> { - self.0.get(interval) + self.0 + .get(interval) + // remove loop* devices from results + .map(|stats| { + stats + .into_iter() + .filter(|stat| !stat.name.starts_with("loop")) + .collect() + }) } } From f3d0458df12e40cdc4b5b4aabfe2676f2bb7f82d Mon Sep 17 00:00:00 2001 From: Chengdong Li Date: Wed, 23 Apr 2025 15:46:21 +0800 Subject: [PATCH 3/3] Network: avoid collecting virtual network interfaces. --- crates/psh-system/src/network/handle.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/psh-system/src/network/handle.rs b/crates/psh-system/src/network/handle.rs index 4fbd198..26b1080 100644 --- a/crates/psh-system/src/network/handle.rs +++ b/crates/psh-system/src/network/handle.rs @@ -36,6 +36,20 @@ impl NetworkHandle { } pub fn stat(&self, interval: Option) -> Result> { - self.0.get(interval) + self.0.get(interval).map(|stats| { + stats + .into_iter() + .filter(|(dev, _)| { + !(dev == "lo" + // TODO: docker network interface statistics may be useful + || dev.starts_with("docker") + || dev.starts_with("veth") + || dev.starts_with("br-") + || dev.starts_with("virbr") + || dev.starts_with("tun") + || dev.starts_with("tap")) + }) + .collect() + }) } }