All of lore.kernel.org
 help / color / mirror / Atom feed
From: Huang Rui <ray.huang@amd.com>
To: Borislav Petkov <bp@suse.de>
Cc: "Guenter Roeck" <linux@roeck-us.net>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Jean Delvare" <jdelvare@suse.de>,
	"Andy Lutomirski" <luto@amacapital.net>,
	"Andreas Herrmann" <herrmann.der.user@gmail.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@kernel.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	"Len Brown" <lenb@kernel.org>,
	"John Stultz" <john.stultz@linaro.org>,
	"Frédéric Weisbecker" <fweisbec@gmail.com>,
	lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org,
	x86@kernel.org,
	"Andreas Herrmann" <herrmann.der.user@googlemail.com>,
	"Aravind Gopalakrishnan" <Aravind.Gopalakrishnan@amd.com>,
	"Fengguang Wu" <fengguang.wu@intel.com>,
	"Aaron Lu" <aaron.lu@intel.com>, "Tony Li" <tony.li@amd.com>
Subject: Re: [PATCH v2 05/10] hwmon: (fam15h_power) Add compute unit accumulated power
Date: Tue, 27 Oct 2015 10:53:40 +0800	[thread overview]
Message-ID: <20151027025339.GF8036@hr-amur2> (raw)
In-Reply-To: <20151023132702.GC2844@pd.tnic>

On Fri, Oct 23, 2015 at 03:27:02PM +0200, Borislav Petkov wrote:
> On Tue, Oct 20, 2015 at 10:28:24AM +0800, Huang Rui wrote:
> > This patch adds a member in fam15h_power_data which specifies the
> > compute unit accumulated power. It adds do_read_registers_on_cu to do
> > all the read to all MSRs and run it on one of the online cores on each
> > compute unit with smp_call_function_many(). This behavior can decrease
> > IPI numbers.
> > 
> > Suggested-by: Borislav Petkov <bp@alien8.de>
> > Signed-off-by: Huang Rui <ray.huang@amd.com>
> > Cc: Guenter Roeck <linux@roeck-us.net>
> > Cc: Peter Zijlstra <peterz@infradead.org>
> > Cc: Ingo Molnar <mingo@kernel.org>
> > ---
> >  drivers/hwmon/fam15h_power.c | 68 +++++++++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 67 insertions(+), 1 deletion(-)
> > 

<snip>

