|
@@ -1133,6 +1133,7 @@ struct thread_trace {
|
|
|
u64 exit_time;
|
|
|
bool entry_pending;
|
|
|
unsigned long nr_events;
|
|
|
+ unsigned long pfmaj, pfmin;
|
|
|
char *entry_str;
|
|
|
double runtime_ms;
|
|
|
struct {
|
|
@@ -1804,8 +1805,20 @@ static int trace__pgfault(struct trace *trace,
|
|
|
u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
|
|
|
struct addr_location al;
|
|
|
char map_type = 'd';
|
|
|
+ struct thread_trace *ttrace;
|
|
|
|
|
|
thread = machine__findnew_thread(trace->host, sample->pid, sample->tid);
|
|
|
+ ttrace = thread__trace(thread, trace->output);
|
|
|
+ if (ttrace == NULL)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ if (evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ)
|
|
|
+ ttrace->pfmaj++;
|
|
|
+ else
|
|
|
+ ttrace->pfmin++;
|
|
|
+
|
|
|
+ if (trace->summary_only)
|
|
|
+ return 0;
|
|
|
|
|
|
thread__find_addr_location(thread, trace->host, cpumode, MAP__FUNCTION,
|
|
|
sample->ip, &al);
|
|
@@ -2346,6 +2359,10 @@ static int trace__fprintf_one_thread(struct thread *thread, void *priv)
|
|
|
printed += fprintf(fp, " %s (%d), ", thread__comm_str(thread), thread->tid);
|
|
|
printed += fprintf(fp, "%lu events, ", ttrace->nr_events);
|
|
|
printed += fprintf(fp, "%.1f%%", ratio);
|
|
|
+ if (ttrace->pfmaj)
|
|
|
+ printed += fprintf(fp, ", %lu majfaults", ttrace->pfmaj);
|
|
|
+ if (ttrace->pfmin)
|
|
|
+ printed += fprintf(fp, ", %lu minfaults", ttrace->pfmin);
|
|
|
printed += fprintf(fp, ", %.3f msec\n", ttrace->runtime_ms);
|
|
|
printed += thread__dump_stats(ttrace, trace, fp);
|
|
|
|