Detailed error message when parsing /proc/<pid>/smaps fails
Bug: 324970411
Test: atest MicrodroidBenchmarks on
aosp_husky_pkvm_experimental-trunk_staging-userdebug
Change-Id: Ifb524f2e1045263ffab67bf019364d1d034a11d7
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
index 2d52732..77cae32 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
@@ -415,8 +415,9 @@
long guestRss = 0;
long guestPss = 0;
boolean hasGuestMaps = false;
- for (ProcessUtil.SMapEntry entry :
- ProcessUtil.getProcessSmaps(vmPid, shellExecutor)) {
+ List<ProcessUtil.SMapEntry> smaps =
+ ProcessUtil.getProcessSmaps(vmPid, shellExecutor);
+ for (ProcessUtil.SMapEntry entry : smaps) {
long rss = entry.metrics.get("Rss");
long pss = entry.metrics.get("Pss");
if (entry.name.contains("crosvm_guest")) {
@@ -429,8 +430,12 @@
}
}
if (!hasGuestMaps) {
+ StringBuilder sb = new StringBuilder();
+ for (ProcessUtil.SMapEntry entry : smaps) {
+ sb.append(entry.toString());
+ }
throw new IllegalStateException(
- "found no crosvm_guest smap entry in crosvm process");
+ "found no crosvm_guest smap entry in crosvm process: " + sb);
}
mHostRss = hostRss;
mHostPss = hostPss;
diff --git a/tests/helper/src/java/com/android/microdroid/test/common/ProcessUtil.java b/tests/helper/src/java/com/android/microdroid/test/common/ProcessUtil.java
index c72d91e..e058674 100644
--- a/tests/helper/src/java/com/android/microdroid/test/common/ProcessUtil.java
+++ b/tests/helper/src/java/com/android/microdroid/test/common/ProcessUtil.java
@@ -33,13 +33,24 @@
public static class SMapEntry {
public String name;
public Map<String, Long> metrics;
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("name: " + name + "\n");
+ metrics.forEach(
+ (k, v) -> {
+ sb.append(" " + k + ": " + v + "\n");
+ });
+ return sb.toString();
+ }
}
/** Gets metrics key and values mapping of specified process id */
public static List<SMapEntry> getProcessSmaps(int pid, Function<String, String> shellExecutor)
throws IOException {
String path = "/proc/" + pid + "/smaps";
- return parseMemoryInfo(shellExecutor.apply("cat " + path + " || true"));
+ return parseMemoryInfo(shellExecutor.apply("cat " + path));
}
/** Gets metrics key and values mapping of specified process id */
diff --git a/virtualizationmanager/src/crosvm.rs b/virtualizationmanager/src/crosvm.rs
index 2c23441..26b7dff 100644
--- a/virtualizationmanager/src/crosvm.rs
+++ b/virtualizationmanager/src/crosvm.rs
@@ -450,20 +450,20 @@
let mut vm_metric = self.vm_metric.lock().unwrap();
// Get CPU Information
- if let Ok(guest_time) = get_guest_time(pid) {
- vm_metric.cpu_guest_time = Some(guest_time);
- } else {
- error!("Failed to parse /proc/[pid]/stat");
+ match get_guest_time(pid) {
+ Ok(guest_time) => vm_metric.cpu_guest_time = Some(guest_time),
+ Err(e) => error!("Failed to get guest CPU time: {e:?}"),
}
// Get Memory Information
- if let Ok(rss) = get_rss(pid) {
- vm_metric.rss = match &vm_metric.rss {
- Some(x) => Some(Rss::extract_max(x, &rss)),
- None => Some(rss),
+ match get_rss(pid) {
+ Ok(rss) => {
+ vm_metric.rss = match &vm_metric.rss {
+ Some(x) => Some(Rss::extract_max(x, &rss)),
+ None => Some(rss),
+ }
}
- } else {
- error!("Failed to parse /proc/[pid]/smaps");
+ Err(e) => error!("Failed to get guest RSS: {}", e),
}
}