From e3b03b30f40a50afcf455836e78109d2f564d156 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Sun, 22 Apr 2012 11:26:01 -0700 Subject: [PATCH] apps forked from zygote run in default cgroup zygote and it's children, including system_server and all app processes, currently start in root cgroup. Most app threads eventually join either bg_noninteractive or foreground cgroups, but we can't depend on that. This change puts system_server and all app processes in the system default cgroup aka foreground instead. See also bug 6376294 which will provide a more general way of configuring cgroups. Excerpt of ps -P -t before fix. Note that app u0_a7 has some threads in root cgroup: USER PID PPID VSIZE RSS PCY WCHAN PC NAME root 91 1 441308 35052 ffffffff 400d4bf8 S zygote root 1838 91 441308 35052 c009c0c4 400d5bdc S ReferenceQueueD root 1840 91 441308 35052 c009c0c4 400d5bdc S FinalizerDaemon root 1842 91 441308 35052 c009c0c4 400d5bdc S FinalizerWatchd u0_a7 1378 91 461036 28676 ffffffff 400d59b0 S com.google.android.calendar u0_a7 1380 1378 461036 28676 c009c0c4 400d5bdc S GC u0_a7 1383 1378 461036 28676 c00827fc 400d5494 S Signal Catcher u0_a7 1384 1378 461036 28676 c0408d14 400d569c S JDWP u0_a7 1385 1378 461036 28676 c009c0c4 400d5bdc S Compiler u0_a7 1386 1378 461036 28676 c009c0c4 400d5bdc S ReferenceQueueD u0_a7 1387 1378 461036 28676 c009c0c4 400d5bdc S FinalizerDaemon u0_a7 1388 1378 461036 28676 c009c0c4 400d5bdc S FinalizerWatchd u0_a7 1389 1378 461036 28676 fg c035ac7c 400d4ad4 S Binder_1 u0_a7 1390 1378 461036 28676 fg c035ac7c 400d4ad4 S Binder_2 u0_a7 1393 1378 461036 28676 c009c0c4 400d5bdc S pool-1-thread-1 u0_a7 1395 1378 461036 28676 bg c009c0c4 400d5bdc S AsyncTask #1 u0_a7 1410 1378 461036 28676 c009c0c4 400d5bdc S pool-2-thread-1 u0_a7 1411 1378 461036 28676 bg c009c0c4 400d5bdc S AsyncTask #2 u0_a7 1428 1378 461036 28676 c01258cc 400d59b0 S AsyncQueryWorke u0_a7 1469 1378 461036 28676 bg c009c0c4 400d5bdc S AsyncTask #3 u0_a7 1563 1378 461036 28676 c009c0c4 400d5bdc S pool-3-thread-1 u0_a7 1564 1378 461036 28676 bg c009c0c4 400d5bdc S AsyncTask #4 After the fix, now only kernel workers and native system services run in root cgroup: USER PID PPID VSIZE RSS PCY WCHAN PC NAME root 91 1 441304 35048 ffffffff 4007abf8 S zygote root 1490 91 441304 35048 c009c0c4 4007bbdc S ReferenceQueueD root 1491 91 441304 35048 c009c0c4 4007bbdc S FinalizerDaemon root 1493 91 441304 35048 c009c0c4 4007bbdc S FinalizerWatchd u0_a7 1335 91 460032 32124 bg ffffffff 4007b9b0 S com.google.android.calendar u0_a7 1337 1335 460032 32124 bg c009c0c4 4007bbdc S GC u0_a7 1338 1335 460032 32124 bg c00827fc 4007b494 S Signal Catcher u0_a7 1341 1335 460032 32124 bg c0408d14 4007b69c S JDWP u0_a7 1342 1335 460032 32124 bg c009c0c4 4007bbdc S Compiler u0_a7 1343 1335 460032 32124 bg c009c0c4 4007bbdc S ReferenceQueueD u0_a7 1344 1335 460032 32124 bg c009c0c4 4007bbdc S FinalizerDaemon u0_a7 1345 1335 460032 32124 bg c009c0c4 4007bbdc S FinalizerWatchd u0_a7 1346 1335 460032 32124 fg c035ac7c 4007aad4 S Binder_1 u0_a7 1347 1335 460032 32124 fg c035ac7c 4007aad4 S Binder_2 u0_a7 1351 1335 460032 32124 bg c009c0c4 4007bbdc S AsyncTask #1 u0_a7 1380 1335 460032 32124 bg c01258cc 4007b9b0 S AsyncQueryWorke u0_a7 1417 1335 460032 32124 bg c009c0c4 4007bbdc S AsyncTask #2 u0_a7 1452 1335 460032 32124 bg c009c0c4 4007bbdc S AsyncTask #3 u0_a7 1555 1335 460032 32124 bg c01258cc 4007b9b0 S Thread-134 u0_a7 1691 1335 460032 32124 bg c009c0c4 4007bbdc S pool-3-thread-1 u0_a7 1692 1335 460032 32124 bg c009c0c4 4007bbdc S AsyncTask #4 Not shown, but system_server also runs in fg (it already did; this change didn't affect that). Change-Id: I516960a102c9d59fc9bfb5888d90a7645d178dcf --- vm/native/dalvik_system_Zygote.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/vm/native/dalvik_system_Zygote.cpp b/vm/native/dalvik_system_Zygote.cpp index 5ee5b91be..87655c65b 100644 --- a/vm/native/dalvik_system_Zygote.cpp +++ b/vm/native/dalvik_system_Zygote.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #if defined(HAVE_PRCTL) # include @@ -460,6 +461,12 @@ static pid_t forkAndSpecializeCommon(const u4* args, bool isSystemServer) dvmAbort(); } + err = set_sched_policy(0, SP_DEFAULT); + if (err < 0) { + ALOGE("cannot set_sched_policy(0, SP_DEFAULT): %s", strerror(-err)); + dvmAbort(); + } + /* * Our system thread ID has changed. Get the new one. */ -- 2.11.0