From 9f337098c8bf8d0f9de474618e53f1fee2200854 Mon Sep 17 00:00:00 2001 From: Kean Mariotti Date: Fri, 13 Dec 2024 11:08:34 +0000 Subject: system server: configure 4 MB perfetto shmem buffer Increase Perfetto's shmem buffer from default size (256 KB) to 4 MB to avoid crashes (too long perfetto producer stalls) caused by shmem chunks exhaustion/contention. Bug: b/382369925 Flag: android.tracing.system_server_large_perfetto_shmem_buffer Test: presubmit Change-Id: I5b6ab40cb3987a7aed7bb09801f02bea3f3962a2 --- core/java/android/tracing/flags.aconfig | 8 ++++++++ services/java/com/android/server/SystemServer.java | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/core/java/android/tracing/flags.aconfig b/core/java/android/tracing/flags.aconfig index fb1bd1703ce6..6116d599baa0 100644 --- a/core/java/android/tracing/flags.aconfig +++ b/core/java/android/tracing/flags.aconfig @@ -70,3 +70,11 @@ flag { is_fixed_read_only: true bug: "352538294" } + +flag { + name: "system_server_large_perfetto_shmem_buffer" + namespace: "windowing_tools" + description: "Large perfetto shmem buffer" + is_fixed_read_only: true + bug: "382369925" +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 29e0487dad0a..6ffbe3cec101 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -91,6 +91,7 @@ import android.server.ServerProtoEnums; import android.system.ErrnoException; import android.system.Os; import android.text.TextUtils; +import android.tracing.perfetto.InitArguments; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Dumpable; @@ -791,6 +792,12 @@ public final class SystemServer implements Dumpable { private void run() { TimingsTraceAndSlog t = new TimingsTraceAndSlog(); try { + if (android.tracing.Flags.systemServerLargePerfettoShmemBuffer()) { + // Explicitly initialize a 4 MB shmem buffer for Perfetto producers (b/382369925) + android.tracing.perfetto.Producer.init(new InitArguments( + InitArguments.PERFETTO_BACKEND_SYSTEM, 4 * 1024)); + } + t.traceBegin("InitBeforeStartServices"); // Record the process start information in sys props. -- cgit v1.2.3-59-g8ed1b