我正在从事 Linux 内核开发项目(特别是 OpenEmbedded/Yocto 项目),其中内核和嵌入式软件编译是主要任务,而我的配备双核 Core i7-2620M @ 2.70GHz 的笔记本电脑根本无法满足要求。
如果我要购买或构建新系统,我应该如何确定组件和规格的优先顺序?例如,我是否应该以处理器中最少的 n 个核心为目标,然后将剩余的预算花在更快的硬盘或 RAM 上?
答案1
为了加快编译速度,您应该在 tmpfs 中创建目标文件,而不是在旋转硬盘中。由于源文件也缓存在内存中,因此可以安全地假设您受到 CPU 限制(假设您有足够的 RAM)。如果您有其他笔记本电脑/台式机,我建议将它们添加到编译器集群以缩短构建时间。编译通常可以并行进行。
至于硬件:
- 选择一个 SSD 来存储操作系统和源文件,这应该可以减少启动时间(将源读入文件系统缓存所需的时间)。
- 至少选择 8 GB RAM,建议使用 16 GB 或更多。我设法在 16GB tmpfs 上完成了 buildroot 构建,其中包含所有源文件和目标文件。
- 关注 CPU,核心/线程越多越好。
基准测试(时间以秒为单位,在没有其他重要进程运行的情况下进行三次试验,括号之间的标准差-jN
表示并行单元的数量):
CPU C/T RAM -j4 -j8 -j12 -j16 i5-460M2/4 8 GB 337(1.28)344(1.04) i5-23204/4 24 GB 163(2.35) 158(0.20) 159(0.50) 159(0.33) i7-37704/8 24 GB 133(0.31) 110(0.15) 108(0.06) 109(0.26) distcc(100 Mbit LAN,节点--路由器--节点) -j20(优先级:远程 i7-3770 16,本地 i5-460M 4):186(7.36) -j20(优先级:本地 i5-460M 4,远程 i7-3770 16):184(1.40) -j20(优先级:本地 i7-3770 16,远程 i5-460M 4):104(2.26) -j24(优先级:本地 i7-3770 16,远程 i5-460M 8):101(1.24)
C/T = 核心/线程,-j12、-j16 被跳过,因为无论如何这都会非常慢。
尚未考虑将源复制到 tmpfs(从 SSD)的时间,这些数字显示的是原始性能make bzImage modules
(基准测试脚本链接)。没有使用交换文件。
当我将笔记本电脑用作本地时,distcc 进程似乎受到 I/O 限制,在查看 vnstat 时,我发现 TX+RX 卡在 80 Mbit/s 左右。将本地 distcc 主机设置为 localhost(而不是节点的地址)也很重要,否则会导致性能下降(对于本地 i7-3770、远程 i5-460M,-j20 导致 144(sdev 0.65),这是 40 秒的性能损失!)。