diff options
| author | 2025-01-27 21:03:43 +0000 | |
|---|---|---|
| committer | 2025-01-28 23:54:31 +0000 | |
| commit | f11a96283945ac895b31cb1085013bedb87f80ce (patch) | |
| tree | 35503e86547594af81f243153b99d3fb7116475e | |
| parent | 9b20ff48dae49a9cbffc64cbf398d6f7b4139e36 (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.bp | 1 | ||||
| -rw-r--r-- | core/jni/AndroidRuntime.cpp | 11 |
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. |