Yocto Build Maxium PARALLEL_MAKE、BB_NUMBER_THREADS
Yocto Build Maxium PARALLEL_MAKE, BB_NUMBER_THREADS
我最近试图通过将 PARALLEL_MAKE
和 BB_NUMBER_THREADS
留空来启动 yocto 构建任务,例如注释掉并在具有 48 或 64 个 vCPU 的主机上开始构建。构建失败。对于 32 个 vCPU,它仍然有效。 Yocto 仍然是旧的 Krogoth,目前无法更新。有人知道是否存在超过 32 个 vCPU 的限制吗?这仅适用于较旧的 Yocto 版本还是通常是一个问题?
更新:错误与编译 rnnoise-plugin 的自定义配方有关:
../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>
^
如上所述,只有在 PARALLEL_MAKE
和 BB_NUMBER_THREADS
留空的 48 或 64 vCPU 主机上编译时,我才会收到此错误。如果我设置 PARALLEL_MAKE="-j 32"
和 BB_NUMBER_THREADS="32"
它编译没有任何错误。
使用那么多线程进行编译时,您似乎 运行 进入了竞争条件。
yocto 参考建议设置 PARELLEL_MAKE
,这样 make
在使用多个物理 CPU 时最多使用 20 个线程。如果您的系统只有一个 CPU,这可能是虚拟化问题。
For single socket systems (i.e. one CPU), you should not have to override this variable to gain optimal parallelism during builds. However, if you have very large systems that employ multiple physical CPUs, you might want to make sure the PARALLEL_MAKE variable is not set higher than "-j 20".
为了提高构建速度,您可以尝试通过修补相应的 Makefile (Debugging Parallel Make Races)
来解决此依赖性问题
编辑:
可以为特定包设置 PARALLEL_MAKE
,当在其配方中覆盖时,允许使用 make -j 2
编译一个特定包,例如而其他包使用最大并行度。
因此,在发生依赖性问题的包的配方中将 PARALLEL_MAKE
设置为较低的值可能是一个合适的解决方法。
但请记住,yocto 参考文献还建议在具有多个 CPU 的大型系统上将 BB_NUMBER_THREADS
(无包特定参数)限制为 20
,这可能是使用硬件虚拟化时的情况。
我最近试图通过将 PARALLEL_MAKE
和 BB_NUMBER_THREADS
留空来启动 yocto 构建任务,例如注释掉并在具有 48 或 64 个 vCPU 的主机上开始构建。构建失败。对于 32 个 vCPU,它仍然有效。 Yocto 仍然是旧的 Krogoth,目前无法更新。有人知道是否存在超过 32 个 vCPU 的限制吗?这仅适用于较旧的 Yocto 版本还是通常是一个问题?
更新:错误与编译 rnnoise-plugin 的自定义配方有关:
../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>
^
如上所述,只有在 PARALLEL_MAKE
和 BB_NUMBER_THREADS
留空的 48 或 64 vCPU 主机上编译时,我才会收到此错误。如果我设置 PARALLEL_MAKE="-j 32"
和 BB_NUMBER_THREADS="32"
它编译没有任何错误。
使用那么多线程进行编译时,您似乎 运行 进入了竞争条件。
yocto 参考建议设置 PARELLEL_MAKE
,这样 make
在使用多个物理 CPU 时最多使用 20 个线程。如果您的系统只有一个 CPU,这可能是虚拟化问题。
For single socket systems (i.e. one CPU), you should not have to override this variable to gain optimal parallelism during builds. However, if you have very large systems that employ multiple physical CPUs, you might want to make sure the PARALLEL_MAKE variable is not set higher than "-j 20".
为了提高构建速度,您可以尝试通过修补相应的 Makefile (Debugging Parallel Make Races)
来解决此依赖性问题编辑:
可以为特定包设置 PARALLEL_MAKE
,当在其配方中覆盖时,允许使用 make -j 2
编译一个特定包,例如而其他包使用最大并行度。
因此,在发生依赖性问题的包的配方中将 PARALLEL_MAKE
设置为较低的值可能是一个合适的解决方法。
但请记住,yocto 参考文献还建议在具有多个 CPU 的大型系统上将 BB_NUMBER_THREADS
(无包特定参数)限制为 20
,这可能是使用硬件虚拟化时的情况。