kernel_optimize_test/tools/perf/tests
Jan Stancek da8a58b56c perf tools: Replace _SC_NPROCESSORS_CONF with max_present_cpu in cpu_topology_map
There are 2 problems wrt. cpu_topology_map on systems with sparse CPUs:

1. offline/absent CPUs will have their socket_id and core_id set to -1
   which triggers:
   "socket_id number is too big.You may need to upgrade the perf tool."

2. size of cpu_topology_map (perf_env.cpu[]) is allocated based on
   _SC_NPROCESSORS_CONF, but can be indexed with CPU ids going above.
   Users of perf_env.cpu[] are using CPU id as index. This can lead
   to read beyond what was allocated:
   ==19991== Invalid read of size 4
   ==19991==    at 0x490CEB: check_cpu_topology (topology.c:69)
   ==19991==    by 0x490CEB: test_session_topology (topology.c:106)
   ...

For example:
  _SC_NPROCESSORS_CONF == 16
  available: 2 nodes (0-1)
  node 0 cpus: 0 6 8 10 16 22 24 26
  node 0 size: 12004 MB
  node 0 free: 9470 MB
  node 1 cpus: 1 7 9 11 23 25 27
  node 1 size: 12093 MB
  node 1 free: 9406 MB
  node distances:
  node   0   1
    0:  10  20
    1:  20  10

This patch changes HEADER_NRCPUS.nr_cpus_available from _SC_NPROCESSORS_CONF
to max_present_cpu and updates any user of cpu_topology_map to iterate
with nr_cpus_avail.

As a consequence HEADER_CPU_TOPOLOGY core_id and socket_id lists get longer,
but maintain compatibility with pre-patch state - index to cpu_topology_map is
CPU id.

  perf test 36 -v
  36: Session topology                           :
  --- start ---
  test child forked, pid 22211
  templ file: /tmp/perf-test-gmdX5i
  CPU 0, core 0, socket 0
  CPU 1, core 0, socket 1
  CPU 6, core 10, socket 0
  CPU 7, core 10, socket 1
  CPU 8, core 1, socket 0
  CPU 9, core 1, socket 1
  CPU 10, core 9, socket 0
  CPU 11, core 9, socket 1
  CPU 16, core 0, socket 0
  CPU 22, core 10, socket 0
  CPU 23, core 10, socket 1
  CPU 24, core 1, socket 0
  CPU 25, core 1, socket 1
  CPU 26, core 9, socket 0
  CPU 27, core 9, socket 1
  test child finished with 0
  ---- end ----
  Session topology: Ok

