kernel_optimize_test/tools/perf
Yunlong Song 1aff59be53 perf sched replay: Handle the dead halt of sem_wait when create_tasks() fails for any task
Since there is sem_wait for each task in the wait_for_tasks(), e.g.
sem_wait(&task->work_done_sem).

The sem_wait can continue only when work_done_sem is greater than 0, or
it will be blocked.

For perf sched replay, one task may sem_post the work_done_sem of
another task, which causes the work_done_sem of that task processed in a
reasonable sequence, e.g. sem_post, sem_wait, sem_wait, sem_post...

This sequence simulates the sched process of the running tasks at the
time when perf sched record runs.

As a result, all the tasks are required and their threads must be
successfully created.

If any one (task A) of the tasks fails to create its thread, then
another task (task B), whose work_done_sem needs sem_post from that
failed task A, may likely block itself due to seg_wait.

And this is a dead halt, since task B's thread_func cannot continue at
all.

To solve this problem, perf sched replay should exit once any task fails
to create its thread.

Example:

Test environment: x86_64 with 160 cores

Before this patch:

 $ perf sched replay
 ...
 Error: sys_perf_event_open() syscall returned with -1 (Too many open
 files)
 ------------------------------------------------------------    <- dead halt

After this patch:

 $ perf sched replay
 ...
 task   1551 (           <unknown>:         0), nr_events: 10
 Error: sys_perf_event_open() syscall returned with -1 (Too many open
 files)
 $

As shown above, perf sched replay finishes the process after printing an
error message and does not block itself.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427809596-29559-7-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-04-08 09:07:25 -03:00
..
arch perf build: Add arch sparc objects building 2015-02-12 13:22:01 -03:00
bench Merge 'tip/perf/urgent' into perf/core to pick fixes 2015-03-02 11:45:49 -03:00
config perf build: Disable libbabeltrace check by default 2015-03-30 10:24:27 -03:00
Documentation perf tools: Add pid/tid filtering to report and script commands 2015-03-24 13:02:46 -03:00
python
scripts perf build: Add scripts objects building 2015-02-12 11:49:53 -03:00
tests perf tools: Add kmod_path__parse function 2015-03-21 14:53:41 -03:00
ui perf hists browser: Indicate which callchain entries are annotated 2015-03-21 14:53:37 -03:00
util perf kmaps: Check kmaps to make code more robust 2015-04-08 09:07:03 -03:00
.gitignore perf build: Use FEATURE-DUMP instead of PERF-FEATURES in the .gitignore file 2015-03-20 17:49:51 -03:00
Build perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
builtin-annotate.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-bench.c perf bench: Add --repeat option 2014-06-19 16:13:15 -03:00
builtin-buildid-cache.c perf buildid-cache: Show usage with incorrect params 2015-02-27 15:52:40 -03:00
builtin-buildid-list.c perf ordered_events: Shorten function signatures 2015-03-11 10:17:09 -03:00
builtin-data.c perf data: Support using -f to override perf.data file ownership for 'convert' 2015-04-02 13:18:52 -03:00
builtin-diff.c perf diff: Add kallsyms option 2015-03-24 13:01:54 -03:00
builtin-evlist.c perf evlist: Support using -f to override perf.data file ownership 2015-04-02 13:18:45 -03:00
builtin-help.c perf tools: Add the bash completion for listing subsubcommands of perf help 2015-03-19 13:49:39 -03:00
builtin-inject.c perf inject: Support using -f to override perf.data file ownership 2015-04-02 13:18:45 -03:00
builtin-kmem.c perf kmem: Respect -i option 2015-04-08 09:07:14 -03:00
builtin-kvm.c perf kvm: Support using -f to override perf.data.guest file ownership 2015-04-02 13:18:47 -03:00
builtin-list.c perf list: Extend raw-dump to certain kind of events 2015-02-27 15:52:24 -03:00
builtin-lock.c perf lock: Support using -f to override perf.data file ownership 2015-04-02 13:18:48 -03:00
builtin-mem.c perf mem: Support using -f to override perf.data file ownership 2015-04-02 13:18:49 -03:00
builtin-probe.c perf probe: Add --quiet option to suppress output result message 2014-10-29 10:32:49 -02:00
builtin-record.c perf evlist: Return the first evsel with an invalid filter in apply_filters() 2015-03-26 10:52:28 -03:00
builtin-report.c perf tools: Add pid/tid filtering to report and script commands 2015-03-24 13:02:46 -03:00
builtin-sched.c perf sched replay: Handle the dead halt of sem_wait when create_tasks() fails for any task 2015-04-08 09:07:25 -03:00
builtin-script.c perf script: Support using -f to override perf.data file ownership 2015-04-02 13:18:50 -03:00
builtin-stat.c perf evlist: Return the first evsel with an invalid filter in apply_filters() 2015-03-26 10:52:28 -03:00
builtin-timechart.c perf timechart: Support using -f to override perf.data file ownership 2015-04-02 13:18:50 -03:00
builtin-top.c perf symbols: Save DSO loading errno to better report errors 2015-03-24 12:08:43 -03:00
builtin-trace.c perf trace: Support using -f to override perf.data file ownership 2015-04-02 13:18:51 -03:00
builtin.h perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
command-list.txt perf tools: Add new 'perf data' command 2015-02-25 12:42:25 -03:00
CREDITS
design.txt
Makefile perf tools: Set JOBS based on CPU or processor 2015-03-26 10:52:28 -03:00
Makefile.perf perf build: Disable libbabeltrace check by default 2015-03-30 10:24:27 -03:00
MANIFEST tools build: Add new build support 2015-02-11 18:30:03 -03:00
perf-archive.sh
perf-completion.sh perf tools: Avoid confusion with preloaded bash function for perf bash completion 2015-03-19 13:53:27 -03:00
perf-read-vdso.c perf tools: Build programs to copy 32-bit compatibility 2014-10-29 10:32:48 -02:00
perf-sys.h perf tools: Avoid build splat for syscall numbers with uclibc 2015-01-16 17:49:29 -03:00
perf-with-kcore.sh perf tools: Add perf-with-kcore script 2014-09-17 17:08:08 -03:00
perf.c perf tools: Fix the bash completion problem of 'perf --*' 2015-02-27 15:52:28 -03:00
perf.h perf: Bump max number of cpus to 1024 2015-03-26 10:52:28 -03:00