Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1737424 > unrolled thread

[PATCH] perf tools: allow overriding MAX_NR_CPUS at compile time

Started byChristophe Leroy <christophe.leroy@c-s.fr>
First post2017-09-22 13:30 +0200
Last post2017-09-22 16:10 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] perf tools: allow overriding MAX_NR_CPUS at compile time Christophe Leroy <christophe.leroy@c-s.fr> - 2017-09-22 13:30 +0200
    Re: [PATCH] perf tools: allow overriding MAX_NR_CPUS at compile time Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-09-22 16:10 +0200

#1737424 — [PATCH] perf tools: allow overriding MAX_NR_CPUS at compile time

FromChristophe Leroy <christophe.leroy@c-s.fr>
Date2017-09-22 13:30 +0200
Subject[PATCH] perf tools: allow overriding MAX_NR_CPUS at compile time
Message-ID<usujE-5v6-15@gated-at.bofh.it>
After update of kernel, perf tool doesn't run anymore on my
32MB RAM powerpc board, but still runs on a 128MB RAM board:

~# strace perf
execve("/usr/sbin/perf", ["perf"], [/* 12 vars */]) = -1 ENOMEM (Cannot allocate memory)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
+++ killed by SIGSEGV +++
Segmentation fault

objdump -x shows that .bss section has a huge size of 24Mbytes:

 27 .bss          016baca8  101cebb8  101cebb8  001cd988  2**3

With especially the following objects having quite big size

10205f80 l     O .bss	00140000              runtime_cycles_stats
10345f80 l     O .bss	00140000              runtime_stalled_cycles_front_stats
10485f80 l     O .bss	00140000              runtime_stalled_cycles_back_stats
105c5f80 l     O .bss	00140000              runtime_branches_stats
10705f80 l     O .bss	00140000              runtime_cacherefs_stats
10845f80 l     O .bss	00140000              runtime_l1_dcache_stats
10985f80 l     O .bss	00140000              runtime_l1_icache_stats
10ac5f80 l     O .bss	00140000              runtime_ll_cache_stats
10c05f80 l     O .bss	00140000              runtime_itlb_cache_stats
10d45f80 l     O .bss	00140000              runtime_dtlb_cache_stats
10e85f80 l     O .bss	00140000              runtime_cycles_in_tx_stats
10fc5f80 l     O .bss	00140000              runtime_transaction_stats
11105f80 l     O .bss	00140000              runtime_elision_stats
11245f80 l     O .bss	00140000              runtime_topdown_total_slots
11385f80 l     O .bss	00140000              runtime_topdown_slots_retired
114c5f80 l     O .bss	00140000              runtime_topdown_slots_issued
11605f80 l     O .bss	00140000              runtime_topdown_fetch_bubbles
11745f80 l     O .bss	00140000              runtime_topdown_recovery_bubbles

This is due to commit 4d255766d28b1 ("perf: Bump max number of cpus
to 1024"), because many tables are sized with MAX_NR_CPUS

This patch gives the opportunity to redefine MAX_NR_CPUS via

make EXTRA_CFLAGS=-DMAX_NR_CPUS=1

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
---
 tools/perf/perf.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index dc442ba21bf6..a9db563da0a9 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -23,7 +23,9 @@ static inline unsigned long long rdclock(void)
 	return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
 }
 
+#ifndef MAX_NR_CPUS
 #define MAX_NR_CPUS			1024
+#endif
 
 extern const char *input_name;
 extern bool perf_host, perf_guest;
-- 
2.13.3

[toc] | [next] | [standalone]


