diff mbox series

kbuild,bpf: pass make jobs' value to pahole

Message ID 20241102100452.793970-1-flo@geekplace.eu (mailing list archive)
State Accepted
Commit 09048d22b7825a5025cf7e135f7e3134daff4df2
Delegated to: BPF
Headers show
Series kbuild,bpf: pass make jobs' value to pahole | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch
bpf/vmtest-bpf-next-PR success PR summary
bpf/vmtest-bpf-next-VM_Test-1 success Logs for ShellCheck
bpf/vmtest-bpf-next-VM_Test-2 success Logs for Unittests
bpf/vmtest-bpf-next-VM_Test-3 success Logs for Validate matrix.py
bpf/vmtest-bpf-next-VM_Test-0 success Logs for Lint
bpf/vmtest-bpf-next-VM_Test-6 success Logs for aarch64-gcc / test (test_maps, false, 360) / test_maps on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-4 success Logs for aarch64-gcc / build / build for aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-7 success Logs for aarch64-gcc / test (test_progs, false, 360) / test_progs on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-5 success Logs for aarch64-gcc / build-release
bpf/vmtest-bpf-next-VM_Test-9 success Logs for aarch64-gcc / test (test_verifier, false, 360) / test_verifier on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-10 success Logs for aarch64-gcc / veristat
bpf/vmtest-bpf-next-VM_Test-12 success Logs for s390x-gcc / build-release
bpf/vmtest-bpf-next-VM_Test-8 success Logs for aarch64-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-16 success Logs for s390x-gcc / veristat
bpf/vmtest-bpf-next-VM_Test-19 success Logs for x86_64-gcc / build-release
bpf/vmtest-bpf-next-VM_Test-11 success Logs for s390x-gcc / build / build for s390x with gcc
bpf/vmtest-bpf-next-VM_Test-15 success Logs for s390x-gcc / test (test_verifier, false, 360) / test_verifier on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-17 success Logs for set-matrix
bpf/vmtest-bpf-next-VM_Test-18 success Logs for x86_64-gcc / build / build for x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-28 success Logs for x86_64-llvm-17 / build-release / build for x86_64 with llvm-17-O2
bpf/vmtest-bpf-next-VM_Test-33 success Logs for x86_64-llvm-17 / veristat
bpf/vmtest-bpf-next-VM_Test-34 success Logs for x86_64-llvm-18 / build / build for x86_64 with llvm-18
bpf/vmtest-bpf-next-VM_Test-27 success Logs for x86_64-llvm-17 / build / build for x86_64 with llvm-17
bpf/vmtest-bpf-next-VM_Test-35 success Logs for x86_64-llvm-18 / build-release / build for x86_64 with llvm-18-O2
bpf/vmtest-bpf-next-VM_Test-41 success Logs for x86_64-llvm-18 / veristat
bpf/vmtest-bpf-next-VM_Test-14 success Logs for s390x-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-13 success Logs for s390x-gcc / test (test_progs, false, 360) / test_progs on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-25 success Logs for x86_64-gcc / test (test_verifier, false, 360) / test_verifier on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-21 success Logs for x86_64-gcc / test (test_progs, false, 360) / test_progs on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-20 success Logs for x86_64-gcc / test (test_maps, false, 360) / test_maps on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-22 success Logs for x86_64-gcc / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-23 success Logs for x86_64-gcc / test (test_progs_no_alu32_parallel, true, 30) / test_progs_no_alu32_parallel on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-30 success Logs for x86_64-llvm-17 / test (test_progs, false, 360) / test_progs on x86_64 with llvm-17
bpf/vmtest-bpf-next-VM_Test-24 success Logs for x86_64-gcc / test (test_progs_parallel, true, 30) / test_progs_parallel on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-26 success Logs for x86_64-gcc / veristat / veristat on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-31 success Logs for x86_64-llvm-17 / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with llvm-17
bpf/vmtest-bpf-next-VM_Test-32 success Logs for x86_64-llvm-17 / test (test_verifier, false, 360) / test_verifier on x86_64 with llvm-17
bpf/vmtest-bpf-next-VM_Test-29 success Logs for x86_64-llvm-17 / test (test_maps, false, 360) / test_maps on x86_64 with llvm-17
bpf/vmtest-bpf-next-VM_Test-36 success Logs for x86_64-llvm-18 / test (test_maps, false, 360) / test_maps on x86_64 with llvm-18
bpf/vmtest-bpf-next-VM_Test-38 success Logs for x86_64-llvm-18 / test (test_progs_cpuv4, false, 360) / test_progs_cpuv4 on x86_64 with llvm-18
bpf/vmtest-bpf-next-VM_Test-40 success Logs for x86_64-llvm-18 / test (test_verifier, false, 360) / test_verifier on x86_64 with llvm-18
bpf/vmtest-bpf-next-VM_Test-37 success Logs for x86_64-llvm-18 / test (test_progs, false, 360) / test_progs on x86_64 with llvm-18
bpf/vmtest-bpf-next-VM_Test-39 success Logs for x86_64-llvm-18 / test (test_progs_no_alu32, false, 360) / test_progs_no_alu32 on x86_64 with llvm-18

