linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
	"lenb@kernel.org" <lenb@kernel.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"patches@linaro.org" <patches@linaro.org>,
	"linaro-dev@lists.linaro.org" <linaro-dev@lists.linaro.org>,
	"pdeschrijver@nvidia.com" <pdeschrijver@nvidia.com>,
	"len.brown@intel.com >> Len Brown" <len.brown@intel.com>
Subject: Re: [PATCH 0/6] cpuidle : per cpu latencies
Date: Tue, 18 Sep 2012 10:52:13 +0100	[thread overview]
Message-ID: <20120918095212.GA23259@e102568-lin.cambridge.arm.com> (raw)
In-Reply-To: <50579784.4090000@linaro.org>

On Mon, Sep 17, 2012 at 10:35:00PM +0100, Daniel Lezcano wrote:
> On 09/17/2012 10:50 PM, Rafael J. Wysocki wrote:
> > On Monday, September 17, 2012, Daniel Lezcano wrote:
> >> On 09/08/2012 12:17 AM, Rafael J. Wysocki wrote:
> >>> On Friday, September 07, 2012, Daniel Lezcano wrote:

[...]

> >>> Unfortunately, I also don't agree with the approach used by the remaining
> >>> patches, which is to try to use a separate array of states for each
> >>> individual CPU core.  This way we end up with quite some duplicated data
> >>> if the CPU cores in question actually happen to be identical.
> >>
> >> Actually, there is a single array of states which is defined with the
> >> cpuidle_driver. A pointer to this array from the cpuidle_device
> >> structure is added and used from the cpuidle core.
> >>
> >> If the cpu cores are identical, this pointer will refer to the same array.
> > 
> > OK, but what if there are two (or more) sets of cores, where all cores in one
> > set are identical, but two cores from different sets differ?
> 
> A second array is defined and registered for these cores with the
> cpuidle_register_states function.
> 
> Let's pick an example with the big.LITTLE architecture.
> 
> There are two A7 and two A15, resulting in the code on 4 cpuidle_device
> structure (eg. dev_A7_1, dev_A7_2, dev_A15_1, dev_A15_2). Then the
> driver registers a different cpu states array for the A7s and the A15s
> 
> At the end,
> 
> dev_A7_1->states points to the array states 1
> dev_A7_2->states points to the array states 1
> 
> dev_A15_1->states points to the array states 2
> dev_A15_2->states points to the array states 2
> 
> It is similar with Tegra3.
> 
> I think Peter and Lorenzo already wrote a driver based on this approach.
> Peter, Lorenzo any comments ?

Well, I guess the question is about *where* the array of states should
belong. With the current approach we end up having an array of states
in the cpuidle_driver, but also array(s) of states in platform code and we
override the newly added pointer in cpuidle_device to point to those
array(s) for CPUs whose idle states differ from the ones registered (and
copied) in the driver.

Data is NOT duplicated but now I understand Rafael's remark.

If we have a driver per-[set of cpus] (that is impossible with the
current framework as you higlighted) code would be cleaner since
all idle states data would live in cpuidle_driver(s), not possibly in
platform code. Then the problem becomes: what cpuidle_driver should be
used and how to choose that at run-time within the governors.

> 
> The single registration mechanism introduced by Deepthi is kept and we
> have a way to specify different idle states for different cpus.
> 
> > In that case it would be good to have one array of states per set, but the
> > patch doesn't seem to do that, does it?
> 
> Yes, this is what does the patch.

The patch adds a pointer to idle states in cpuidle_device, the platform driver
defines the array(s).

