You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'perf-core-for-mingo-20160516' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
User visible changes:
- Honour the kernel.perf_event_max_stack knob more precisely by not counting
PERF_CONTEXT_{KERNEL,USER} when deciding when to stop adding entries to
the perf_sample->ip_callchain[] array (Arnaldo Carvalho de Melo)
- Fix identation of 'stalled-backend-cycles' in 'perf stat' (Namhyung Kim)
- Update runtime using 'cpu-clock' event in 'perf stat' (Namhyung Kim)
- Use 'cpu-clock' for cpu targets in 'perf stat' (Namhyung Kim)
- Avoid fractional digits for integer scales in 'perf stat' (Andi Kleen)
- Store vdso buildid unconditionally, as it appears in callchains and
we're not checking those when creating the build-id table, so we
end up not being able to resolve VDSO symbols when doing analysis
on a different machine than the one where recording was done, possibly
of a different arch even (arm -> x86_64) (He Kuang)
Infrastructure changes:
- Generalize max_stack sysctl handler, will be used for configuring
multiple kernel knobs related to callchains (Arnaldo Carvalho de Melo)
Cleanups:
- Introduce DSO__NAME_KALLSYMS and DSO__NAME_KCORE, to stop using
open coded strings (Masami Hiramatsu)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -66,6 +66,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <locale.h>
|
||||
#include <math.h>
|
||||
|
||||
#define DEFAULT_SEPARATOR " "
|
||||
#define CNTR_NOT_SUPPORTED "<not supported>"
|
||||
@@ -991,12 +992,12 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg)
|
||||
const char *fmt;
|
||||
|
||||
if (csv_output) {
|
||||
fmt = sc != 1.0 ? "%.2f%s" : "%.0f%s";
|
||||
fmt = floor(sc) != sc ? "%.2f%s" : "%.0f%s";
|
||||
} else {
|
||||
if (big_num)
|
||||
fmt = sc != 1.0 ? "%'18.2f%s" : "%'18.0f%s";
|
||||
fmt = floor(sc) != sc ? "%'18.2f%s" : "%'18.0f%s";
|
||||
else
|
||||
fmt = sc != 1.0 ? "%18.2f%s" : "%18.0f%s";
|
||||
fmt = floor(sc) != sc ? "%18.2f%s" : "%18.0f%s";
|
||||
}
|
||||
|
||||
aggr_printout(evsel, id, nr);
|
||||
@@ -1909,6 +1910,9 @@ static int add_default_attributes(void)
|
||||
}
|
||||
|
||||
if (!evsel_list->nr_entries) {
|
||||
if (target__has_cpu(&target))
|
||||
default_attrs0[0].config = PERF_COUNT_SW_CPU_CLOCK;
|
||||
|
||||
if (perf_evlist__add_default_attrs(evsel_list, default_attrs0) < 0)
|
||||
return -1;
|
||||
if (pmu_have_event("cpu", "stalled-cycles-frontend")) {
|
||||
@@ -2000,7 +2004,7 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
|
||||
union perf_event *event,
|
||||
struct perf_session *session)
|
||||
{
|
||||
struct stat_round_event *round = &event->stat_round;
|
||||
struct stat_round_event *stat_round = &event->stat_round;
|
||||
struct perf_evsel *counter;
|
||||
struct timespec tsh, *ts = NULL;
|
||||
const char **argv = session->header.env.cmdline_argv;
|
||||
@@ -2009,12 +2013,12 @@ static int process_stat_round_event(struct perf_tool *tool __maybe_unused,
|
||||
evlist__for_each(evsel_list, counter)
|
||||
perf_stat_process_counter(&stat_config, counter);
|
||||
|
||||
if (round->type == PERF_STAT_ROUND_TYPE__FINAL)
|
||||
update_stats(&walltime_nsecs_stats, round->time);
|
||||
if (stat_round->type == PERF_STAT_ROUND_TYPE__FINAL)
|
||||
update_stats(&walltime_nsecs_stats, stat_round->time);
|
||||
|
||||
if (stat_config.interval && round->time) {
|
||||
tsh.tv_sec = round->time / NSECS_PER_SEC;
|
||||
tsh.tv_nsec = round->time % NSECS_PER_SEC;
|
||||
if (stat_config.interval && stat_round->time) {
|
||||
tsh.tv_sec = stat_round->time / NSECS_PER_SEC;
|
||||
tsh.tv_nsec = stat_round->time % NSECS_PER_SEC;
|
||||
ts = &tsh;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user