模拟2个用户同时登陆一个4核心处理器的电脑进行Android编译,编译选项make -j8,CPU配置如下:
bhsong@SHA-IT-Lintester01:~/workspace/android/kernel$cat /proc/cpuinfo
processor :0
vendor_id :GenuineIntel
cpu family :6
model :37
model name :Intel(R) Core(TM) i3 CPU 550 @ 3.20GHz
processor :1
vendor_id :GenuineIntel
cpu family :6
model :37
model name :Intel(R) Core(TM) i3 CPU 550 @ 3.20GHz
processor :2
vendor_id :GenuineIntel
cpu family :6
model :37
model name :Intel(R) Core(TM) i3 CPU 550 @ 3.20GHz
processor :3
vendor_id :GenuineIntel
cpu family :6
model :37
model name :Intel(R) Core(TM) i3 CPU 550 @ 3.20GHz
如果模拟 2 个用户同时登录服务器并且同时编译 Android ,我们分析一下 CPU 和磁盘利用率,如下图:
我们可以看出CPU的利用率保持在100%几乎不动(绝大多数时间在userspace运算而非进入kernel系统调用),而磁盘的占用率依然非常低,不超过10%。
基本可以看出由于受限于编译过程中等待CPU和Makefile的同步,Android编译过程中对IO的需求不大(或者此案例无法发挥),基本在1MB以内或者1MB左右徘徊。
到编译的后期阶段,主要工作变成了将编译结果拷贝到out目录,则呈现出IO需要增大的趋势,不过到install阶段,CPU利用率依然很高:
另外,也考察了一下内存的情况,这个编译电脑的内存是12G左右,2个用户编译几乎没有达到满载,看到的高峰时段如下:
bhsong@SHA-IT-Lintester01:/proc$ free
total used free shared buffers cached
Mem: 12255168 11840396 414772 0 654472 5788252
-/+ buffers/cache: 5397672 6857496
Swap: 4050940 5256 4045684
我们看到swap的使用情况很低,意味着内存尚为成为瓶颈要求磁盘虚拟内存,高峰时段free的memory一直都存在(高峰时段还剩下400MB),其中耗掉的内存中有多达6GB左右也是做文件系统cache用在,实际hold住的内存大概5.5GB。
由此,对于Android编译而言,选择高档CPU如16核心是重要需求,IO和内存不是主要的瓶颈。