android.bg in system_server primarily handles PSS collection, which is
not performance critical. Accordingly, bind it to little cores.
However, because threads in zygote-derived applications are only in a
single cpuset at a time, this also means the scheduling policy for
system_servershould never be reset by applyOomAdjLocked(). The only
time this happens is when system_server's ProcessRecord is first
created, and its scheduler configuration is already controlled by
init.rc. Configure the right defaults for system_server's scheduling
group so it's never modified from applyOomAdjLocked().
Test: android.bg is in background, rest of system_server is in fg
bug
70859548
Change-Id: Id8582e6d493c6b2d3390fdc45ac2396390744f06
Watchdog.getInstance().addMonitor(this);
Watchdog.getInstance().addThread(mHandler);
+
+ // bind background thread to little cores
+ // this is expected to fail inside of framework tests because apps can't touch cpusets directly
+ try {
+ Process.setThreadGroupAndCpuset(BackgroundThread.get().getThreadId(),
+ Process.THREAD_GROUP_BG_NONINTERACTIVE);
+ } catch (Exception e) {
+ Slog.w(TAG, "Setting background thread cpuset failed");
+ }
+
}
protected ActivityStackSupervisor createStackSupervisor() {
if (!mBooted && !mBooting
&& userId == UserHandle.USER_SYSTEM
&& (info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
+ // The system process is initialized to SCHED_GROUP_DEFAULT in init.rc.
+ r.curSchedGroup = ProcessList.SCHED_GROUP_DEFAULT;
+ r.setSchedGroup = ProcessList.SCHED_GROUP_DEFAULT;
r.persistent = true;
r.maxAdj = ProcessList.PERSISTENT_PROC_ADJ;
}