客户要求使用Antutu工具来测试android的性能,测试过程中发现多核CPU跑分与单核基本持平,后来使用Geekbench工具测试,结果同样,不明白为什么?

接着自己编译一个静态链接的coremark,下到android系统里面测试,发现结果是对,4核分值是单核的约4倍,因coremark并没有经android,所以结果对是自然的,所以问题应在android本身。

Coremark:

Single-core: 11275                Multi-core: 11275

进一步使用mpstat、perfmon的工具监测CPU,发现几乎所有的任务都被调度到CPU 0上,而其他CPU则近乎空闲。

Android多核与单核的性能持平的问题_第1张图片 mpstat -P ALL 1

使用ps -p命令,进一步确认几乎所有的任务都调度到CPU 0上

Android多核与单核的性能持平的问题_第2张图片

......

试图使用taskset命令把某一个进程亲合到CPU 0以为的CPU,发现不成功:

layerscape:/ # busybox taskset -p 0xf 4162  #指定此PID可以在4个CPU上跑

pid 4162's current affinity mask: 1

pid 4162's new affinity mask: 1   #返回1表示被Android限死在CPU 0上

至此,问题找到。但具体如何解决呢?CPU控制管理由CPU CGROUP来负责,而它则是通过其文件系统/dev/cpuset中的相关文件来实现,具体的几个文件分别如下,他们的当前值也如下:

/dev/cpuset/cpus 0-3

/dev/cpuset/background/cpus  0

/dev/cpuset/foreground/cpus  0

/dev/cpuset/system-background/cpus  0

/dev/cpuset/top-app/cpus  0

由此可见,虽然有4核,但所有几个权限组的都指定了只能调度到CPU 0上,使用echo修改这些之后,立马就可以发现任务可以调度到其他CPU上了。

layerscape:/ # echo 0-3 > /dev/cpuset/top-app/cpus

代码中关于CPU CGROUP管理设置初始配置在system/core/rootdir/init.rc文件,我们具体的配置则放置在device/nxp/layerscape/init.layerscape.rc,如下:

on init

    write /dev/cpuset/foreground/cpus 0-3

    write /dev/cpuset/background/cpus 0-3

    write /dev/cpuset/system-background/cpus 0-3

    write /dev/cpuset/top-app/cpus 0-3

它们会覆盖system/core/rootdir/init.rc中的初始配置,如此问题解决,最后Antutu测试结果为:

single-core: 8428            Multi-core: 32531

参看文献:

1. CPU Cgroup in android N and Huawei Mate 9 Implement

2. Android O 绑定SurfaceFlinger到大核

3. Android/Linux下CGroup框架分析及其使用

更多相关文章

  1. Android下Protobuff框架性能测试结果
  2. 发现自己喜欢了移动端开发--Android
  3. 在windows下使用cmd命令通过adb shell自动调用android模拟或真机
  4. Android测试教程(16):monkeyrunner简介
  5. 关于 Android 下的自动化测试
  6. 基于Eclipse的Android JNI层测试应用开发过程记录
  7. 可靠的功能测试--Espresso和Dagger2

随机推荐

  1. Android——文件路径(/mnt/sdcard/...)、
  2. 如何正确学习SAI板绘?sai绘画学习技巧!
  3. VMware 虚拟机图文安装和配置 Ubuntu Ser
  4. VUE:购物车页面:全选按钮 & 代码练习
  5. APICloud可视化开发初体验
  6. APP可视化开发,一键生成专业级源码,以APICl
  7. 苹果ios开发的基础语言介绍
  8. 苹果iOS开发语言用什么?
  9. 微信小程序通过code获取openid
  10. 如何学习画画?零基础学画画的步骤