我有一个用于定制硬件的嵌入式linux (OpenWrt)项目。内核或应用程序中的任何更改都需要重新编译完整的映像或应用程序。而且重新编译的速度非常慢。为了减少这种痛苦,购买了基于AMD Threadripper 3970X的工作站,具有128 1Tb和1TB固态硬盘。该CPU的Testbenches显示了120秒的linux内核编译时间。但是我得到了更多的编译时间。
第一次编译完整镜像的时间从以下减少:

至:

从以下方面减少重复的图像编译:

至:

包重新编译($ time make package/tensorflow/compile)从:

至:

例如,编译时间减少了2-7倍。在第一次映像编译期间,需要从网络下载所有必要的源代码。我有快速以太网(100Mb/s)连接到非腰部时间。我使用RAMDISK:
$ sudo mkdir /mnt/ramdisk
$ sudo mount -t tmpfs -o rw,size=64G tmpfs /mnt/ramdisk存储所有的源文件,对象和临时文件,所以我相信没有IO损失。
make -j64用来编译它。我发现在编译过程中很少加载所有64个内核:

我主要看到以下几点:

或者甚至是这样:

所以我不能相信更快的编译不能实现。有人能给我一些提示/建议吗?如何加快GCC C/C++交叉编译的速度?一些搜索将我指向distcc和Parallel GCC,但我没有使用它的经验,所以不确定这是否是我需要的,因为OpenWrt has almost nothing在他们的手册中解释了如何加快构建过程。
发布于 2021-08-08 15:56:03
在linux中,有一个增量构建的概念,所以第一次构建将需要时间,但下一次您只需要构建更改或添加的部分。不需要重建所有的东西。在这种情况下,构建速度会更快。
CPU的所有内核不会一直加载。这取决于当前有多少任务正在运行。假设您的系统中有8个核心,但只有6个任务在运行。在这种情况下,所有内核将不会完全加载。
https://stackoverflow.com/questions/68665890
复制相似问题