ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

1850元X99平台实战:E5-2696V3编译Android 12源码全记录

1850元X99平台实战:E5-2696V3编译Android 12源码全记录 1. 缘起为什么我会盯上这套1850元的X99平台先说结论这套配置是我在二手市场蹲了将近三周才凑齐的主板、CPU、内存、散热四大件加起来1850元出头目标很明确——用最低的成本搭一台能扛住Android 12源码编译的多核工作站。很多人听到X99和E5-2696V3这两个词第一反应是洋垃圾矿渣电老虎但如果你真正算过编译Android源码的时间账和硬件账就会发现这套组合在特定场景下的性价比高得离谱。Android 12的AOSP源码树完整拉下来大概在100GB上下编译产物再占掉100GB到150GB一次全量编译在四核八线程的家用平台上跑六七个小时是常态中间还可能因为内存不足直接OOM中断。而E5-2696V3这颗U是18核36线程Haswell-EP架构基础频率2.3GHz全核睿频能到2.8GHz单核睿频3.6GHz三级缓存45MBTDP 145W。它的多核性能放在今天依然能打尤其是编译这种高度并行的任务核心数就是硬道理。我选它的核心理由有三条。第一核心数够多36个线程在make -j的时候能明显压缩编译时间Android编译的Soong/Ninja体系对多核的利用率相当高。第二内存通道够宽X99平台支持四通道DDR4我配了4条16GB的ECC REG内存组成64GB四通道编译过程中链接阶段的内存带宽瓶颈能缓解不少。第三总价够低CPU现在二手价大概300到400元主板华南X99或者技嘉X99-UD4之类的在400到600元内存4条16GB REG ECC大概400元剩下散热和电源用现有的整体压在1850元完全可行。注意E5-2696V3是LGA2011-3接口必须配X99或者C612芯片组的主板别买成LGA2011的X79板子针脚不兼容插上去直接报废。适合看这篇内容的人有三类一是想低成本搭建编译环境的学生或者独立开发者二是手里有旧X99平台想榨干剩余价值的老玩家三是对洋垃圾平台好奇但不知道怎么下手的新手。我会把选型逻辑、装机细节、系统配置、编译实测、踩坑记录全部摊开讲你照着抄作业就行。2. 硬件选型与装机每一分钱花在哪2.1 CPU与主板的搭配逻辑E5-2696V3这颗U有两个版本一个是正式版QGN7一个是QS正显版两者在功能和性能上基本一致但QS版价格通常便宜几十块。我买的是QS正显版到手价360元步进是M0。这里要提醒一句买之前一定问清楚是不是正显正显的意思是CPU-Z里能正确识别型号不显的版本虽然也能用但后续排查问题时会很麻烦。主板我选的是华南X99-F8D双路大板但只上了一颗U。为什么选双路板子上单路因为这块板子供电用料比单路版扎实8相供电带2696V3绰绰有余而且BIOS对E5 V3的支持比较成熟内存兼容性也好。价格是520元带挡板和SATA线。华南板子的口碑两极分化我的实际体验是只要不超频、不折腾内存时序默认用还是很稳的。配件型号二手价格备注CPUE5-2696V3 QS正显360元18核36线程LGA2011-3主板华南X99-F8D520元双路板单路用供电扎实内存三星16GB DDR4 ECC REG 2133400元4条组四通道共64GB散热冰曼6热管2011专用90元压145W够用烤机85度以内电源长城500W自有0元单路12V输出够硬盘铠侠RC20 1TB自有0元NVMe编译盘机箱先马黑洞自有0元风道还行合计1370元不含自有配件等等这里合计是1370元标题说的1850元是怎么回事因为我还额外买了一块二手的亮机卡GT 71080元用于装系统时输出显示以及一根NVMe转接卡40元再加上运费和零零碎碎的小件最终落地价在1850元左右。如果你手里有闲置显卡和硬盘成本可以压得更低。2.2 内存选择的坑与技巧X99平台的内存兼容性是出了名的挑。我一开始图便宜买了两条普通DDR4 2400台式机内存插上去直接不亮后来换成ECC REG才正常。E5 V3系列支持DDR4 ECC REG内存而且REG内存比普通台式机内存便宜不少16GB单条现在二手价100元左右四通道插满64GB也就400元。插内存的时候注意插槽顺序华南X99-F8D的说明书上标了四通道的插法一般是隔槽插具体是DIMM1、DIMM3、DIMM5、DIMM7这样。如果插错了系统可能只识别双通道甚至单通道编译时的内存带宽会打对折。我实测四通道2133MHz的内存带宽在AIDA64里读写在55000MB/s左右双通道只有28000MB/s差距非常明显。提示REG ECC内存的颗粒一般是服务器拆机条买的时候让卖家拍一下颗粒照片避开那种打磨过或者有明显维修痕迹的条子。三星、海力士、镁光的原厂颗粒最稳。2.3 散热与供电的实测数据2696V3的TDP是145W但全核睿频跑满的时候实际功耗能到160W到180W。我用的是冰曼6热管双风扇散热器2011专用扣具待机温度38度AIDA64单烤FPU十分钟后温度稳定在82度到85度之间没有降频。如果你要长时间编译建议上240水冷或者更好的风冷把温度压在75度以内会更稳。电源方面整机满载功耗实测在280W到320W之间含显卡和硬盘一个额定500W的正规品牌电源完全够用。但要注意X99主板通常需要双8pin CPU供电如果你的电源只有一个8pin需要买一根8pin转双8pin的转接线或者直接用单8pin也能点亮但高负载下可能有隐患。3. 系统安装与编译环境搭建3.1 Ubuntu版本的选择与安装编译Android 12官方推荐的系统是Ubuntu 20.04 LTS但我实测Ubuntu 22.04 LTS也能跑只是需要额外装一些依赖库。我最终选的是Ubuntu 20.04.6原因是AOSP的官方文档和社区资料大多基于这个版本遇到问题好搜解决方案。安装过程没什么特别的用Rufus把ISO写到U盘BIOS里关掉Secure Boot从U盘启动一路下一步。分区的时候我建议给/home单独分大一点因为AOSP源码和编译产物加起来能到250GB我分了300GB给/home根目录给了100GB剩下的给swap。swap建议给32GB以上编译过程中链接阶段内存峰值能到50GB64GB物理内存加上swap基本不会OOM。装完系统第一件事是换国内源不然apt update能等到天荒地老。我用的是清华源编辑/etc/apt/sources.list把里面的archive.ubuntu.com和security.ubuntu.com替换成mirrors.tuna.tsinghua.edu.cn然后sudo apt update sudo apt upgrade -y。3.2 编译依赖的安装与常见报错AOSP的依赖包列表在官方文档里有但那个列表是给Ubuntu 18.04的20.04上有些包名变了。我整理了一份实测可用的安装命令sudo apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev \ gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev \ libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig \ python3 python3-pip libssl-dev libelf-dev bc rsync这里有几个坑要重点说。第一libncurses5在20.04上默认没有需要先添加focal的源或者手动装deb包否则编译到一半会报cannot find -lncurses。第二libssl-dev的版本很关键Ubuntu 20.04自带的是1.1.1fAOSP 12能直接用如果你用22.04自带的OpenSSL 3.0编译时会报一堆弃用警告甚至错误需要手动降级。第三Python必须是Python 3AOSP 12已经全面转向Python 3Python 2的依赖包不用装了。装完依赖后配置git身份和repo工具git config --global user.name Your Name git config --global user.email youexample.com mkdir ~/bin curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo chmod ax ~/bin/repo export PATH~/bin:$PATH注意repo工具从清华源下载比从Google源快得多而且不会中断。下载完后记得把~/bin加到PATH里否则后面repo init会提示找不到命令。3.3 源码下载与分支选择Android 12对应的AOSP分支是android-12.0.0_r34我选的是这个分支因为它是12的最后一个稳定版本bug相对少。初始化仓库的命令mkdir ~/aosp cd ~/aosp repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r34 repo sync -j8 --no-clone-bundle --no-tags-j8是并发数我的36线程理论上可以开更高但清华源的带宽有限开太高反而容易断流。实测-j8下载100GB左右的源码大概需要4到6小时取决于网络状况。--no-clone-bundle和--no-tags能省掉不少不必要的下载量。源码下载完后还需要下载预编译的驱动和工具链。AOSP 12的编译需要Clang和Jack虽然Jack在12里已经被Soong取代了大部分功能这些在prebuilts目录里已经包含了不用额外下载。但如果你要编译的是特定设备的镜像还需要下载对应的vendor blobs这个不在本次测试范围内。4. 编译实测18核36线程到底要多久4.1 编译参数的计算与设置AOSP编译的核心命令是source build/envsetup.sh然后lunch选择目标最后make -jN。这里的N就是并行任务数一般设置为CPU线程数的1到1.5倍。我的36线程理论上可以设-j36到-j54。但实际测试下来-j36和-j48的差距很小因为瓶颈不在CPU而在内存带宽和磁盘IO。我最终用的是-j36配合ccache加速。ccache的配置如下export USE_CCACHE1 export CCACHE_EXEC/usr/bin/ccache ccache -M 50G ccache -o compressiontrue50GB的ccache能缓存大部分编译产物第二次编译同一分支时能省掉60%到70%的时间。但第一次全量编译ccache是空的所以时间最长。4.2 全量编译时间实录我选的目标是aosp_arm64-eng这是最通用的ARM64工程版镜像适合做编译性能测试。编译命令source build/envsetup.sh lunch aosp_arm64-eng make -j36第一次全量编译从开始到生成system.img总共耗时1小时52分钟。这个成绩放在1850元的平台上我个人是相当满意的。作为对比我之前用一台i7-87006核12线程编译同样的目标耗时是3小时40分钟2696V3几乎快了一倍。编译过程中的资源监控数据阶段CPU占用内存占用磁盘写入Soong分析200%8GB低内核编译3200%12GB中框架编译3500%28GB高链接打包1800%48GB极高可以看到链接打包阶段是内存峰值最高的时刻64GB内存加上32GB swap刚好扛住没有出现OOM。如果你的内存只有32GB这个阶段大概率会失败建议至少上48GB。4.3 增量编译与ccache效果第二次编译前我改了一个frameworks/base里的Java文件然后重新make -j36。因为有ccache这次只用了18分钟就完成了增量编译和打包。ccache的命中率在92%左右效果非常明显。如果你经常需要改代码后重新编译ccache是必开的。但要注意ccache的缓存目录不要放在机械硬盘上否则缓存读写的速度会成为新瓶颈。我放在NVMe盘上ccache的读写速度在2000MB/s以上基本不影响编译节奏。提示ccache -s可以查看缓存命中率和大小定期用ccache -C清理一下避免缓存无限膨胀占满磁盘。5. 常见问题与排查技巧实录5.1 编译过程中的典型报错报错一ninja: error: manifest build.ninja still dirty after 100 tries这个报错通常是因为系统时间不对或者文件时间戳混乱。解决方法是sudo hwclock --systohc同步硬件时钟然后make clean重新编译。如果还不行检查/etc/fstab里有没有noatime选项加上它能避免文件访问时间戳干扰。报错二error: undefined reference to SSL_get1_peer_certificate这是OpenSSL版本不匹配导致的。Ubuntu 22.04自带的OpenSSL 3.0把SSL_get_peer_certificate改名成了SSL_get1_peer_certificate而AOSP 12的代码还在用旧名字。解决方法是在external/boringssl里打补丁或者直接换回Ubuntu 20.04。报错三Out of memory: Killed process内存不足被OOM Killer杀了。解决方法有三个一是加内存二是加swap三是降低-j的数值。我建议优先加swap32GB的swap文件用fallocate创建比分区灵活。5.2 硬件层面的排查经验X99平台最常见的问题是内存识别不全。如果你插了4条内存但系统只认2条先检查插槽顺序再检查内存条是否插紧最后用橡皮擦擦一下金手指。如果还是不认可能是CPU内存控制器的问题试着把CPU拆下来重新安装注意针脚有没有弯。另一个常见问题是主板BIOS版本太老不支持V3系列的CPU。华南X99-F8D出厂BIOS一般支持V3和V4但如果你买的是库存老板子可能需要先刷BIOS。刷BIOS需要一颗能点亮的CPU如果你手里没有可以找卖家代刷或者买的时候直接让卖家刷好。问题现象可能原因解决方法开机不亮风扇转内存不兼容换ECC REG内存只识别部分内存插槽顺序错按说明书隔槽插编译中随机重启电源功率不足换额定500W以上电源温度过高降频散热器压不住换240水冷或6热管以上风冷编译报错缺库依赖没装全按本文3.2节补装5.3 独家避坑技巧第一个技巧编译前先跑一次make -j36但不改任何代码让ccache预热。这样你真正改代码后的增量编译会快很多。我习惯在拉完源码后先全量编译一次把ccache填满后面就舒服了。第二个技巧把out目录单独挂一块SSD。AOSP的out目录读写非常频繁如果和源码放在同一块盘上IO竞争会很严重。我用了两块NVMe一块放源码一块放out编译时间能再压缩10%左右。第三个技巧用tmux或者screen跑编译。编译动辄一两个小时如果SSH断了或者终端关了编译就中断了。用tmux开一个会话断线后重新attach编译继续跑不影响。第四个技巧监控温度用sensors命令不要用图形界面。watch -n 5 sensors每5秒刷新一次编译过程中随时看一眼温度超过90度就赶紧停下来检查散热。6. 这套平台还能怎么玩编译Android只是这套X99平台的一个应用场景。36线程64GB内存的配置拿来跑虚拟机集群、做视频转码、跑CI/CD流水线都很合适。我目前还在上面跑了几个Docker容器做代码仓库的镜像和自动化构建CPU占用常年不到20%非常从容。如果你也想捡一套类似的平台我的建议是优先保证内存和主板的质量CPU反而没那么容易坏。二手CPU一般都能稳定运行但主板和内存的暗病比较多买的时候尽量选支持7天无理由的卖家到手后跑一遍MemTest86和AIDA64稳定性测试确认没问题再确认收货。最后分享一个我在实际使用中总结的小经验X99平台的BIOS里有一个CPU C-State选项编译时建议关掉。C-State是节能状态开启时CPU会在空闲时降频虽然省电但编译过程中频繁的唤醒和休眠会增加延迟。关掉后编译时间能稳定不少代价是待机功耗从30W涨到50W左右我觉得这个交换是值得的。
返回列表