使用taskset将task绑定到指定的CPU上

目前的平台是big.LITTLE 架构,遇到一个卡顿问题,怀疑和小核上中断过于频繁有关,所以想把SF绑定到大核看看。

首先ps -e获取SurfaceFlinger的pid

:/ # ps -e | grep "surfaceflinger"                                                                                                                                                                  
system         347     1  103288  21192 SyS_epoll_wait 70e0ffd704 S surfaceflinger 

通过taskset绑定:

adb shell  
$ taskset -p f0 707  //f0 是掩码 11110000,大核4-7都可以运行 

但是出错了:

:/ # taskset -p 0xf0 347                                                                                                                                                                          
pid 347's current affinity mask: f  
taskset: bad mask '0xf0' 

从上面的信息可以看到,sf只能在小core上面运行,但是修改失败,check以下:

:/ # cat /proc/347/cpuset                                                                                                                                                                         
/system-background  
:/ # cat /dev/cpuset/system-background/cpus                                                                                                                                                         
0-3  

充分验证了,sf是后台进程,被限制在小core上面,我们看下其他group cpu的可使用情况

:/ # cat /dev/cpuset/top-app/cpus                                                                                                                                                                   
0-7  //ff
:/ # cat /dev/cpuset/foreground/cpus                                                                                                                                                                
0-5  //3f

所以为了能够修改,需要把sf添加到对应的进程组内

:/ # echo 347 > /dev/cpuset/foreground/task                                                                                                                                                         
:/ # taskset -p 30 347                                                                                                                                                                          
pid 347's current affinity mask: 3f  
pid 347's new affinity mask: 30  
:/ # echo 347 > /dev/cpuset/top-app/tasks                                                                                                                                                           
:/ # taskset -p f0 347                                                                                                                                                                              
pid 347's current affinity mask: ff  
pid 347's new affinity mask: f0  

至此,成功绑定你想绑定的cpu上。

上面的top-app,foreground,system-background信息的设定在如下位置:在如下文件设定
init.common.rc

on property:sys.boot_completed=1  
    # Setup final cpuset  
    write /dev/cpuset/top-app/cpus 0-7  
    write /dev/cpuset/foreground/boost/cpus 0-5  
    write /dev/cpuset/foreground/cpus 0-5  
    write /dev/cpuset/background/cpus 0-1  
    write /dev/cpuset/system-background/cpus 0-3  

OK,完毕,对于taskset的源码,主要的一点就是设置cpu的亲和数!!!

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值