#1737520

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2017-09-22 16:10 +0200
Message-ID<uswOu-72F-11@gated-at.bofh.it>
In reply to#1737424
Em Fri, Sep 22, 2017 at 01:20:43PM +0200, Christophe Leroy escreveu:
> After update of kernel, perf tool doesn't run anymore on my
> 32MB RAM powerpc board, but still runs on a 128MB RAM board:
> 
> ~# strace perf
> execve("/usr/sbin/perf", ["perf"], [/* 12 vars */]) = -1 ENOMEM (Cannot allocate memory)
> --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
> +++ killed by SIGSEGV +++
> Segmentation fault
> 
> objdump -x shows that .bss section has a huge size of 24Mbytes:
> 
>  27 .bss          016baca8  101cebb8  101cebb8  001cd988  2**3
> 
> With especially the following objects having quite big size
> 
> 10205f80 l     O .bss	00140000              runtime_cycles_stats
> 10345f80 l     O .bss	00140000              runtime_stalled_cycles_front_stats
> 10485f80 l     O .bss	00140000              runtime_stalled_cycles_back_stats
> 105c5f80 l     O .bss	00140000              runtime_branches_stats
> 10705f80 l     O .bss	00140000              runtime_cacherefs_stats
> 10845f80 l     O .bss	00140000              runtime_l1_dcache_stats
> 10985f80 l     O .bss	00140000              runtime_l1_icache_stats
> 10ac5f80 l     O .bss	00140000              runtime_ll_cache_stats
> 10c05f80 l     O .bss	00140000              runtime_itlb_cache_stats
> 10d45f80 l     O .bss	00140000              runtime_dtlb_cache_stats
> 10e85f80 l     O .bss	00140000              runtime_cycles_in_tx_stats
> 10fc5f80 l     O .bss	00140000              runtime_transaction_stats
> 11105f80 l     O .bss	00140000              runtime_elision_stats
> 11245f80 l     O .bss	00140000              runtime_topdown_total_slots
> 11385f80 l     O .bss	00140000              runtime_topdown_slots_retired
> 114c5f80 l     O .bss	00140000              runtime_topdown_slots_issued
> 11605f80 l     O .bss	00140000              runtime_topdown_fetch_bubbles
> 11745f80 l     O .bss	00140000              runtime_topdown_recovery_bubbles
> 
> This is due to commit 4d255766d28b1 ("perf: Bump max number of cpus
> to 1024"), because many tables are sized with MAX_NR_CPUS
> 
> This patch gives the opportunity to redefine MAX_NR_CPUS via
> 
> make EXTRA_CFLAGS=-DMAX_NR_CPUS=1

I'll probably apply this, but the right thing would be to get rid of
MAX_NR_CPUS completely and instead allocate that using sysconf:

[root@jouet ~]# perf trace -e open,getdents getconf _NPROCESSORS_CONF
4
     0.014 ( 0.011 ms): getconf/2452 open(filename: /etc/ld.so.cache, flags: CLOEXEC                       ) = 3
     0.045 ( 0.008 ms): getconf/2452 open(filename: /lib64/libc.so.6, flags: CLOEXEC                       ) = 3
     0.264 ( 0.012 ms): getconf/2452 open(filename: /usr/lib/locale/locale-archive, flags: CLOEXEC         ) = 3
     0.315 ( 0.028 ms): getconf/2452 open(filename: /sys/devices/system/cpu, flags: CLOEXEC|DIRECTORY|NONBLOCK) = 3
     0.349 ( 0.013 ms): getconf/2452 getdents(fd: 3</sys/devices/system/cpu>, dirent: 0x944030, count: 32768) = 624
     0.365 ( 0.001 ms): getconf/2452 getdents(fd: 3</sys/devices/system/cpu>, dirent: 0x944030, count: 32768) = 0
[root@jouet ~]#
 
> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> ---
>  tools/perf/perf.h | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index dc442ba21bf6..a9db563da0a9 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -23,7 +23,9 @@ static inline unsigned long long rdclock(void)
>  	return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
>  }
>  
> +#ifndef MAX_NR_CPUS
>  #define MAX_NR_CPUS			1024
> +#endif
>  
>  extern const char *input_name;
>  extern bool perf_host, perf_guest;
> -- 
> 2.13.3

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web