Commit Message

Florian Schmaus Nov. 2, 2024, 10:04 a.m. UTC
Pass the value of make's -j/--jobs argument to pahole, to avoid out of
memory errors and make pahole respect the "jobs" value of make.

On systems with little memory but many cores, invoking pahole using -j
without argument potentially creates too many pahole instances,
causing an out-of-memory situation. Instead, we should pass make's
"jobs" value as an argument to pahole's -j, which is likely configured
to be (much) lower than the actual core count on such systems.

If make was invoked without -j, either via cmdline or MAKEFLAGS, then
JOBS will be simply empty, resulting in the existing behavior, as
expected.

Signed-off-by: Florian Schmaus <flo@geekplace.eu>
---
 scripts/Makefile.btf | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Holger Hoffstätte Nov. 3, 2024, 12:04 p.m. UTC | #1
On 2024-11-02 11:04, Florian Schmaus wrote:
> Pass the value of make's -j/--jobs argument to pahole, to avoid out of
> memory errors and make pahole respect the "jobs" value of make.
> 
> On systems with little memory but many cores, invoking pahole using -j
> without argument potentially creates too many pahole instances,
> causing an out-of-memory situation. Instead, we should pass make's
> "jobs" value as an argument to pahole's -j, which is likely configured
> to be (much) lower than the actual core count on such systems.
> 
> If make was invoked without -j, either via cmdline or MAKEFLAGS, then
> JOBS will be simply empty, resulting in the existing behavior, as
> expected.
> 
> Signed-off-by: Florian Schmaus <flo@geekplace.eu>

As discussed on IRC:

Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>

Thanks!
Holger
Masahiro Yamada Nov. 3, 2024, 1:22 p.m. UTC | #2
On Sun, Nov 3, 2024 at 9:04 PM Holger Hoffstätte
<holger@applied-asynchrony.com> wrote:
>
> On 2024-11-02 11:04, Florian Schmaus wrote:
> > Pass the value of make's -j/--jobs argument to pahole, to avoid out of
> > memory errors and make pahole respect the "jobs" value of make.
> >
> > On systems with little memory but many cores, invoking pahole using -j
> > without argument potentially creates too many pahole instances,
> > causing an out-of-memory situation. Instead, we should pass make's
> > "jobs" value as an argument to pahole's -j, which is likely configured
> > to be (much) lower than the actual core count on such systems.
> >
> > If make was invoked without -j, either via cmdline or MAKEFLAGS, then
> > JOBS will be simply empty, resulting in the existing behavior, as
> > expected.
> >
> > Signed-off-by: Florian Schmaus <flo@geekplace.eu>
>
> As discussed on IRC:

Do not do this. Others do not see what was discussed.




I guess the right thing to do is to join the jobserver.

https://www.gnu.org/software/make/manual/html_node/POSIX-Jobserver.html
Florian Schmaus Nov. 4, 2024, 12:52 p.m. UTC | #3
On 03/11/2024 14.22, Masahiro Yamada wrote:
> On Sun, Nov 3, 2024 at 9:04 PM Holger Hoffstätte
> <holger@applied-asynchrony.com> wrote:
>>
>> On 2024-11-02 11:04, Florian Schmaus wrote:
>>> Pass the value of make's -j/--jobs argument to pahole, to avoid out of
>>> memory errors and make pahole respect the "jobs" value of make.
>>>
>>> On systems with little memory but many cores, invoking pahole using -j
>>> without argument potentially creates too many pahole instances,
>>> causing an out-of-memory situation. Instead, we should pass make's
>>> "jobs" value as an argument to pahole's -j, which is likely configured
>>> to be (much) lower than the actual core count on such systems.
>>>
>>> If make was invoked without -j, either via cmdline or MAKEFLAGS, then
>>> JOBS will be simply empty, resulting in the existing behavior, as
>>> expected.
>>>
>>> Signed-off-by: Florian Schmaus <flo@geekplace.eu>
>>
>> As discussed on IRC:
> 
> Do not do this. Others do not see what was discussed.

Sorry, you are right. However, not much was discussed. Holger just 
pointed out that the memory usage of pahole was already reported as 
problematic in

https://lore.kernel.org/lkml/20240820085950.200358-1-jirislaby@kernel.org/

My patch would potentially help there as well, as it allows the user to 
limit the number of threads used by pahole.


> I guess the right thing to do is to join the jobserver.
> 
> https://www.gnu.org/software/make/manual/html_node/POSIX-Jobserver.html

