Received: by 10.223.185.116 with SMTP id b49csp3856839wrg; Tue, 6 Mar 2018 06:12:36 -0800 (PST) X-Google-Smtp-Source: AG47ELt3m3CsPJQRzqm2Ke+H0QPHY4qN2tlMthwS5fAvb7cc7mf/KTJQttG07e2Jb+BXkSnlceei X-Received: by 10.101.70.10 with SMTP id v10mr15281713pgq.327.1520345556769; Tue, 06 Mar 2018 06:12:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520345556; cv=none; d=google.com; s=arc-20160816; b=clA9Iz0RGjLaGOeFVa9nKcGjKA5CR7XpqpG/lHtjNi0sxMeK+643UI+OAIAcGAloKh eFrxDlC22usQW+Ie39mSuYnil5zPTiCLCQ0JNDiIOBdoJvVRtxilEW83rrbqiI8P1ZII 3jSPLt7Boz/4+60eAGllQ7rXBzY9jWV4VEbjrSZkuZuTd16LcPvH/iOr7ehW1T6OF3S1 Fs+sXTtuDupLNeEWGZYcBXVwX3g21DBb5CtTiL+ih0WnQd5BFBBDeSGKJBFGRhCnRMdw mSMgjrifOZG8/fH+o9F+yQGx+jMMjtC8wMZwpjaF3XDp6e0GlJEnKpkkpTMA6KwZtpuj CfxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dmarc-filter:arc-authentication-results; bh=+chJs8HQxYP31NZB882lTSFjETOvxKpbFYY2UUIi6XU=; b=ZRMdcJqKvwdF1nfbddBzkPkkIGrhPs3zlYUTEG/urpZ9bwxTF5zEVs0a3sQKcymVhe 2tmzC+vZfgLzK40EYnXEqrqjGL+ae3NFBdn7T8ORBZ8LyE101CUYwmBo3IIdrzKezski wIyNUF1pebbLGyArkgk/DVed2gUWO34vUxaIi0ybhVg9RaKnOgzlyR+u0sFWsz8fuS5t If8cfVFrztiEVgUDSFNN1ZH8TfqStCKioIF1zB7VjGOVf0Ms7IioAqM0gGtVhuh7qS9g PpjoHxDJsBBEM+BllJ7q5xm6mEUeAHK15sX8WE7Uoshb03HS1xYhesBylri/pNUtUlaE 2mbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 36-v6si11136064pla.511.2018.03.06.06.12.22; Tue, 06 Mar 2018 06:12:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932906AbeCFOKa (ORCPT + 99 others); Tue, 6 Mar 2018 09:10:30 -0500 Received: from mail.kernel.org ([198.145.29.99]:34874 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932147AbeCFOJX (ORCPT ); Tue, 6 Mar 2018 09:09:23 -0500 Received: from jouet.infradead.org (unknown [190.15.121.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1C69920685; Tue, 6 Mar 2018 14:09:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1C69920685 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=acme@kernel.org Received: by jouet.infradead.org (Postfix, from userid 1000) id 01F6C1450EA; Tue, 6 Mar 2018 11:09:19 -0300 (-03) Date: Tue, 6 Mar 2018 11:09:19 -0300 From: Arnaldo Carvalho de Melo To: changbin.du@intel.com Cc: jolsa@redhat.com, peterz@infradead.org, mingo@redhat.com, namhyung@kernel.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: Re: [PATCH v2 1/2] perf sched: move thread::shortname to thread_runtime Message-ID: <20180306140919.GF10176@kernel.org> References: <1520307457-23668-1-git-send-email-changbin.du@intel.com> <1520307457-23668-2-git-send-email-changbin.du@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1520307457-23668-2-git-send-email-changbin.du@intel.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Tue, Mar 06, 2018 at 11:37:36AM +0800, changbin.du@intel.com escreveu: > From: Changbin Du > > The thread::shortname only used by sched command, so move it > to sched private structure. > > Signed-off-by: Changbin Du > --- > tools/perf/builtin-sched.c | 95 +++++++++++++++++++++++++++------------------- > tools/perf/util/thread.h | 1 - > 2 files changed, 55 insertions(+), 41 deletions(-) > > diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c > index 83283fe..5bfc8d5 100644 > --- a/tools/perf/builtin-sched.c > +++ b/tools/perf/builtin-sched.c > @@ -255,6 +255,8 @@ struct thread_runtime { > > int last_state; > u64 migrations; > + > + char shortname[3]; > }; So, what we have for this struct right now is: [root@jouet perf]# pahole -C thread_runtime ~/bin/perf struct thread_runtime { u64 last_time; /* 0 8 */ u64 dt_run; /* 8 8 */ u64 dt_sleep; /* 16 8 */ u64 dt_iowait; /* 24 8 */ u64 dt_preempt; /* 32 8 */ u64 dt_delay; /* 40 8 */ u64 ready_to_run; /* 48 8 */ struct stats run_stats; /* 56 40 */ /* --- cacheline 1 boundary (64 bytes) was 32 bytes ago --- */ u64 total_run_time; /* 96 8 */ u64 total_sleep_time; /* 104 8 */ u64 total_iowait_time; /* 112 8 */ u64 total_preempt_time; /* 120 8 */ /* --- cacheline 2 boundary (128 bytes) --- */ u64 total_delay_time; /* 128 8 */ int last_state; /* 136 4 */ /* XXX 4 bytes hole, try to pack */ u64 migrations; /* 144 8 */ /* size: 152, cachelines: 3, members: 15 */ /* sum members: 148, holes: 1, sum holes: 4 */ /* last cacheline: 24 bytes */ }; [root@jouet perf]# So I'll move this shortname member to just before 'migrations', then the bool you'll add on the second patch to right after 'shortname' so that this gets optimally packed. Thanks, - Arnaldo > /* per event run time data */ > @@ -897,6 +899,37 @@ struct sort_dimension { > struct list_head list; > }; > > +/* > + * handle runtime stats saved per thread > + */ > +static struct thread_runtime *thread__init_runtime(struct thread *thread) > +{ > + struct thread_runtime *r; > + > + r = zalloc(sizeof(struct thread_runtime)); > + if (!r) > + return NULL; > + > + init_stats(&r->run_stats); > + thread__set_priv(thread, r); > + > + return r; > +} > + > +static struct thread_runtime *thread__get_runtime(struct thread *thread) > +{ > + struct thread_runtime *tr; > + > + tr = thread__priv(thread); > + if (tr == NULL) { > + tr = thread__init_runtime(thread); > + if (tr == NULL) > + pr_debug("Failed to malloc memory for runtime data.\n"); > + } > + > + return tr; > +} > + > static int > thread_lat_cmp(struct list_head *list, struct work_atoms *l, struct work_atoms *r) > { > @@ -1480,6 +1513,7 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel, > { > const u32 next_pid = perf_evsel__intval(evsel, sample, "next_pid"); > struct thread *sched_in; > + struct thread_runtime *tr; > int new_shortname; > u64 timestamp0, timestamp = sample->time; > s64 delta; > @@ -1519,22 +1553,28 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel, > if (sched_in == NULL) > return -1; > > + tr = thread__get_runtime(sched_in); > + if (tr == NULL) { > + thread__put(sched_in); > + return -1; > + } > + > sched->curr_thread[this_cpu] = thread__get(sched_in); > > printf(" "); > > new_shortname = 0; > - if (!sched_in->shortname[0]) { > + if (!tr->shortname[0]) { > if (!strcmp(thread__comm_str(sched_in), "swapper")) { > /* > * Don't allocate a letter-number for swapper:0 > * as a shortname. Instead, we use '.' for it. > */ > - sched_in->shortname[0] = '.'; > - sched_in->shortname[1] = ' '; > + tr->shortname[0] = '.'; > + tr->shortname[1] = ' '; > } else { > - sched_in->shortname[0] = sched->next_shortname1; > - sched_in->shortname[1] = sched->next_shortname2; > + tr->shortname[0] = sched->next_shortname1; > + tr->shortname[1] = sched->next_shortname2; > > if (sched->next_shortname1 < 'Z') { > sched->next_shortname1++; > @@ -1552,6 +1592,7 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel, > for (i = 0; i < cpus_nr; i++) { > int cpu = sched->map.comp ? sched->map.comp_cpus[i] : i; > struct thread *curr_thread = sched->curr_thread[cpu]; > + struct thread_runtime *curr_tr; > const char *pid_color = color; > const char *cpu_color = color; > > @@ -1569,9 +1610,14 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel, > else > color_fprintf(stdout, cpu_color, "*"); > > - if (sched->curr_thread[cpu]) > - color_fprintf(stdout, pid_color, "%2s ", sched->curr_thread[cpu]->shortname); > - else > + if (sched->curr_thread[cpu]) { > + curr_tr = thread__get_runtime(sched->curr_thread[cpu]); > + if (curr_tr == NULL) { > + thread__put(sched_in); > + return -1; > + } > + color_fprintf(stdout, pid_color, "%2s ", curr_tr->shortname); > + } else > color_fprintf(stdout, color, " "); > } > > @@ -1587,7 +1633,7 @@ static int map_switch_event(struct perf_sched *sched, struct perf_evsel *evsel, > pid_color = COLOR_PIDS; > > color_fprintf(stdout, pid_color, "%s => %s:%d", > - sched_in->shortname, thread__comm_str(sched_in), sched_in->tid); > + tr->shortname, thread__comm_str(sched_in), sched_in->tid); > } > > if (sched->map.comp && new_cpu) > @@ -2200,37 +2246,6 @@ static void save_idle_callchain(struct idle_thread_runtime *itr, > callchain_cursor__copy(&itr->cursor, &callchain_cursor); > } > > -/* > - * handle runtime stats saved per thread > - */ > -static struct thread_runtime *thread__init_runtime(struct thread *thread) > -{ > - struct thread_runtime *r; > - > - r = zalloc(sizeof(struct thread_runtime)); > - if (!r) > - return NULL; > - > - init_stats(&r->run_stats); > - thread__set_priv(thread, r); > - > - return r; > -} > - > -static struct thread_runtime *thread__get_runtime(struct thread *thread) > -{ > - struct thread_runtime *tr; > - > - tr = thread__priv(thread); > - if (tr == NULL) { > - tr = thread__init_runtime(thread); > - if (tr == NULL) > - pr_debug("Failed to malloc memory for runtime data.\n"); > - } > - > - return tr; > -} > - > static struct thread *timehist_get_thread(struct perf_sched *sched, > struct perf_sample *sample, > struct machine *machine, > diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h > index 40cfa36..14d44c3 100644 > --- a/tools/perf/util/thread.h > +++ b/tools/perf/util/thread.h > @@ -26,7 +26,6 @@ struct thread { > pid_t ppid; > int cpu; > refcount_t refcnt; > - char shortname[3]; > bool comm_set; > int comm_len; > bool dead; /* if set thread has exited */ > -- > 2.7.4