> > +
> > +static int read_registers(struct fam15h_power_data *data)
> > +{
> > +	int this_cpu, ret;
> > +	int cu_num, cores_per_cu, cpu, cu;
> > +	cpumask_var_t mask;
> > +
> > +	cores_per_cu = amd_get_cores_per_cu();
> > +	cu_num = boot_cpu_data.x86_max_cores / cores_per_cu;
> > +
> > +	WARN_ON_ONCE(cu_num > MAX_CUS);
> > +
> > +	ret = zalloc_cpumask_var(&mask, GFP_KERNEL);
> > +	if (!ret)
> > +		return -ENOMEM;
> > +
> > +	this_cpu = get_cpu();
> 
> This should be get_online_cpus() and its counterpart below should be
> put_online_cpus().
> 

Preemption must be disabled when calling smp_call_function_many,
get_cpu would did that. Will get_online_cpus have the same behavior
like that?

> > +
> > +	/*
> > +	 * Choose the first online core of each compute unit, and then
> > +	 * read their MSR value of power and ptsc in one time of IPI,
> 
> 						in a single IPI.
> 
> > +	 * because the MSR value of cpu core represent the compute
> 
> s/cpu/CPU/
> 
> do that in *all* your text.
> 
> > +	 * unit's. This behavior can decrease IPI numbers between the
> 
> 	  unit's ?
> 
> What does that sentence even mean?
> 

That means "the value(cu_acc_power) of the compute unit", which does
not represent the value of one CPU core.

> > +	 * cores.
> > +	 */
> > +	cpu = cpumask_first(cpu_online_mask);
> > +	cu = cpu / cores_per_cu;
> > +	while (cpu < boot_cpu_data.x86_max_cores) {
> > +		if (cu <= cpu / cores_per_cu) {
> > +			cu = cpu / cores_per_cu + 1;
> > +			cpumask_set_cpu(cpu, mask);
> > +		}
> > +		cpu = cpumask_next(cu * cores_per_cu - 1, cpu_online_mask);
> > +	}
> 
> This is hard to parse - I *think* you're setting a bit in mask for a
> core in each CU...
> 

Yes, that's right.

My codes' behavior is below:

Assumed cores_per_cu is 4 and cu_number is 6, and the online cpumask
is:

        cu5  cu4  cu3  cu2  cu1  cu0
        1000_1100_0110_1011_0000_1111

After setting bits of the mask:

        1000_0100_0010_0001_0000_0001
        on   on   on   on   off  on

> If so, I think you can simplify it by generating a tmp mask which
> contains the cores of CU0, i.e. something like that:
> 
> 	11_00_00_...
> 
> and then do cpumask_and(res, ...) to find the online cores on that CU
> and then do cpumask_set_cpu(cpumask_any(res), mask) to select one CPU on
> that CU.
> 
> And then shift to the next CU:
> 
> 	cpumask_shift_right(dst, src_mask, cores_per_cu);
> 
> I think this should be cleaner and less error prone, without the
> conditionals...
> 

OK, how about below codes:

---
for (i = 0; i <= cores_per_cu / BITS_PER_LONG; i++) {
	offset = cores_per_cu % BITS_PER_LONG;
	if (i == cores_per_cu / BITS_PER_LONG) {
		cpumask_bits(src_mask)[i] = GENMASK(offset -1, 0);
		break;
	}
	cpumask_bits(src_mask)[i] = GENMASK(BITS_PER_LONG - 1, 0);
}

for (i = 0; i < cu_num; i++) {
	cpumask_shift_left(dst, src_mask, cores_per_cu * i);
	cpumask_and(res, dst, cpu_online_mask);
	cpumask_set_cpu(cpumask_any(res), mask);
}
---

Thanks,
Rui

  parent reply	other threads:[~2015-10-27  2:55 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-20  2:28 [PATCH v2 00/10] hwmon: (fam15h_power) Introduce an accumulated power reporting algorithm Huang Rui
2015-10-20  2:28 ` [PATCH v2 01/10] hwmon: (fam15h_power) Refactor attributes for dynamically added Huang Rui
2015-10-23 13:42   ` Guenter Roeck
2015-10-26  1:58     ` Huang Rui
2015-10-26  2:14       ` Guenter Roeck
2015-10-26  2:25         ` Huang Rui
2015-10-20  2:28 ` [PATCH v2 02/10] hwmon: (fam15h_power) Enable power1_input on AMD Carrizo Huang Rui
2015-10-23 13:45   ` Guenter Roeck
2015-10-26  2:19     ` Huang Rui
2015-10-20  2:28 ` [PATCH v2 03/10] hwmon: (fam15h_power) Add max compute unit accumulated power Huang Rui
2015-10-20  2:28 ` [PATCH v2 04/10] x86, amd: add accessor for number of cores per compute unit Huang Rui
2015-10-20  2:28 ` [PATCH v2 05/10] hwmon: (fam15h_power) Add compute unit accumulated power Huang Rui
2015-10-20  7:24   ` kbuild test robot
2015-10-21  1:42     ` Huang Rui
2015-10-21  2:15       ` Guenter Roeck
2015-10-21  2:40         ` Huang Rui
2015-10-21  2:49           ` Guenter Roeck
2015-10-21  3:04             ` Huang Rui
2015-10-21  6:05               ` Jean Delvare
2015-10-21  6:28                 ` Huang Rui
2015-10-23 13:27   ` Borislav Petkov
2015-10-23 13:37     ` Guenter Roeck
2015-10-27  2:53     ` Huang Rui [this message]
2015-10-28  0:34       ` Borislav Petkov
2015-10-28  5:06         ` Huang Rui
2015-10-20  2:28 ` [PATCH v2 06/10] hwmon: (fam15h_power) Add ptsc counter value for " Huang Rui
2015-10-23 13:59   ` Guenter Roeck
2015-10-26  3:37     ` Huang Rui
2015-10-26  4:36       ` Borislav Petkov
2015-10-20  2:28 ` [PATCH v2 07/10] hwmon: (fam15h_power) Introduce a cpu accumulated power reporting algorithm Huang Rui
2015-10-23 13:28   ` Borislav Petkov
2015-10-26  3:46     ` Huang Rui
2015-10-26  4:41       ` Borislav Petkov
2015-10-23 14:20   ` Guenter Roeck
2015-10-27  3:36     ` Huang Rui
2015-10-20  2:28 ` [PATCH v2 08/10] hwmon: (fam15h_power) Add documentation for previous TDP reporting Huang Rui
2015-10-20  2:28 ` [PATCH v2 09/10] hwmon: (fam15h_power) Add documentation for accumulated power algorithm Huang Rui
2015-10-23 10:22   ` Borislav Petkov
2015-10-20  2:28 ` [PATCH v2 10/10] MAINTAINERS: change the maintainer of fam15h_power driver Huang Rui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151027025339.GF8036@hr-amur2 \
    --to=ray.huang@amd.com \
    --cc=Aravind.Gopalakrishnan@amd.com \
    --cc=aaron.lu@intel.com \
    --cc=bp@suse.de \
    --cc=fengguang.wu@intel.com \
    --cc=fweisbec@gmail.com \
    --cc=herrmann.der.user@gmail.com \
    --cc=herrmann.der.user@googlemail.com \
    --cc=jdelvare@suse.de \
    --cc=john.stultz@linaro.org \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=lm-sensors@lm-sensors.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    --cc=tony.li@amd.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.