最近,我试图用保留PARALLEL_MAKE和BB_NUMBER_THREADS空白的方式启动yocto任务,例如注释掉,然后在主机上用48或64 vCPU启动构建。构建失败了。在32 vCPU的情况下,它仍然工作。Yocto仍然是老Krogoth,目前无法更新。有没有人知道是否有超过32 vCPU的限制?这仅仅是针对较老的Yocto版本,还是一般的问题?
Update:该错误与一个自定义的方法有关,该菜谱用于编译一个rnnoise:
../rnnoise-plugin/1.0-r0/temp/log.do_compile.1449627
rnnoise-plugin/1.0-r0/asound-pcm-plugin-rnnoise.c:16:28: fatal error: alsa/asoundlib.h: No such file or directory
#include <alsa/asoundlib.h>
^如前所述,只有在48或64 vCPU主机上编译时,PARALLEL_MAKE和BB_NUMBER_THREADS才会出现此错误。如果我设置了PARALLEL_MAKE="-j 32"和BB_NUMBER_THREADS="32",那么它编译时不会出现任何错误。
发布于 2022-01-06 10:30:55
在使用这么多线程进行编译时,您似乎遇到了竞争条件。
yocto引用建议设置PARELLEL_MAKE,因此make在使用多个物理CPU时最多使用20个线程。如果您的系统只有一个CPU,这可能是一个虚拟化问题。
对于单个套接字系统(即一个CPU),在构建过程中不必重写此变量以获得最佳的并行性。但是,如果您有非常大的系统使用多个物理CPU,则可能需要确保PARALLEL_MAKE变量的设置不高于"-j 20“。
为了提高构建速度,您可以尝试通过修补适当的Makefile (调试并行使竞赛)来解决这个依赖关系问题。
编辑
当覆盖特定包的配方时,可以为其设置PARALLEL_MAKE,这允许使用make -j 2编译一个特定的包,例如,其他包使用最大的并行性。
因此,在发生依赖问题的包的配方中将PARALLEL_MAKE设置为较低的值可能是一个合适的解决办法。
但是请记住,yocto引用还建议将BB_NUMBER_THREADS (没有特定于包的参数)限制在具有多个CPU的大型系统上,这可能是使用硬件虚拟化时的情况。
https://stackoverflow.com/questions/70597349
复制相似问题