公司编译环境经过多年迭代升级,由最开始的每人一台安装了Ubuntu 16.04加4T机械的i7主机,到后面的装了Ubuntu 16.04加16T NVMe阵列、5950x CPU、128G内存的多用户主机,再到现在的Ubuntu 24.04加32T NVMe + 机械硬盘的Bcachefs混合磁盘阵列、9950X CPU、192G内存、多用户加容器化环境的主机。
可以说硬件升级与软件环境升级极大提高了当前的工作流效率和硬件利用率。特别是多用户加容器化环境的组合,在同一台主机上就能支持从Android5 到 Android15的所有开发环境,不论是高通的AP还是CP的编译环境,甚至是Linux版本,都能完美兼容。高版本Ubuntu系统自带的高版本内核也带来了更加完善的驱动和文件系统支持,充分挖掘硬件性能,降低成本。

编译服务器环境配置简述:
在Ubuntu 24.04系统的基础上,安装SSH(用于Shell终端和VSCode远程)、samba(用于文件共享)等远程服务以及搭建存储池;再安装定制化的容器方案,并在容器中安装好不同Ubuntu系统的环境以及相关的SDK所依赖的组件;添加多个开发者用户,每个开发者都可以共享使用容器环境。
存储池推荐使用BTRFS或BCachefs。前者适用于全闪磁盘整列,性能更高;后者适用于混合磁盘阵列,在略微牺牲性能的情况下成本更低。这两个文件系统都是COW高级文件系统,可以支持透明压缩和引用拷贝等特性。利用透明压缩,可以将磁盘上的数据实时压缩,大多数情况下可以将存储到磁盘上的文件体积压缩1/3,进而极大降低硬件成本。利用引用拷贝,可以在极少写入硬盘的情况下将文件进行拷贝,比如多个用户可以拷贝同一份.repo文件夹,经过引用拷贝的文件不会占用磁盘空间,拷贝速度也非常快,这样就可以极大缩短代码拉取时间。另外在某些涉及文件拷贝的编译环节中,也是可以提高效率和减低磁盘空间占用,比如高通高版本安卓SDK中涉及到的QSSI文件夹拷贝到TARGET文件夹中,如果使用以上文件系统并结合引用拷贝,所需的时间相比普通拷贝可以缩短至1/10。
同样的,在容器环境安装的ccache编译器缓存,在配置引用拷贝后可以让Android C++代码编译速度有数十倍的提升。全量编译Android14的时间甚至可以缩短到50分钟以内。
编译服务器硬件配置简述:
处理器:AMD 9950X
内存:DDR5 48G * 2 6000Mhz及以上内存
硬盘:NVMe全闪磁盘阵列或bcachefs混合磁盘阵列
散热:液冷
磁盘如果是NVMe全闪磁盘阵列,推荐5 * 7.68T NVMe(读取密集型或混合密集型)组RAID5;如果是混合磁盘阵列,推荐1 * 7.68T(写入密集型或混合密集型) + 2 * 16T HDD,以上组合都可以有32T空间可用。此外再单独安装一块1T NVMe磁盘用于安装操作系统,条件允许的话可以再购买一块傲腾P4800X用于独立的sawp空间。
关于选购CPU,尽量使用AMD,整数计算能力更强,性价比更高。如果预算较低,可以选择家用级CPU,如果预算充分可以选购Zen4内核或更新的EPYC服务器CPU。
CPP编译时服务器CPU使用情况

编译规则解析时服务器CPU使用情况

全量编译高通Android 14所需时间

以上截图均来自9950X加液冷散热加全闪NVMe磁盘整理的主机。可以看到多线程编译时CPU主频可以保持在5.5Ghz,单线程编译时CPU主频可以保持在5.8Ghz,全量编译A14所耗费时间为47分钟。