Android O 绑定SurfaceFlinger到大核
目前的平台是big.LITTLE 架构,遇到一个卡顿问题,怀疑和小核上中断过于频繁有关,所以想把SF绑定到大核看看
首先top获取SurfaceFlinger的pid
707 system -2 -20 98M 24M 6.8M S 17.0 0.4 541:00.94 surfaceflinger
通过taskset 绑定
adb shell
$ taskset -p f0 707 //f0 是掩码 11110000,大核4-7都可以运行
但是会出错
pid 707's current affinity mask: f
taskset: failed to set 707's affinity: Invalid argument
也就是SF目前的affinity mask是f,只能运行在小核的意思,肯定是被限制了,确认cpuset信息
SurfaceFlinger的cpuset
首先找到该的cpuset分组
$ cat /proc/707/cpuset
/system-background //属于system-background分组
$ cd /dev/cpuset/system-background/
查看CPU限制情况
$ cat /dev/cpuset/system-background/cpus
0-3 //限制在小核
$ /dev/cpuset/system-background/tasks 也能看到707进程
解决cgroup限制问题
因为forground 的cpus是0-7,所以可以把sf从system-background迁到forground分组
$ echo 707 > /dev/cpuset/foreground/tasks
成功绑定到大核
$ taskset -p f0 707
pid 707's current affinity mask: ff
pid 707's new affinity mask: f0