要编译许多CPU核心(说12)工作站上的软件包,配置阶段往往需要更长的时间比实际编译阶段,因为./configure
做测试一个接一个,而make -j
运行gcc
以及其他命令并行。
我觉得剩下的11个内核在大多数情况下都等待空闲时间./configure
来完成,这是对资源的巨大浪费。为什么需要按顺序进行测试?每个测试是否相互依赖?我可能会误会,但看起来其中大多数是独立的。
更重要的是,有什么方法可以加快速度./configure
吗?
编辑:为了说明这种情况,这是GNU Coreutils的示例
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
结果:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
使用coreutils-8.9,./configure
所需时间是的6倍make
。尽管./configure
使用的CPU时间更少(请查看“用户”和“ sys”时间),但由于没有并行化,因此它会花费更长的时间(“实际”)。我已经重复测试几次(相关文件可能保留在内存缓存中),并且时间在10%以内。