Add an arg to run-microdroid/run-app cmds to provide custom kernel
This arg will be used to compare performance of Microdroid VMs booted
with different kernels.
Bug: 283822676
Test: vm run-microdroid
Change-Id: Ice300dfbd922467a75f2f5d6f3449bd0b02307f7
diff --git a/vm/src/main.rs b/vm/src/main.rs
index 1d9f50b..bc3f4da 100644
--- a/vm/src/main.rs
+++ b/vm/src/main.rs
@@ -107,6 +107,10 @@
/// Note: this is only supported on Android kernels android14-5.15 and higher.
#[clap(long)]
gdb: Option<NonZeroU16>,
+
+ /// Path to custom kernel image to use when booting Microdroid.
+ #[clap(long)]
+ kernel: Option<PathBuf>,
},
/// Run a virtual machine with Microdroid inside
RunMicrodroid {
@@ -163,6 +167,10 @@
/// Note: this is only supported on Android kernels android14-5.15 and higher.
#[clap(long)]
gdb: Option<NonZeroU16>,
+
+ /// Path to custom kernel image to use when booting Microdroid.
+ #[clap(long)]
+ kernel: Option<PathBuf>,
},
/// Run a virtual machine
Run {
@@ -277,6 +285,7 @@
task_profiles,
extra_idsigs,
gdb,
+ kernel,
} => command_run_app(
name,
get_service()?.as_ref(),
@@ -296,6 +305,7 @@
task_profiles,
&extra_idsigs,
gdb,
+ kernel.as_deref(),
),
Opt::RunMicrodroid {
name,
@@ -310,6 +320,7 @@
cpu_topology,
task_profiles,
gdb,
+ kernel,
} => command_run_microdroid(
name,
get_service()?.as_ref(),
@@ -324,6 +335,7 @@
cpu_topology,
task_profiles,
gdb,
+ kernel.as_deref(),
),
Opt::Run { name, config, cpu_topology, task_profiles, console, log, gdb } => {
command_run(
diff --git a/vm/src/run.rs b/vm/src/run.rs
index 36edc64..54c1de4 100644
--- a/vm/src/run.rs
+++ b/vm/src/run.rs
@@ -60,6 +60,7 @@
task_profiles: Vec<String>,
extra_idsigs: &[PathBuf],
gdb: Option<NonZeroU16>,
+ kernel: Option<&Path>,
) -> Result<(), Error> {
let apk_file = File::open(apk).context("Failed to open APK file")?;
@@ -115,6 +116,8 @@
None
};
+ let kernel = kernel.map(|p| open_parcel_file(p, false)).transpose()?;
+
let extra_idsig_files: Result<Vec<File>, _> = extra_idsigs.iter().map(File::open).collect();
let extra_idsig_fds = extra_idsig_files?.into_iter().map(ParcelFileDescriptor::new).collect();
@@ -147,6 +150,7 @@
cpuTopology: cpu_topology,
taskProfiles: task_profiles,
gdbPort: gdb.map(u16::from).unwrap_or(0) as i32, // 0 means no gdb
+ customKernelImage: kernel,
});
run(service, &config, &payload_config_str, console_path, log_path)
}
@@ -189,6 +193,7 @@
cpu_topology: CpuTopology,
task_profiles: Vec<String>,
gdb: Option<NonZeroU16>,
+ kernel: Option<&Path>,
) -> Result<(), Error> {
let apk = find_empty_payload_apk_path()?;
println!("found path {}", apk.display());
@@ -220,6 +225,7 @@
task_profiles,
&extra_sig,
gdb,
+ kernel,
)
}