Merge changes Ib884e94d,I121ba0e2
* changes:
Update kernel to builds 9013362
Update kernel to builds 9013362
diff --git a/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb b/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
index 7b2cad9..2fa867a 100644
--- a/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
+++ b/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
@@ -1,6 +1,6 @@
drops {
android_build_drop {
- build_id: "8964254"
+ build_id: "8966862"
target: "u-boot_pvmfw"
source_file: "pvmfw.img"
}
diff --git a/apkdmverity/Android.bp b/apkdmverity/Android.bp
index 06d4500..97a6174 100644
--- a/apkdmverity/Android.bp
+++ b/apkdmverity/Android.bp
@@ -6,7 +6,7 @@
name: "apkdmverity.defaults",
crate_name: "apkdmverity",
srcs: ["src/main.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"libanyhow",
diff --git a/authfs/Android.bp b/authfs/Android.bp
index 4c5b70e..7788702 100644
--- a/authfs/Android.bp
+++ b/authfs/Android.bp
@@ -8,7 +8,7 @@
srcs: [
"src/main.rs",
],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"authfs_aidl_interface-rust",
"libandroid_logger",
diff --git a/authfs/service/Android.bp b/authfs/service/Android.bp
index 943db35..e9eec1e 100644
--- a/authfs/service/Android.bp
+++ b/authfs/service/Android.bp
@@ -7,7 +7,7 @@
srcs: [
"src/main.rs",
],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"authfs_aidl_interface-rust",
"libandroid_logger",
diff --git a/authfs/src/fsverity/metadata/Android.bp b/authfs/src/fsverity/metadata/Android.bp
index c988884..3df7519 100644
--- a/authfs/src/fsverity/metadata/Android.bp
+++ b/authfs/src/fsverity/metadata/Android.bp
@@ -20,6 +20,6 @@
"libauthfs_fsverity_metadata_bindgen",
"libopenssl",
],
- edition: "2018",
+ edition: "2021",
apex_available: ["com.android.virt"],
}
diff --git a/authfs/tests/Android.bp b/authfs/tests/Android.bp
index 990daf3..72685ad 100644
--- a/authfs/tests/Android.bp
+++ b/authfs/tests/Android.bp
@@ -27,7 +27,7 @@
name: "open_then_run",
crate_name: "open_then_run",
srcs: ["open_then_run.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libandroid_logger",
"libanyhow",
diff --git a/compos/Android.bp b/compos/Android.bp
index ec2d737..6aa9d3d 100644
--- a/compos/Android.bp
+++ b/compos/Android.bp
@@ -4,6 +4,7 @@
rust_defaults {
name: "compsvc_defaults",
+ edition: "2021",
srcs: ["src/compsvc_main.rs"],
rustlibs: [
"android.system.virtualmachineservice-rust",
diff --git a/compos/benchmark/Android.bp b/compos/benchmark/Android.bp
index 9353771..37af87e 100644
--- a/compos/benchmark/Android.bp
+++ b/compos/benchmark/Android.bp
@@ -11,7 +11,7 @@
static_libs: [
"androidx.test.runner",
"androidx.test.ext.junit",
- "MicroroidDeviceTestHelper",
+ "MicrodroidDeviceTestHelper",
"truth-prebuilt",
],
platform_apis: true,
diff --git a/compos/common/Android.bp b/compos/common/Android.bp
index 23a1eb9..7a7042e 100644
--- a/compos/common/Android.bp
+++ b/compos/common/Android.bp
@@ -6,7 +6,7 @@
name: "libcompos_common",
crate_name: "compos_common",
srcs: ["lib.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"android.system.virtualizationservice-rust",
"compos_aidl_interface-rust",
diff --git a/compos/composd/Android.bp b/compos/composd/Android.bp
index 937aa1a..07a9be3 100644
--- a/compos/composd/Android.bp
+++ b/compos/composd/Android.bp
@@ -5,7 +5,7 @@
rust_binary {
name: "composd",
srcs: ["src/composd_main.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"android.system.composd-rust",
diff --git a/compos/composd_cmd/Android.bp b/compos/composd_cmd/Android.bp
index c230e13..61df328 100644
--- a/compos/composd_cmd/Android.bp
+++ b/compos/composd_cmd/Android.bp
@@ -5,7 +5,7 @@
rust_binary {
name: "composd_cmd",
srcs: ["composd_cmd.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"android.system.composd-rust",
"libanyhow",
diff --git a/compos/tests/Android.bp b/compos/tests/Android.bp
index 72da97f..41958ca 100644
--- a/compos/tests/Android.bp
+++ b/compos/tests/Android.bp
@@ -10,11 +10,18 @@
"compatibility-tradefed",
"compatibility-host-util",
],
- data_native_bins: ["bcc_validator"],
static_libs: [
"MicrodroidHostTestHelper",
],
test_suites: [
"general-tests",
],
+ // java_test_host doesn't have data_native_libs but jni_libs can be used to put
+ // native modules under ./lib directory.
+ // This works because host tools have rpath (../lib and ./lib).
+ data_native_bins: ["bcc_validator"],
+ jni_libs: [
+ "libcrypto",
+ "libc++",
+ ],
}
diff --git a/compos/verify/Android.bp b/compos/verify/Android.bp
index 5c74e4f..f68cc1b 100644
--- a/compos/verify/Android.bp
+++ b/compos/verify/Android.bp
@@ -5,7 +5,7 @@
rust_binary {
name: "compos_verify",
srcs: ["verify.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"compos_aidl_interface-rust",
"libandroid_logger",
diff --git a/javalib/Android.bp b/javalib/Android.bp
index 1df9b51..a6c3b80 100644
--- a/javalib/Android.bp
+++ b/javalib/Android.bp
@@ -2,20 +2,34 @@
default_applicable_licenses: ["Android-Apache-2.0"],
}
+// Defines our permissions
+android_app {
+ name: "android.system.virtualmachine.res",
+ installable: true,
+ apex_available: ["com.android.virt"],
+ sdk_version: "current",
+}
+
java_sdk_library {
name: "android.system.virtualmachine",
installable: true,
compile_dex: true,
+ jarjar_rules: "jarjar-rules.txt",
+
srcs: ["src/**/*.java"],
static_libs: [
"android.system.virtualizationservice-java",
+ // For android.sysprop.HypervisorProperties
+ "PlatformProperties",
],
apex_available: ["com.android.virt"],
permitted_packages: [
"android.system.virtualmachine",
"android.system.virtualizationservice",
+ // android.sysprop.*, renamed by jarjar
+ "com.android.system.virtualmachine.sysprop",
],
}
@@ -23,10 +37,3 @@
name: "android-virtualization-framework-sdk",
api_dirs: ["32"],
}
-
-android_app {
- name: "android.system.virtualmachine.res",
- installable: true,
- apex_available: ["com.android.virt"],
- sdk_version: "current",
-}
diff --git a/javalib/jarjar-rules.txt b/javalib/jarjar-rules.txt
new file mode 100644
index 0000000..dd8ad2d
--- /dev/null
+++ b/javalib/jarjar-rules.txt
@@ -0,0 +1,9 @@
+# Rules for the android.system.virtualmachine java_sdk_library.
+
+# This is the root of the API, everything we care about should be
+# reachable from here.
+# (This gets rid of all the android.sysprop classes we don't use.)
+keep android.system.virtualmachine.VirtualMachineManager
+
+# We statically link PlatformProperties, rename to avoid clashes.
+rule android.sysprop.** com.android.system.virtualmachine.sysprop.@1
diff --git a/libs/apexutil/Android.bp b/libs/apexutil/Android.bp
index 5b55e1c..3bdfc5f 100644
--- a/libs/apexutil/Android.bp
+++ b/libs/apexutil/Android.bp
@@ -7,7 +7,7 @@
crate_name: "apexutil",
host_supported: true,
srcs: ["src/lib.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"liblog_rust",
"libthiserror",
diff --git a/libs/apkverify/Android.bp b/libs/apkverify/Android.bp
index 2d58bb0..ab9265d 100644
--- a/libs/apkverify/Android.bp
+++ b/libs/apkverify/Android.bp
@@ -7,7 +7,7 @@
crate_name: "apkverify",
srcs: ["src/lib.rs"],
prefer_rlib: true,
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libanyhow",
"libbyteorder",
@@ -37,7 +37,7 @@
crate_name: "apkverify_test",
srcs: ["tests/*_test.rs"],
prefer_rlib: true,
- edition: "2018",
+ edition: "2021",
test_suites: ["general-tests"],
rustlibs: [
"libapkverify",
diff --git a/libs/avb_bindgen/Android.bp b/libs/avb_bindgen/Android.bp
index 6dc16e8..80b96a6 100644
--- a/libs/avb_bindgen/Android.bp
+++ b/libs/avb_bindgen/Android.bp
@@ -7,6 +7,7 @@
host_supported: true,
wrapper_src: "bindgen/avb.h",
crate_name: "avb_bindgen",
+ edition: "2021",
visibility: ["//packages/modules/Virtualization:__subpackages__"],
source_stem: "bindings",
bindgen_flags: [
@@ -26,6 +27,7 @@
name: "libavb_bindgen_test",
srcs: [":libavb_bindgen"],
crate_name: "avb_bindgen_test",
+ edition: "2021",
test_suites: ["general-tests"],
auto_gen_config: true,
clippy_lints: "none",
diff --git a/libs/idsig/Android.bp b/libs/idsig/Android.bp
index 25eeae4..9f7d377 100644
--- a/libs/idsig/Android.bp
+++ b/libs/idsig/Android.bp
@@ -6,7 +6,7 @@
name: "libidsig.defaults",
crate_name: "idsig",
srcs: ["src/lib.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"libanyhow",
diff --git a/libs/nested_virt/Android.bp b/libs/nested_virt/Android.bp
index e364a2d..72393ea 100644
--- a/libs/nested_virt/Android.bp
+++ b/libs/nested_virt/Android.bp
@@ -6,7 +6,7 @@
name: "libnested_virt",
crate_name: "nested_virt",
srcs: ["src/lib.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libanyhow",
"librustutils",
diff --git a/libs/statslog_virtualization/Android.bp b/libs/statslog_virtualization/Android.bp
index 51a51a3..a702ea1 100644
--- a/libs/statslog_virtualization/Android.bp
+++ b/libs/statslog_virtualization/Android.bp
@@ -27,21 +27,28 @@
],
}
+rust_defaults {
+ name: "libstatslog_virtualization_rust_defaults",
+ edition: "2021",
+ rustlibs: [
+ "libstatspull_bindgen",
+ ],
+ apex_available: [
+ "com.android.virt",
+ ],
+}
+
rust_library {
name: "libstatslog_virtualization_rust_header",
+ defaults: ["libstatslog_virtualization_rust_defaults"],
crate_name: "statslog_virtualization_rust_header",
srcs: [
"statslog_header_wrapper.rs",
":statslog_virtualization_header.rs",
],
rustlibs: [
- "libstatspull_bindgen",
"libthiserror",
],
- apex_available: [
- "com.android.virt",
- ],
-
}
genrule {
@@ -55,6 +62,7 @@
rust_library {
name: "libstatslog_virtualization_rust",
+ defaults: ["libstatslog_virtualization_rust_defaults"],
crate_name: "statslog_virtualization_rust",
srcs: [
"statslog_wrapper.rs",
@@ -62,10 +70,5 @@
],
rustlibs: [
"libstatslog_virtualization_rust_header",
- "libstatspull_bindgen",
],
- apex_available: [
- "com.android.virt",
- ],
-
}
diff --git a/libs/vbmeta/Android.bp b/libs/vbmeta/Android.bp
index 84dde11..c5078c2 100644
--- a/libs/vbmeta/Android.bp
+++ b/libs/vbmeta/Android.bp
@@ -7,7 +7,7 @@
crate_name: "vbmeta",
host_supported: true,
srcs: ["src/lib.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libavb_bindgen",
"libthiserror",
diff --git a/libs/vmconfig/Android.bp b/libs/vmconfig/Android.bp
index 1aee1ce..fe541d3 100644
--- a/libs/vmconfig/Android.bp
+++ b/libs/vmconfig/Android.bp
@@ -6,7 +6,7 @@
name: "libvmconfig",
crate_name: "vmconfig",
srcs: ["src/lib.rs"],
- edition: "2018",
+ edition: "2021",
rustlibs: [
"android.system.virtualizationservice-rust",
"libanyhow",
diff --git a/microdroid/payload/config/Android.bp b/microdroid/payload/config/Android.bp
index 827f6e3..7e60cd4 100644
--- a/microdroid/payload/config/Android.bp
+++ b/microdroid/payload/config/Android.bp
@@ -8,7 +8,7 @@
crate_name: "microdroid_payload_config",
srcs: ["src/lib.rs"],
prefer_rlib: true,
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libserde_json",
"libserde",
diff --git a/microdroid/payload/metadata/Android.bp b/microdroid/payload/metadata/Android.bp
index e4c7692..cd182fc 100644
--- a/microdroid/payload/metadata/Android.bp
+++ b/microdroid/payload/metadata/Android.bp
@@ -8,7 +8,7 @@
crate_name: "microdroid_metadata",
srcs: ["src/lib.rs"],
prefer_rlib: true,
- edition: "2018",
+ edition: "2021",
rustlibs: [
"libanyhow",
"libmicrodroid_metadata_proto_rust",
diff --git a/microdroid_manager/Android.bp b/microdroid_manager/Android.bp
index da63434..cfb851b 100644
--- a/microdroid_manager/Android.bp
+++ b/microdroid_manager/Android.bp
@@ -6,7 +6,7 @@
name: "microdroid_manager_defaults",
crate_name: "microdroid_manager",
srcs: ["src/main.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"android.hardware.security.dice-V1-rust",
diff --git a/pvmfw/idmap.S b/pvmfw/idmap.S
index 62555f9..ec3ceaf 100644
--- a/pvmfw/idmap.S
+++ b/pvmfw/idmap.S
@@ -44,9 +44,9 @@
.fill 509, 8, 0x0 // 509 GB of remaining VA space
/* level 2 */
-0: .fill 511, 8, 0x0
- .quad .L_BLOCK_MEM_XIP | 0x7fe00000 // pVM firmware image
+0: .fill 510, 8, 0x0
+ .quad .L_BLOCK_MEM_XIP | 0x7fc00000 // pVM firmware image
+ .quad .L_BLOCK_MEM | 0x7fe00000 // Writable memory for stack, heap &c.
1: .quad .L_BLOCK_RO | 0x80000000 // DT provided by VMM
.quad .L_BLOCK_RO | 0x80200000 // 2 MB of DRAM containing payload image
- .quad .L_BLOCK_MEM | 0x80400000 // Writable memory for stack, heap &c.
- .fill 509, 8, 0x0
+ .fill 510, 8, 0x0
diff --git a/pvmfw/image.ld b/pvmfw/image.ld
index aeb5046..18bb3ba 100644
--- a/pvmfw/image.ld
+++ b/pvmfw/image.ld
@@ -16,7 +16,7 @@
MEMORY
{
- image : ORIGIN = 0x7fe00000, LENGTH = 2M
+ image : ORIGIN = 0x7fc00000, LENGTH = 2M
+ writable_data : ORIGIN = 0x7fe00000, LENGTH = 2M
dtb_region : ORIGIN = 0x80000000, LENGTH = 2M
- writable_data : ORIGIN = 0x80400000, LENGTH = 2M
}
diff --git a/pvmfw/pvmfw.img b/pvmfw/pvmfw.img
index 7cc8009..dc0d4d7 100644
--- a/pvmfw/pvmfw.img
+++ b/pvmfw/pvmfw.img
Binary files differ
diff --git a/tests/benchmark/Android.bp b/tests/benchmark/Android.bp
index 817df7d..0d1cd91 100644
--- a/tests/benchmark/Android.bp
+++ b/tests/benchmark/Android.bp
@@ -9,7 +9,7 @@
],
srcs: ["src/java/**/*.java"],
static_libs: [
- "MicroroidDeviceTestHelper",
+ "MicrodroidDeviceTestHelper",
"androidx.test.runner",
"androidx.test.ext.junit",
"com.android.microdroid.testservice-java",
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
new file mode 100644
index 0000000..eb45a71
--- /dev/null
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.microdroid.benchmark;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.RemoteException;
+import android.system.virtualmachine.VirtualMachine;
+import android.util.Log;
+
+import com.android.microdroid.test.MicrodroidDeviceTestBase.VmEventListener;
+import com.android.microdroid.testservice.IBenchmarkService;
+
+/**
+ * This VM listener is used in {@link MicrodroidBenchmark} tests to facilitate the communication
+ * between the host and VM via {@link IBenchmarkService}.
+ */
+class BenchmarkVmListener extends VmEventListener {
+ private static final String TAG = "BenchmarkVm";
+
+ interface InnerListener {
+ /** This is invoked when both the payload and {@link IBenchmarkService} are ready. */
+ void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+ throws RemoteException;
+ }
+
+ private final InnerListener mListener;
+
+ private BenchmarkVmListener(InnerListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public final void onPayloadReady(VirtualMachine vm) {
+ try {
+ IBenchmarkService benchmarkService =
+ IBenchmarkService.Stub.asInterface(
+ vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
+ assertThat(benchmarkService).isNotNull();
+
+ mListener.onPayloadReady(vm, benchmarkService);
+ } catch (Exception e) {
+ Log.e(TAG, "Error inside onPayloadReady():" + e);
+ throw new RuntimeException(e);
+ }
+ forceStop(vm);
+ }
+
+ static BenchmarkVmListener create(InnerListener listener) {
+ return new BenchmarkVmListener(listener);
+ }
+}
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 e19c72a..200b7bf 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
@@ -24,6 +24,7 @@
import android.app.Instrumentation;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
import android.system.virtualmachine.VirtualMachine;
import android.system.virtualmachine.VirtualMachineConfig;
import android.system.virtualmachine.VirtualMachineConfig.DebugLevel;
@@ -193,8 +194,7 @@
String vmName = "test_vm_io_" + i;
mInner.forceCreateNewVirtualMachine(vmName, config);
VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
- VsockVmEventListener listener = new VsockVmEventListener(transferRates, port);
- listener.runToFinish(TAG, vm);
+ BenchmarkVmListener.create(new VsockListener(transferRates, port)).runToFinish(TAG, vm);
}
reportMetrics(transferRates, "vsock/transfer_host_to_vm_", "_mb_per_sec");
}
@@ -226,8 +226,8 @@
String vmName = "test_vm_io_" + i;
mInner.forceCreateNewVirtualMachine(vmName, config);
VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
- VirtioBlkVmEventListener listener = new VirtioBlkVmEventListener(readRates, isRand);
- listener.runToFinish(TAG, vm);
+ BenchmarkVmListener.create(new VirtioBlkListener(readRates, isRand))
+ .runToFinish(TAG, vm);
}
reportMetrics(
readRates,
@@ -260,14 +260,14 @@
mInstrumentation.sendStatus(0, bundle);
}
- private static class VirtioBlkVmEventListener extends VmEventListener {
+ private static class VirtioBlkListener implements BenchmarkVmListener.InnerListener {
private static final String FILENAME = APEX_ETC_FS + "microdroid_super.img";
private final long mFileSizeBytes;
private final List<Double> mReadRates;
private final boolean mIsRand;
- VirtioBlkVmEventListener(List<Double> readRates, boolean isRand) {
+ VirtioBlkListener(List<Double> readRates, boolean isRand) {
File file = new File(FILENAME);
try {
mFileSizeBytes = Files.size(file.toPath());
@@ -280,32 +280,26 @@
}
@Override
- public void onPayloadReady(VirtualMachine vm) {
- try {
- IBenchmarkService benchmarkService =
- IBenchmarkService.Stub.asInterface(
- vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
- double elapsedSeconds =
- benchmarkService.readFile(FILENAME, mFileSizeBytes, mIsRand);
- double fileSizeMb = mFileSizeBytes / SIZE_MB;
- mReadRates.add(fileSizeMb / elapsedSeconds);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- forceStop(vm);
+ public void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+ throws RemoteException {
+ double elapsedSeconds = benchmarkService.readFile(FILENAME, mFileSizeBytes, mIsRand);
+ double fileSizeMb = mFileSizeBytes / SIZE_MB;
+ mReadRates.add(fileSizeMb / elapsedSeconds);
}
}
@Test
public void testMemoryUsage() throws Exception {
final String vmName = "test_vm_mem_usage";
- VirtualMachineConfig.Builder builder = mInner.newVmConfigBuilder(
- "assets/vm_config_io.json");
- VirtualMachineConfig config = builder.debugLevel(DebugLevel.NONE).memoryMib(256).build();
+ VirtualMachineConfig config =
+ mInner.newVmConfigBuilder("assets/vm_config_io.json")
+ .debugLevel(DebugLevel.NONE)
+ .memoryMib(256)
+ .build();
mInner.forceCreateNewVirtualMachine(vmName, config);
VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
MemoryUsageListener listener = new MemoryUsageListener();
- listener.runToFinish(TAG, vm);
+ BenchmarkVmListener.create(listener).runToFinish(TAG, vm);
double mem_overall = 256.0;
double mem_total = (double) listener.mMemTotal / 1024.0;
@@ -329,7 +323,7 @@
mInstrumentation.sendStatus(0, bundle);
}
- private static class MemoryUsageListener extends VmEventListener {
+ private static class MemoryUsageListener implements BenchmarkVmListener.InnerListener {
public long mMemTotal;
public long mMemFree;
public long mMemAvailable;
@@ -338,55 +332,38 @@
public long mSlab;
@Override
- public void onPayloadReady(VirtualMachine vm) {
- try {
- IBenchmarkService service =
- IBenchmarkService.Stub.asInterface(
- vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
-
- mMemTotal = service.getMemInfoEntry("MemTotal");
- mMemFree = service.getMemInfoEntry("MemFree");
- mMemAvailable = service.getMemInfoEntry("MemAvailable");
- mBuffers = service.getMemInfoEntry("Buffers");
- mCached = service.getMemInfoEntry("Cached");
- mSlab = service.getMemInfoEntry("Slab");
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- forceStop(vm);
+ public void onPayloadReady(VirtualMachine vm, IBenchmarkService service)
+ throws RemoteException {
+ mMemTotal = service.getMemInfoEntry("MemTotal");
+ mMemFree = service.getMemInfoEntry("MemFree");
+ mMemAvailable = service.getMemInfoEntry("MemAvailable");
+ mBuffers = service.getMemInfoEntry("Buffers");
+ mCached = service.getMemInfoEntry("Cached");
+ mSlab = service.getMemInfoEntry("Slab");
}
}
- private static class VsockVmEventListener extends VmEventListener {
+ private static class VsockListener implements BenchmarkVmListener.InnerListener {
private static final int NUM_BYTES_TO_TRANSFER = 48 * 1024 * 1024;
private final List<Double> mReadRates;
private final int mPort;
- VsockVmEventListener(List<Double> readRates, int port) {
+ VsockListener(List<Double> readRates, int port) {
mReadRates = readRates;
mPort = port;
}
@Override
- public void onPayloadReady(VirtualMachine vm) {
- try {
- IBenchmarkService benchmarkService =
- IBenchmarkService.Stub.asInterface(
- vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
- assertThat(benchmarkService).isNotNull();
- AtomicReference<Double> sendRate = new AtomicReference();
+ public void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+ throws RemoteException {
+ AtomicReference<Double> sendRate = new AtomicReference();
- int serverFd = benchmarkService.initVsockServer(mPort);
- new Thread(() -> sendRate.set(runVsockClientAndSendData(vm))).start();
- benchmarkService.runVsockServerAndReceiveData(serverFd, NUM_BYTES_TO_TRANSFER);
+ int serverFd = benchmarkService.initVsockServer(mPort);
+ new Thread(() -> sendRate.set(runVsockClientAndSendData(vm))).start();
+ benchmarkService.runVsockServerAndReceiveData(serverFd, NUM_BYTES_TO_TRANSFER);
- mReadRates.add(sendRate.get());
- } catch (Exception e) {
- Log.e(TAG, "Test failed in VM:" + e);
- throw new RuntimeException(e);
- }
- forceStop(vm);
+ mReadRates.add(sendRate.get());
}
private double runVsockClientAndSendData(VirtualMachine vm) {
diff --git a/tests/benchmark_hostside/java/android/avf/test/AVFHostTestCase.java b/tests/benchmark_hostside/java/android/avf/test/AVFHostTestCase.java
index fc18046..8e9da55 100644
--- a/tests/benchmark_hostside/java/android/avf/test/AVFHostTestCase.java
+++ b/tests/benchmark_hostside/java/android/avf/test/AVFHostTestCase.java
@@ -23,6 +23,8 @@
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.common.truth.TruthJUnit.assume;
+import static org.junit.Assume.assumeTrue;
+
import com.android.microdroid.test.CommandRunner;
import com.android.microdroid.test.MicrodroidHostTestCaseBase;
import com.android.tradefed.log.LogUtil.CLog;
@@ -57,7 +59,7 @@
private static final int BOOT_COMPLETE_TIMEOUT_MS = 10 * 60 * 1000;
private static final double NANOS_IN_SEC = 1_000_000_000.0;
private static final int ROUND_COUNT = 5;
- private static final String METRIC_PREFIX = "avf_perf/compos/";
+ private static final String METRIC_PREFIX = "avf_perf/hostside/";
@Before
public void setUp() throws Exception {
@@ -66,8 +68,9 @@
@After
public void tearDown() throws Exception {
- // Reboot to prevent previous staged session.
- rebootAndWaitBootCompleted();
+ // Set PKVM enable and reboot to prevent previous staged session.
+ setPKVMStatusWithRebootToBootloader(true);
+ rebootFromBootloaderAndWaitBootCompleted();
CommandRunner android = new CommandRunner(getDevice());
@@ -76,6 +79,37 @@
}
@Test
+ public void testBootEnableAndDisablePKVM() throws Exception {
+
+ testPKVMStatusSwitchSupported();
+
+ double[] bootWithPKVMEnableTime = new double[ROUND_COUNT];
+ double[] bootWithoutPKVMEnableTime = new double[ROUND_COUNT];
+
+ for (int round = 0; round < ROUND_COUNT; ++round) {
+
+ setPKVMStatusWithRebootToBootloader(true);
+ long start = System.nanoTime();
+ rebootFromBootloaderAndWaitBootCompleted();
+ long elapsedWithPKVMEnable = System.nanoTime() - start;
+ double elapsedSec = elapsedWithPKVMEnable / NANOS_IN_SEC;
+ bootWithPKVMEnableTime[round] = elapsedSec;
+ CLog.i("Boot time with PKVM enable took " + elapsedSec + "s");
+
+ setPKVMStatusWithRebootToBootloader(false);
+ start = System.nanoTime();
+ rebootFromBootloaderAndWaitBootCompleted();
+ long elapsedWithoutPKVMEnable = System.nanoTime() - start;
+ elapsedSec = elapsedWithoutPKVMEnable / NANOS_IN_SEC;
+ bootWithoutPKVMEnableTime[round] = elapsedSec;
+ CLog.i("Boot time with PKVM disable took " + elapsedSec + "s");
+ }
+
+ reportMetric("boot_time_with_pkvm_enable", "s", bootWithPKVMEnableTime);
+ reportMetric("boot_time_with_pkvm_disable", "s", bootWithoutPKVMEnableTime);
+ }
+
+ @Test
public void testBootWithAndWithoutCompOS() throws Exception {
assume().withMessage("Skip on CF; too slow").that(isCuttlefish()).isFalse();
@@ -108,6 +142,18 @@
reportMetric("boot_time_without_compos", "s", bootWithoutCompOsTime);
}
+ private void testPKVMStatusSwitchSupported() throws Exception {
+ if (!getDevice().isStateBootloaderOrFastbootd()) {
+ getDevice().rebootIntoBootloader();
+ }
+ getDevice().waitForDeviceBootloader();
+
+ CommandResult result;
+ result = getDevice().executeFastbootCommand("oem", "pkvm", "status");
+ rebootFromBootloaderAndWaitBootCompleted();
+ assumeTrue(!result.getStderr().contains("Invalid oem command"));
+ }
+
private void reportMetric(String name, String unit, double[] values) {
double sum = 0;
double min = Double.MAX_VALUE;
@@ -135,6 +181,41 @@
metrics.addTestMetric(METRIC_PREFIX + name + "_stdev_" + unit, Double.toString(stdev));
}
+ private void setPKVMStatusWithRebootToBootloader(boolean isEnable) throws Exception {
+
+ if (!getDevice().isStateBootloaderOrFastbootd()) {
+ getDevice().rebootIntoBootloader();
+ }
+ getDevice().waitForDeviceBootloader();
+
+ CommandResult result;
+ if (isEnable) {
+ result = getDevice().executeFastbootCommand("oem", "pkvm", "enable");
+ } else {
+ result = getDevice().executeFastbootCommand("oem", "pkvm", "disable");
+ }
+
+ result = getDevice().executeFastbootCommand("oem", "pkvm", "status");
+ CLog.i("Gets PKVM status : " + result);
+
+ String expectedOutput = "";
+
+ if (isEnable) {
+ expectedOutput = "pkvm is enabled";
+ } else {
+ expectedOutput = "pkvm is disabled";
+ }
+ assertWithMessage("Failed to set PKVM status. Reason: " + result)
+ .that(result.toString()).ignoringCase().contains(expectedOutput);
+ }
+
+ private void rebootFromBootloaderAndWaitBootCompleted() throws Exception {
+ getDevice().executeFastbootCommand("reboot");
+ getDevice().waitForDeviceOnline(BOOT_COMPLETE_TIMEOUT_MS);
+ getDevice().waitForBootComplete(BOOT_COMPLETE_TIMEOUT_MS);
+ getDevice().enableAdbRoot();
+ }
+
private void rebootAndWaitBootCompleted() throws Exception {
getDevice().nonBlockingReboot();
getDevice().waitForDeviceOnline(BOOT_COMPLETE_TIMEOUT_MS);
diff --git a/tests/helper/Android.bp b/tests/helper/Android.bp
index 200eb42..f8dcef7 100644
--- a/tests/helper/Android.bp
+++ b/tests/helper/Android.bp
@@ -9,7 +9,7 @@
}
java_library_static {
- name: "MicroroidDeviceTestHelper",
+ name: "MicrodroidDeviceTestHelper",
srcs: ["src/java/com/android/microdroid/**/*.java"],
static_libs: [
"androidx.test.runner",
diff --git a/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java b/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
index 1a573bb..a80111f 100644
--- a/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
+++ b/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
@@ -118,7 +118,7 @@
mInner = new Inner(context, protectedVm, VirtualMachineManager.getInstance(context));
}
- protected abstract static class VmEventListener implements VirtualMachineCallback {
+ public abstract static class VmEventListener implements VirtualMachineCallback {
private ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
private OptionalLong mVcpuStartedNanoTime = OptionalLong.empty();
private OptionalLong mKernelStartedNanoTime = OptionalLong.empty();
diff --git a/tests/testapk/Android.bp b/tests/testapk/Android.bp
index 60912ea..325ebdb 100644
--- a/tests/testapk/Android.bp
+++ b/tests/testapk/Android.bp
@@ -10,7 +10,7 @@
],
srcs: ["src/java/**/*.java"],
static_libs: [
- "MicroroidDeviceTestHelper",
+ "MicrodroidDeviceTestHelper",
"androidx.test.runner",
"androidx.test.ext.junit",
"authfs_test_apk_assets",
diff --git a/virtualizationservice/Android.bp b/virtualizationservice/Android.bp
index b31d4a2..b6b7b09 100644
--- a/virtualizationservice/Android.bp
+++ b/virtualizationservice/Android.bp
@@ -6,7 +6,7 @@
name: "virtualizationservice_defaults",
crate_name: "virtualizationservice",
srcs: ["src/main.rs"],
- edition: "2018",
+ edition: "2021",
// Only build on targets which crosvm builds on.
enabled: false,
target: {
diff --git a/vm/Android.bp b/vm/Android.bp
index 2e914c4..eac640e 100644
--- a/vm/Android.bp
+++ b/vm/Android.bp
@@ -6,7 +6,7 @@
name: "vm",
crate_name: "vm",
srcs: ["src/main.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"android.system.virtualizationservice-rust",
diff --git a/vmbase/Android.bp b/vmbase/Android.bp
index fb7f6a6..ab87053 100644
--- a/vmbase/Android.bp
+++ b/vmbase/Android.bp
@@ -4,6 +4,7 @@
rust_defaults {
name: "vmbase_rust_defaults",
+ edition: "2021",
host_supported: false,
enabled: false,
target: {
@@ -55,7 +56,6 @@
defaults: ["vmbase_rust_defaults"],
crate_name: "vmbase",
srcs: ["src/lib.rs"],
- edition: "2021",
rustlibs: [
"liblog_rust_nostd",
"libpsci",
diff --git a/zipfuse/Android.bp b/zipfuse/Android.bp
index e10fc31..3aba94a 100644
--- a/zipfuse/Android.bp
+++ b/zipfuse/Android.bp
@@ -6,7 +6,7 @@
name: "zipfuse.defaults",
crate_name: "zipfuse",
srcs: ["src/main.rs"],
- edition: "2018",
+ edition: "2021",
prefer_rlib: true,
rustlibs: [
"libanyhow",