Signed-off-by: Jan Stancek <jstancek@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/d7c05c6445fca74a8442c2c73cfffd349c52c44f.1487146877.git.jstancek@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2017-02-17 12:56:35 -03:00
..
attr
.gitignore perf test: Add libbpf relocation checker 2016-01-26 12:10:55 -03:00
attr.c perf subcmd: Create subcmd library 2015-12-17 14:27:14 -03:00
attr.py
backward-ring-buffer.c perf tools: Fix typo "No enough" to "Not enough" 2016-10-24 11:07:42 -03:00
bitmap.c perf tests: Add test for bitmap_scnprintf function 2016-08-02 16:33:27 -03:00
bp_signal_overflow.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
bp_signal.c perf tests: Fix build on older systems where 'signal' is reserved 2016-02-15 17:33:26 -03:00
bpf-script-example.c perf tests bpf: Use SyS_epoll_wait alias 2016-08-03 19:40:48 -03:00
bpf-script-test-kbuild.c
bpf-script-test-prologue.c
bpf-script-test-relocation.c perf test: Add libbpf relocation checker 2016-01-26 12:10:55 -03:00
bpf.c perf test: Add libbpf pinning test 2017-01-31 16:20:08 -03:00
Build perf tools: Add unit_number__scnprintf function 2017-01-11 16:48:01 -03:00
builtin-test.c perf tools: Add unit_number__scnprintf function 2017-01-11 16:48:01 -03:00
clang.c perf clang: Support compile IR to BPF object and add testcase 2016-12-05 15:51:44 -03:00
code-reading.c perf symbols: Remove symbol_filter_t machinery 2016-09-05 11:14:50 -03:00
cpumap.c perf tests cpumap: Add missing headers 2016-07-12 15:19:56 -03:00
dso-data.c perf tools: Allow to reset open files counter 2016-06-30 18:27:44 -03:00
dwarf-unwind.c perf tests: Add dwarf unwind test for powerpc 2016-09-29 11:18:21 -03:00
event_update.c perf tests: Replace assignment with comparison on assert check 2016-04-25 20:24:26 -03:00
event-times.c tools: Introduce str_error_r() 2016-07-12 15:19:47 -03:00
evsel-roundtrip-name.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
evsel-tp-sched.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
fdarray.c perf test fdarray: Add missing poll.h header 2016-07-12 15:19:56 -03:00
hists_common.c perf hists: Move sort__need_collapse into struct perf_hpp_list 2016-05-05 21:03:58 -03:00
hists_common.h
hists_cumulate.c perf tests: Fix hist accumulation test 2016-07-04 19:39:01 -03:00
hists_filter.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
hists_link.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
hists_output.c perf hists: Move sort__need_collapse into struct perf_hpp_list 2016-05-05 21:03:58 -03:00
is_printable_array.c perf tests: Add is_printable_array test 2016-07-18 19:50:35 -03:00
keep-tracking.c perf evsel: Do not use globals in config() 2016-04-11 22:18:20 -03:00
kmod-path.c perf tests kmod-path: Fix build on ubuntu:16.04-x-armhf 2016-07-22 16:25:44 -03:00
llvm.c tools lib bpf: Add libbpf_get_error() 2017-01-26 11:42:58 -03:00
llvm.h perf clang: Update test case to use real BPF script 2016-12-05 15:51:44 -03:00
make Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2016-12-17 16:24:13 -08:00
mmap-basic.c perf tests: Add missing pthread.h include for CPU_*() macros 2016-07-12 15:19:53 -03:00
mmap-thread-lookup.c perf test: Use machine__new_host in mmap thread lookup test 2015-12-07 18:12:54 -03:00
openat-syscall-all-cpus.c perf tests: Add missing pthread.h include for CPU_*() macros 2016-07-12 15:19:53 -03:00
openat-syscall-tp-fields.c perf tests openat-syscall-tp-fields: Add some conditional defines 2016-07-12 15:19:54 -03:00
openat-syscall.c tools: Introduce str_error_r() 2016-07-12 15:19:47 -03:00
parse-events.c perf tests: Avoid possible truncation with dirent->d_name + snprintf 2017-02-09 14:48:46 -03:00
parse-no-sample-id-all.c perf tests: Synthesize struct instead of using field after variable sized type 2017-02-14 15:19:18 -03:00
perf-hooks.c perf tools: Pass context to perf hook functions 2016-12-05 15:51:42 -03:00
perf-record.c perf tests record: No need to test an array against NULL 2017-02-13 17:22:34 -03:00
perf-targz-src-pkg perf tests: Fix tarpkg build test error output redirection 2016-03-24 12:26:41 -03:00
pmu.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
python-use.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
sample-parsing.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
sdt.c perf test: Add a test case for SDT event 2016-07-13 23:09:10 -03:00
stat.c perf tools: Add stat round event synthesize function 2015-12-17 14:55:44 -03:00
sw-clock.c tools: Introduce str_error_r() 2016-07-12 15:19:47 -03:00
switch-tracking.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
task-exit.c tools: Introduce str_error_r() 2016-07-12 15:19:47 -03:00
tests.h perf tools: Add unit_number__scnprintf function 2017-01-11 16:48:01 -03:00
thread-map.c perf thread_map: Add thread_map__remove function 2016-12-15 16:25:45 -03:00
thread-mg-share.c perf tests: Pass the subtest index to each test routine 2015-11-19 13:19:15 -03:00
topology.c perf tools: Replace _SC_NPROCESSORS_CONF with max_present_cpu in cpu_topology_map 2017-02-17 12:56:35 -03:00
unit_number__scnprintf.c perf tools: Add unit_number__scnprintf function 2017-01-11 16:48:01 -03:00
vmlinux-kallsyms.c perf symbols: Remove symbol_filter_t machinery 2016-09-05 11:14:50 -03:00