summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jared Duke <jdduke@google.com> 2025-01-27 21:03:43 +0000
committer Jared Duke <jdduke@google.com> 2025-01-28 23:54:31 +0000
commitf11a96283945ac895b31cb1085013bedb87f80ce (patch)
tree35503e86547594af81f243153b99d3fb7116475e
parent9b20ff48dae49a9cbffc64cbf398d6f7b4139e36 (diff)
Add flag-guarded disabling of default .art file madvise
The compressed .art app image file is read just once during process startup. As such, there is little benefit to running a full madvise before starting decompression, and in some cases this actually leads to (slightly) worse latency. Use a flag to control the default value for the ART runtime's `-XMadviseWillNeedArtFileSize` configuration. Previously, this was set via a makefile default to be UINT_MAX. This default is preserved in the runtime, where the new aconfig flag disables this default and turns off .art file madvise (unless the property is explicitly configured for a particular device). After ramping and validating performance impact, we may consider deprecating and removing this ART runtime flag completely. Flag: android.os.disable_madvise_artfile_default Test: m Test: adb shell aflags enable android.os.disable_madvise_artfile_default && adb shell setprop dalvik.vm.extra-opts -verbose:startup && adb logcat | grep Madvise Bug: 382110550 Change-Id: I16170215da0d06a0fd110112fc17b03002939621
-rw-r--r--core/jni/Android.bp1
-rw-r--r--core/jni/AndroidRuntime.cpp11
2 files changed, 9 insertions, 3 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 411315ee2800..817284d3bf78 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -288,6 +288,7 @@ cc_library_shared_for_libandroid_runtime {
],
static_libs: [
+ "android.os.flags-aconfig-cc",
"libasync_safe",
"libbinderthreadstateutils",
"libdmabufinfo",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 3bfc1028dd6a..0e4da86b7cc3 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -22,6 +22,7 @@
#include <android-base/parsebool.h>
#include <android-base/properties.h>
#include <android/graphics/jni_runtime.h>
+#include <android_os.h>
#include <android_runtime/AndroidRuntime.h>
#include <assert.h>
#include <binder/IBinder.h>
@@ -887,9 +888,13 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote, bool p
madviseWillNeedFileSizeOdex,
"-XMadviseWillNeedOdexFileSize:");
- parseRuntimeOption("dalvik.vm.madvise.artfile.size",
- madviseWillNeedFileSizeArt,
- "-XMadviseWillNeedArtFileSize:");
+ // Historically, dalvik.vm.madvise.artfile.size was set to UINT_MAX by default. With the
+ // disable_madvise_art_default flag rollout, we use this default only when the flag is disabled.
+ // TODO(b/382110550): Remove this property/flag entirely after validating and ramping.
+ const char* madvise_artfile_size_default =
+ android::os::disable_madvise_artfile_default() ? "" : "4294967295";
+ parseRuntimeOption("dalvik.vm.madvise.artfile.size", madviseWillNeedFileSizeArt,
+ "-XMadviseWillNeedArtFileSize:", madvise_artfile_size_default);
/*
* Profile related options.