mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Zhang Rui <rui.zhang@intel.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	mingo@elte.hu, robert.richter@amd.com, acme@redhat.com,
	paulus@samba.org, dzickus@redhat.com, gorcunov@gmail.com,
	fweisbec@gmail.com, Lin Ming <ming.m.lin@intel.com>,
	"Brown, Len" <lenb@kernel.org>,
	Matthew Garrett <mjg59@srcf.ucam.org>,
	Matt Fleming <matt@console-pimps.org>
Subject: Re: [RFC PATCH 0/3] perf: show package power consumption in perf
Date: Wed, 18 Aug 2010 14:25:29 +0200	[thread overview]
Message-ID: <1282134329.1926.3918.camel@laptop> (raw)
In-Reply-To: <1282118350.5181.115.camel@rui>

On Wed, 2010-08-18 at 15:59 +0800, Zhang Rui wrote:
> Hi, all,
> 
> RAPL(running average power limit) is a new feature which provides
> mechanisms to enforce power consumption limit, on some new processors.
> 
> Generally speaking, by using RAPL, OS can set a power budget in a
> certain time window, and let Hardware to throttle the processor
> P/T-state to meet this energy limitation.
> 
> RAPL also provides a new MSR, i.e. MSR_PKG_ENERGY_STATUS, which reports
> the total amount of energy consumed by the package.
> 
> I'm not sure if to support RAPL or not, but anyway, it sounds like a
> good idea to export the energy status in perf.
> 
> So a new perf pmu and event to show the package energy consumed is
> introduced in this patch.
> 
> Here is what I get after applying the three patches,
> 
> #./perf stat -e energy test
> Performance counter stats for 'test':
> 
> 	202	Joules cost by package
> 7.926001238	seconds time elapsed
> 
> 
> Note that this patch set is made based on Peter's perf-pmu branch,
> git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-perf.git
>  which provides better interfaces to register/unregister a new pmu.
> 
> any comment are welcome. :)


Nice,.. however:

 - if it is a pure read-only counter without sampling support,
   expose it as such, don't fudge in the hrtimer stuff. Simply
   fail to create a sampling event.

   SH has the same problem for its 'normal' PMU, the solution is
   to use event groups, Matt was looking at adding support to
   perf-record for that, if creating a sampling event fails, fall
   back to {hrtimer, $event} groups.

 - since its a free-running, non-configurable counter, you can indeed
   act like its a 'software' event in that you can schedule consumers
   without constraints, however I don't think the PERF_COUNT_SW_* space
   is the right way to expose this counter.

   Better would be to use the sysfs stuff Lin has been working on (for
   which I still need to catch up on the latest discussions), it would
   then be tied to the pmu instance and appear/disappear when you load/
   unload the module.

   However for testing purposes I see why you'd want to have _a_
   interface :-)

- it would be nice if you'd write the cpu detection a bit more readable,
  also, it looks like you forgot to check x86_vendor == X86_VENDOR_INTEL.

> +static int __init intel_rapl_init(void)
> +{
> +	/*
> +	 * RAPL features are only supported on processors have a CPUID
> +	 * signature with DisplayFamily_DisplayModel of 06_2AH, 06_2DH
> +	 */
> +	if (boot_cpu_data.x86 != 0x06 ||
> +	    (boot_cpu_data.x86_model != 0x2A &&
> +	    boot_cpu_data.x86_model != 0x2D))
> +		return -ENODEV;
> +
> +	if (rapl_check_unit())
> +		return -ENODEV;
> +
> +	perf_pmu_register(&rapl_pmu);
> +	return 0;
> +}

Maybe something like (see intel_pmu_init() for example):

  if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
    return -ENODEV;

  if (boot_cpu_data.x86 != 0x06)
    return -ENODEV;

  switch (boot_cpu_data.x86_model) {
  case 0x2A: /* sandybridge ?! 32nm */
  case 0x2D: /* othermodel 32nm */
    break;

  default:
    return -ENODEV;
  }

Which again reminds me to ask of Intel, a comprehensive x86_model list,
please?

Alternatively, you can create a X86_FEATURE_RAPL and simply use
boot_cpu_has(X86_FEATURE_RAPL) (much like intel_ds_init() has).

  reply	other threads:[~2010-08-18 12:26 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-18  7:59 Zhang Rui
2010-08-18 12:25 ` Peter Zijlstra [this message]
2010-08-18 12:41   ` Matt Fleming
2010-08-19  3:28     ` Lin Ming
2010-08-19  7:54       ` Matt Fleming
2010-08-19  8:15         ` Lin Ming
2010-08-19  8:31         ` Zhang Rui
2010-08-19  8:32           ` Matt Fleming
2010-08-19  9:44             ` Peter Zijlstra
2010-08-21  1:18               ` Frederic Weisbecker
2010-08-21  9:30                 ` Ingo Molnar
2010-08-23  9:31                 ` Peter Zijlstra
2010-08-19  9:02       ` Peter Zijlstra
2010-08-20  1:44         ` Zhang Rui
2010-08-20  9:34           ` Peter Zijlstra
2010-08-20 12:31             ` Ingo Molnar
2010-08-20 21:34               ` acme
2010-08-19  2:43   ` Lin Ming
2010-08-19  8:54     ` Peter Zijlstra
2010-08-20  0:21       ` Lin Ming

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=1282134329.1926.3918.camel@laptop \
    --to=peterz@infradead.org \
    --cc=acme@redhat.com \
    --cc=dzickus@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=gorcunov@gmail.com \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt@console-pimps.org \
    --cc=ming.m.lin@intel.com \
    --cc=mingo@elte.hu \
    --cc=mjg59@srcf.ucam.org \
    --cc=paulus@samba.org \
    --cc=robert.richter@amd.com \
    --cc=rui.zhang@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome