如何计算GNU make的-jN参数以及它如何影响我的android构建?

时间:2012-05-25 04:20:40

标签: android linux build makefile gnu-make

GNU make可以使用-jN参数处理并行任务,并且通常使用许多任务N,它们是用于构建的计算机上的硬件线程数的1到2倍。

E.g。在双E5520机器上(2个CPU,每个CPU 4个内核,每个内核2个线程),使用make -j16和make -j32之间的命令进行最快的构建。

现在我不太了解我的构建服务器但是 当我运行cat /proc/cpuinfo

时 它显示它有4个处理器 每个信息都是这样的

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i3 CPU         530  @ 2.93GHz
stepping    : 2
cpu MHz     : 2933.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5851.87
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

问题:

1>所以我在这里如何为我的构建计算N?

2>如果我的系统可以支持最多8个线程并且如果我提供make -j32怎么办?

3>如果我只使用make那么只运行1个线程进行编译?

1 个答案:

答案 0 :(得分:2)

使用-j选项不会伤害任何东西。它仅用于调整make应该使用的同时进程的数量,以便从系统中获得最大的性能以进行构建。

你可以将它设置为小于4,每个2核x 2超线程,如果你想让CPU时间更多可用于你正在做的其他事情(可能更快的浏览响应)。

您可以将其设置为4以上,以便其中一个进程正在使用每个执行单元,而其他处理器正在等待I / O.

如果你有足够的内存-j32不应该伤害任何东西,但它也无济于事。请参阅评论,了解您不想过度的原因。

如果您有一个软件包,您可以一直进行实验,看看哪个设置可以让它在不损害您的交互性能的情况下最快地构建。调整的另一种方法是查看 top 输出,并查看-j多处理级别,您在大多数情况下保持CPU利用率接近100%。

在他的 Linux Kernel in a Nutshell 一书[1]中,Greg Kroah-Hartman建议在设置-j选项时将执行单元的数量加倍。对于你来说,-j8

[1] Linux Kernel in a Nutshell ,Greg Kroah-Hartman,pg。 26. [http://www.kroah.com/lkn/]