Android OS提升编译速度

2019年7月3日

make不需要加参数-j,CPU已经到达100%。

编译时,我remmina远程连接到另一台电脑工作,remmina CPU占用约1%,我认为其影响可以忽略。

测试流程

  1. 删除out目录,删除ccache目录。
  2. 运行make,计算编译时间
  3. 计算启动操作系统到桌面的时间。对于模拟机,运行emulator命令。对于真机,运行time build/make/flash.sh
  4. 检出ART项目的master分支
  5. 运行make,计算编译时间
  6. 检出ART项目的debug分支
  7. 运行make,计算编译时间
  8. 计算启动操作系统到桌面的时间。对于模拟机,运行emulator命令。对于真机,运行time build/make/flash.sh
aosp_x86-eng
x86 32位系统
aosp_x86_64-eng
x86 64位系统
真机 arm64-aosp_angler-userdebug
第一次编译 总编译文件数 69256 89459 89626
编译用时 40:54 1:22:08 1:01:52
启动操作系统 56秒 30/44/43 1m54.160s
$ prebuilts/misc/linux-x86/ccache/ccache -s
cache directory                     /tmp/ccache
cache hit (direct)                   616
cache hit (preprocessed)              45
cache miss                         20280
called for link                      312
unsupported source language          354
files in cache                     61079
cache size                          10.8 Gbytes
max cache size                     100.0 Gbytes
cache directory                     /tmp/ccache
cache hit (direct)                   622
cache hit (preprocessed)              45
cache miss                         24320
called for link                      327
unsupported source language          402
files in cache                     71850
cache size                          19.3 Gbytes
max cache size                     100.0 Gbytes
cache directory                     /tmp/ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                         30891
called for link                      427
unsupported source language          813
files in cache                     92803
cache size                          17.1 Gbytes
max cache size                     100.0 Gbytes
第二次编译 总编译文件数 4316 5259 5289
编译用时 18:54 23:32 24:06
第三次编译 总编译文件数 2144 2801 2837
编译用时 11:20 14:38 14:55
启动操作系统 无法开机 无法开机 1m54.621s
$ prebuilts/misc/linux-x86/ccache/ccache -s
cache directory                     /tmp/ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                         30562
called for link                      432
unsupported source language          676
files in cache                     91897
cache size                          17.1 Gbytes
max cache size                     100.0 Gbytes
cache directory                     /tmp/ccache
cache hit (direct)                     8
cache hit (preprocessed)               0
cache miss                         35882
called for link                      453
unsupported source language          740
files in cache                    106082
cache size                          28.7 Gbytes
max cache size                     100.0 Gbytes
cache directory                     /tmp/ccache
cache hit (direct)                    12
cache hit (preprocessed)               0
cache miss                         36261
called for link                      448
unsupported source language          881
files in cache                    107110
cache size                          28.9 Gbytes
max cache size                     100.0 Gbytes

总结,aosp_x86-eng编译速度最快,编译所需文件最少。真机编译启动操作系统最慢,因为需要时间把镜像文件刷入真机。第二三次主要修改的是ART项目,对其进行增量编译,真机编译最慢。所以,如果经常修改ART项目,在没有编译目标要求的情况下,应针对aosp_x86-eng编译。

我原来针对真机编译,改为针对x86 32编译,若设全编译、ART小修改编译、启动操作系统次数比例为1:9:7,则编译测试效率可提升27%。