> >> Maybe I misunderstood you remark but there is no data duplication, that
> >> was the purpose of this approach to just add a pointer to point to a
> >> single array when the core are identical and to a different array when
> >> the cores are different (set by the driver). Furthermore, this patch
> >> allows to support multiple cpu latencies without impacting the existing
> >> drivers.
> > 
> > Well that's required. :-)
> 
> Yes :)
> 
> >>> What about using a separate cpuidle driver for every kind of different CPUs in
> >>> the system (e.g. one driver for "big" CPUs and the other for "little" ones)?
> >>>
> >>> Have you considered this approach already?
> >>
> >> No, what would be the benefit of this approach ?
> > 
> > Uniform handling of all the CPUs of the same kind without data duplication
> > and less code complexity, I think.
> > 
> >> We will need to switch
> >> the driver each time we switch the cluster (assuming all it is the bL
> >> switcher in place and not the scheduler). IMHO, that could be suboptimal
> >> because we will have to (un)register the driver, register the devices,
> >> pull all the sysfs and notifications mechanisms. The cpuidle core is not
> >> designed for that.
> > 
> > I don't seem to understand how things are supposed to work, then.
> 
> Sorry, I did not suggest that. I am wondering how several cpuidle
> drivers can co-exist together in the state of the code. Maybe I
> misunderstood your idea.
> 
> The patchset I sent is pretty simple and do not duplicate the array states.
> 
> That would be nice if Len could react to this patchset (4/6,5/6, and
> 6/6). Cc'ing him to its intel address.

As the idle infrastructure stands I do not see how multiple cpuidle drivers
can co-exist, that's the problem, and Daniel already mentioned that.

Lorenzo


  reply	other threads:[~2012-09-18  9:52 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-07 10:19 [PATCH 0/6] cpuidle : per cpu latencies Daniel Lezcano
2012-09-07 10:19 ` [PATCH 1/6] acpi : move the acpi_idle_driver variable declaration Daniel Lezcano
2012-09-07 21:19   ` Rafael J. Wysocki
2012-09-11 11:14     ` Daniel Lezcano
2012-09-11 20:28       ` Rafael J. Wysocki
2012-09-07 10:19 ` [PATCH 2/6] acpi : move cpuidle_device field out of the acpi_processor_power structure Daniel Lezcano
2012-09-07 11:03   ` Amit Kucheria
2012-09-07 21:40   ` Rafael J. Wysocki
2012-09-07 21:54     ` Rafael J. Wysocki
2012-09-07 22:06       ` Rafael J. Wysocki
2012-09-11 12:20         ` Daniel Lezcano
2012-09-11 20:32           ` Rafael J. Wysocki
2012-09-07 10:19 ` [PATCH 3/6] acpi : remove pointless cpuidle device state_count init Daniel Lezcano
2012-09-07 11:01   ` Amit Kucheria
2012-09-07 21:50   ` Rafael J. Wysocki
2012-09-16 20:38     ` Daniel Lezcano
     [not found]       ` <505638D9.80302-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-09-16 21:02         ` Rafael J. Wysocki
2012-09-07 10:19 ` [PATCH 4/6] cpuidle : add a pointer for cpuidle_state in the cpuidle_device Daniel Lezcano
     [not found] ` <1347013172-12465-1-git-send-email-daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-09-07 10:19   ` [PATCH 5/6] cpuidle : use per cpuidle device cpu states Daniel Lezcano
2012-09-07 10:19 ` [PATCH 6/6] cpuidle : add cpuidle_register_states function Daniel Lezcano
2012-09-07 11:04 ` [PATCH 0/6] cpuidle : per cpu latencies Amit Kucheria
2012-09-07 12:02   ` Daniel Lezcano
2012-09-07 22:17 ` Rafael J. Wysocki
2012-09-17  8:03   ` Daniel Lezcano
2012-09-17 20:50     ` Rafael J. Wysocki
2012-09-17 21:35       ` Daniel Lezcano
2012-09-18  9:52         ` Lorenzo Pieralisi [this message]
2012-09-18 21:10           ` Rafael J. Wysocki
2012-09-18 11:19         ` Peter De Schrijver
2012-09-18 21:05         ` Rafael J. Wysocki

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=20120918095212.GA23259@e102568-lin.cambridge.arm.com \
    --to=lorenzo.pieralisi@arm.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=len.brown@intel.com \
    --cc=lenb@kernel.org \
    --cc=linaro-dev@lists.linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=patches@linaro.org \
    --cc=pdeschrijver@nvidia.com \
    --cc=rjw@sisk.pl \
    /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;
as well as URLs for NNTP newsgroup(s).