Expose setShouldUseHugepages to @SystemApi
Bug: 383347947
Test: atest MicrodroidTests
Change-Id: I5f525833e78a44ff254b7e0ec5ff570579e068bd
diff --git a/libs/framework-virtualization/Android.bp b/libs/framework-virtualization/Android.bp
index d5ac878..98fa53d 100644
--- a/libs/framework-virtualization/Android.bp
+++ b/libs/framework-virtualization/Android.bp
@@ -15,6 +15,7 @@
],
static_libs: [
"android.system.virtualizationservice-java",
+ "avf_aconfig_flags_java",
// For android.sysprop.HypervisorProperties
"PlatformProperties",
],
@@ -51,6 +52,9 @@
"FlaggedApi",
],
},
+ aconfig_declarations: [
+ "avf_aconfig_flags",
+ ],
}
gensrcs {
diff --git a/libs/framework-virtualization/api/system-current.txt b/libs/framework-virtualization/api/system-current.txt
index d9bafa1..233491f 100644
--- a/libs/framework-virtualization/api/system-current.txt
+++ b/libs/framework-virtualization/api/system-current.txt
@@ -66,6 +66,7 @@
method public boolean isEncryptedStorageEnabled();
method public boolean isProtectedVm();
method public boolean isVmOutputCaptured();
+ method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") public boolean shouldUseHugepages();
field public static final int CPU_TOPOLOGY_MATCH_HOST = 1; // 0x1
field public static final int CPU_TOPOLOGY_ONE_CPU = 0; // 0x0
field public static final int DEBUG_LEVEL_FULL = 1; // 0x1
@@ -82,6 +83,7 @@
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setMemoryBytes(@IntRange(from=1) long);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setPayloadBinaryName(@NonNull String);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setProtectedVm(boolean);
+ method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setShouldUseHugepages(boolean);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setVmOutputCaptured(boolean);
}
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
index 3829f9f..fbc6c66 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -22,6 +22,7 @@
import static java.util.Objects.requireNonNull;
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
@@ -49,6 +50,8 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.system.virtualmachine.flags.Flags;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -601,6 +604,18 @@
}
/**
+ * Returns whether this VM enabled the hint to use transparent huge pages.
+ *
+ * @see Builder#setShouldUseHugepages
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_PROMOTE_SET_SHOULD_USE_HUGEPAGES_TO_SYSTEM_API)
+ public boolean shouldUseHugepages() {
+ return mShouldUseHugepages;
+ }
+
+ /**
* Tests if this config is compatible with other config. Being compatible means that the configs
* can be interchangeably used for the same virtual machine; they do not change the VM identity
* or secrets. Such changes include varying the number of CPUs or the size of the RAM. Changes
@@ -1364,7 +1379,26 @@
return this;
}
- /** @hide */
+ /**
+ * Hints whether the VM should make use of the transparent huge pages feature.
+ *
+ * <p>Note: this API just provides a hint, whether the VM will actually use transparent huge
+ * pages additionally depends on the following:
+ *
+ * <ul>
+ * <li>{@code /sys/kernel/mm/transparent_hugepages/shmem_enabled} should be configured
+ * with the value {@code 'advise'}.
+ * <li>Android host kernel version should be at least {@code android15-5.15}
+ * </ul>
+ *
+ * @see https://docs.kernel.org/admin-guide/mm/transhuge.html
+ * @see
+ * https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Virtualization/docs/hugepages.md
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_PROMOTE_SET_SHOULD_USE_HUGEPAGES_TO_SYSTEM_API)
+ @NonNull
public Builder setShouldUseHugepages(boolean shouldUseHugepages) {
mShouldUseHugepages = shouldUseHugepages;
return this;