Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed607889 authored by Todd Kjos's avatar Todd Kjos Committed by Rom Lemarchand
Browse files

Actively mangage EAS schedtune nodes

Move foreground tasks to /sys/fs/cgroup/stune/boost/tasks (boosted
weight in EAS scheduler). Move background tasks to
/sys/fs/cgroup/stune/tasks (default weight). For services started
with init, set "foreground" services to boosted.

Change-Id: I0e489fad9510727c13e6754dabaf311c2391f395
parent 1589fa1b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -128,6 +128,9 @@ LOCAL_STATIC_LIBRARIES := liblog
ifneq ($(ENABLE_CPUSETS),)
LOCAL_CFLAGS += -DUSE_CPUSETS
endif
ifneq ($(ENABLE_SCHEDBOOST),)
LOCAL_CFLAGS += -DUSE_SCHEDBOOST
endif
LOCAL_CFLAGS += -Werror -std=gnu90
include $(BUILD_STATIC_LIBRARY)

@@ -140,6 +143,9 @@ LOCAL_SHARED_LIBRARIES := liblog
ifneq ($(ENABLE_CPUSETS),)
LOCAL_CFLAGS += -DUSE_CPUSETS
endif
ifneq ($(ENABLE_SCHEDBOOST),)
LOCAL_CFLAGS += -DUSE_SCHEDBOOST
endif
LOCAL_CFLAGS += -Werror
LOCAL_C_INCLUDES := $(libcutils_c_includes)
include $(BUILD_SHARED_LIBRARY)
+17 −1
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ static int fg_cgroup_fd = -1;
// File descriptors open to /dev/cpuset/../tasks, setup by initialize, or -1 on error
static int bg_cpuset_fd = -1;
static int fg_cpuset_fd = -1;
static int bg_schedboost_fd = -1;
static int fg_schedboost_fd = -1;

/* Add tid to the scheduling group defined by the policy */
static int add_tid_to_cgroup(int tid, int fd)
@@ -126,6 +128,12 @@ static void __initialize(void) {
        fg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC);
        filename = "/dev/cpuset/background/tasks";
        bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC);
#ifdef USE_SCHEDBOOST
        filename = "/sys/fs/cgroup/stune/foreground/tasks";
        fg_schedboost_fd = open(filename, O_WRONLY | O_CLOEXEC);
        filename = "/sys/fs/cgroup/stune/tasks";
        bg_schedboost_fd = open(filename, O_WRONLY | O_CLOEXEC);
#endif
    }
#endif

@@ -251,17 +259,20 @@ int set_cpuset_policy(int tid, SchedPolicy policy)
    pthread_once(&the_once, __initialize);

    int fd;
    int boost_fd;
    switch (policy) {
    case SP_BACKGROUND:
        fd = bg_cpuset_fd;
        boost_fd = bg_schedboost_fd;
        break;
    case SP_FOREGROUND:
    case SP_AUDIO_APP:
    case SP_AUDIO_SYS:
        fd = fg_cpuset_fd;
        boost_fd = fg_schedboost_fd;
        break;
    default:
        fd = -1;
        boost_fd = fd = -1;
        break;
    }

@@ -270,6 +281,11 @@ int set_cpuset_policy(int tid, SchedPolicy policy)
            return -errno;
    }

    if (boost_fd > 0 && add_tid_to_cgroup(tid, boost_fd) != 0) {
        if (errno != ESRCH && errno != ENOENT)
            return -errno;
    }

    return 0;
#endif
}
+15 −1
Original line number Diff line number Diff line
@@ -48,6 +48,17 @@ on init
    chown root system /sys/fs/cgroup/memory/sw/tasks
    chmod 0660 /sys/fs/cgroup/memory/sw/tasks

    # Create energy-aware scheduler tuning nodes
    mkdir /sys/fs/cgroup/stune
    mount cgroup none /sys/fs/cgroup/stune schedtune
    mkdir /sys/fs/cgroup/stune/foreground
    chown system system /sys/fs/cgroup/stune
    chown system system /sys/fs/cgroup/stune/foreground
    chown system system /sys/fs/cgroup/stune/tasks
    chown system system /sys/fs/cgroup/stune/foreground/tasks
    chmod 0664 /sys/fs/cgroup/stune/tasks
    chmod 0664 /sys/fs/cgroup/stune/foreground/tasks

    mkdir /system
    mkdir /data 0771 system system
    mkdir /cache 0770 system cache
@@ -165,13 +176,16 @@ on init
    chown system system /dev/cpuset/foreground
    chown system system /dev/cpuset/foreground/boost
    chown system system /dev/cpuset/background
    chown system system /dev/cpuset/system-background
    chown system system /dev/cpuset/tasks
    chown system system /dev/cpuset/foreground/tasks
    chown system system /dev/cpuset/foreground/boost/tasks
    chown system system /dev/cpuset/background/tasks
    chown system system /dev/cpuset/system-background/tasks
    chmod 0664 /dev/cpuset/foreground/tasks
    chmod 0664 /dev/cpuset/foreground/boost/tasks
    chmod 0664 /dev/cpuset/background/tasks
    chmod 0664 /dev/cpuset/system-background/tasks
    chmod 0664 /dev/cpuset/tasks


@@ -646,7 +660,7 @@ service surfaceflinger /system/bin/surfaceflinger
    user system
    group graphics drmrpc
    onrestart restart zygote
    writepid /dev/cpuset/system-background/tasks
    writepid /sys/fs/cgroup/stune/foreground/tasks /dev/cpuset/system-background/tasks

service drm /system/bin/drmserver
    class main
+1 −1
Original line number Diff line number Diff line
@@ -5,4 +5,4 @@ service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-sys
    onrestart write /sys/power/state on
    onrestart restart media
    onrestart restart netd
    writepid /dev/cpuset/foreground/tasks
    writepid /dev/cpuset/foreground/tasks /sys/fs/cgroup/stune/foreground/tasks
+2 −2
Original line number Diff line number Diff line
@@ -5,10 +5,10 @@ service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-s
    onrestart write /sys/power/state on
    onrestart restart media
    onrestart restart netd
    writepid /dev/cpuset/foreground/tasks
    writepid /dev/cpuset/foreground/tasks /sys/fs/cgroup/stune/foreground/tasks

service zygote_secondary /system/bin/app_process64 -Xzygote /system/bin --zygote --socket-name=zygote_secondary
    class main
    socket zygote_secondary stream 660 root system
    onrestart restart zygote
    writepid /dev/cpuset/foreground/tasks
 No newline at end of file
    writepid /dev/cpuset/foreground/tasks /sys/fs/cgroup/stune/foreground/tasks
Loading