Yes, this would be the ideal solution. Until it is implemented, the 
proposed patch is probably the next best thing.

- Florian
Alan Maguire Nov. 5, 2024, 11:07 p.m. UTC | #4
On 04/11/2024 12:52, Florian Schmaus wrote:
> On 03/11/2024 14.22, Masahiro Yamada wrote:
>> On Sun, Nov 3, 2024 at 9:04 PM Holger Hoffstätte
>> <holger@applied-asynchrony.com> wrote:
>>>
>>> On 2024-11-02 11:04, Florian Schmaus wrote:
>>>> Pass the value of make's -j/--jobs argument to pahole, to avoid out of
>>>> memory errors and make pahole respect the "jobs" value of make.
>>>>
>>>> On systems with little memory but many cores, invoking pahole using -j
>>>> without argument potentially creates too many pahole instances,
>>>> causing an out-of-memory situation. Instead, we should pass make's
>>>> "jobs" value as an argument to pahole's -j, which is likely configured
>>>> to be (much) lower than the actual core count on such systems.
>>>>
>>>> If make was invoked without -j, either via cmdline or MAKEFLAGS, then
>>>> JOBS will be simply empty, resulting in the existing behavior, as
>>>> expected.
>>>>
>>>> Signed-off-by: Florian Schmaus <flo@geekplace.eu>
>>>
>>> As discussed on IRC:
>>
>> Do not do this. Others do not see what was discussed.
> 
> Sorry, you are right. However, not much was discussed. Holger just
> pointed out that the memory usage of pahole was already reported as
> problematic in
> 
> https://lore.kernel.org/lkml/20240820085950.200358-1-jirislaby@kernel.org/
> 
> My patch would potentially help there as well, as it allows the user to
> limit the number of threads used by pahole.
> 
> 
>> I guess the right thing to do is to join the jobserver.
>>
>> https://www.gnu.org/software/make/manual/html_node/POSIX-Jobserver.html
> 
> Yes, this would be the ideal solution. Until it is implemented, the
> proposed patch is probably the next best thing.
> 
> - Florian
> 

If you haven't already, I'd suggest testing the latest pahole (building
from master branch). Significant improvements in memory utilization have
been made and more are planned post the 1.28 release.

In terms of the patch itself, respecting the "make -j" value seems right
to me. Thanks!

Alan
patchwork-bot+netdevbpf@kernel.org Nov. 12, 2024, 4:10 a.m. UTC | #5
Hello:

This patch was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:

On Sat,  2 Nov 2024 11:04:51 +0100 you wrote:
> Pass the value of make's -j/--jobs argument to pahole, to avoid out of
> memory errors and make pahole respect the "jobs" value of make.
> 
> On systems with little memory but many cores, invoking pahole using -j
> without argument potentially creates too many pahole instances,
> causing an out-of-memory situation. Instead, we should pass make's
> "jobs" value as an argument to pahole's -j, which is likely configured
> to be (much) lower than the actual core count on such systems.
> 
> [...]

Here is the summary with links:
  - kbuild,bpf: pass make jobs' value to pahole
    https://git.kernel.org/bpf/bpf-next/c/09048d22b782

You are awesome, thank you!
diff mbox series

Patch

diff --git a/scripts/Makefile.btf b/scripts/Makefile.btf
index b75f09f3f424..c3cbeb13de50 100644
--- a/scripts/Makefile.btf
+++ b/scripts/Makefile.btf
@@ -3,6 +3,8 @@ 
 pahole-ver := $(CONFIG_PAHOLE_VERSION)
 pahole-flags-y :=
 
+JOBS := $(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS)))
+
 ifeq ($(call test-le, $(pahole-ver), 125),y)
 
 # pahole 1.18 through 1.21 can't handle zero-sized per-CPU vars
@@ -12,14 +14,14 @@  endif
 
 pahole-flags-$(call test-ge, $(pahole-ver), 121)	+= --btf_gen_floats
 
-pahole-flags-$(call test-ge, $(pahole-ver), 122)	+= -j
+pahole-flags-$(call test-ge, $(pahole-ver), 122)	+= -j$(JOBS)
 
 pahole-flags-$(call test-ge, $(pahole-ver), 125)	+= --skip_encoding_btf_inconsistent_proto --btf_gen_optimized
 
 else
 
 # Switch to using --btf_features for v1.26 and later.
-pahole-flags-$(call test-ge, $(pahole-ver), 126)  = -j --btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs
+pahole-flags-$(call test-ge, $(pahole-ver), 126)  = -j$(JOBS) --btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs
 
 ifneq ($(KBUILD_EXTMOD),)
 module-pahole-flags-$(call test-ge, $(pahole-ver), 126) += --btf_features=distilled_base