Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1649988 > unrolled thread
| Started by | Andy Lutomirski <luto@kernel.org> |
|---|---|
| First post | 2017-05-25 00:10 +0200 |
| Last post | 2017-05-27 18:20 +0200 |
| Articles | 4 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state Andy Lutomirski <luto@kernel.org> - 2017-05-25 00:10 +0200
Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state Christoph Hellwig <hch@lst.de> - 2017-05-26 11:00 +0200
Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state Andy Lutomirski <luto@kernel.org> - 2017-05-27 18:10 +0200
Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state Linus Torvalds <torvalds@linux-foundation.org> - 2017-05-27 18:20 +0200
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2017-05-25 00:10 +0200 |
| Subject | [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state |
| Message-ID | <tKMDD-84u-3@gated-at.bofh.it> |
This should at least make vendors less nervous about Linux's APST policy. I'm not aware of any concrete bugs it would fix (although I was hoping it would fix the Samsung/Dell quirk). Cc: stable@vger.kernel.org # v4.11 Cc: Kai-Heng Feng <kai.heng.feng@canonical.com> Cc: Mario Limonciello <mario_limonciello@dell.com> Signed-off-by: Andy Lutomirski <luto@kernel.org> --- drivers/nvme/host/core.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index d5e0906262ea..381e9f813385 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1325,13 +1325,7 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl) /* * APST (Autonomous Power State Transition) lets us program a * table of power state transitions that the controller will - * perform automatically. We configure it with a simple - * heuristic: we are willing to spend at most 2% of the time - * transitioning between power states. Therefore, when running - * in any given state, we will enter the next lower-power - * non-operational state after waiting 50 * (enlat + exlat) - * microseconds, as long as that state's total latency is under - * the requested maximum latency. + * perform automatically. * * We will not autonomously enter any non-operational state for * which the total latency exceeds ps_max_latency_us. Users @@ -1405,9 +1399,39 @@ static void nvme_configure_apst(struct nvme_ctrl *ctrl) /* * This state is good. Use it as the APST idle * target for higher power states. + * + * Intel RSTe supposedly uses the following algorithm: + * 60ms delay to transition to the first + * non-operational state and 1000*exlat to each + * additional state. This is problematic. 60ms is + * too short if the first non-operational state has + * high latency, and 1000*exlat into a state is + * absurdly slow. (exlat=22ms seems typical for the + * deepest state. A delay of 22 seconds to enter that + * state means that it will almost never be entered at + * all, wasting power and, worse, turning otherwise + * easy-to-detect hardware/firmware bugs into sporadic + * problems. + * + * Linux is willing to spend at most 2% of the time + * transitioning between power states. Therefore, + * when running in any given state, we will enter the + * next lower-power non-operational state after + * waiting 50 * (enlat + exlat) microseconds, as long + * as that state's total latency is under the + * requested maximum latency. */ transition_ms = total_latency_us + 19; do_div(transition_ms, 20); + + /* + * Some vendors have expressed nervousness about + * entering the deepest state after less than six + * seconds. + */ + if (state == ctrl->npss && transition_ms < 6000) + transition_ms = 6000; + if (transition_ms > (1 << 24) - 1) transition_ms = (1 << 24) - 1; -- 2.9.4
[toc] | [next] | [standalone]
| From | Christoph Hellwig <hch@lst.de> |
|---|---|
| Date | 2017-05-26 11:00 +0200 |
| Subject | Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state |
| Message-ID | <tLjge-3FP-7@gated-at.bofh.it> |
| In reply to | #1649988 |
On Wed, May 24, 2017 at 03:06:30PM -0700, Andy Lutomirski wrote: > This should at least make vendors less nervous about Linux's APST > policy. I'm not aware of any concrete bugs it would fix (although I > was hoping it would fix the Samsung/Dell quirk). > > Cc: stable@vger.kernel.org # v4.11 Just following a somewhat odd and arbitray policy from another driver that doesn't fix anything by itself certainly isn't stable material. And to be honest I'm not sure what applying it will gain us at all.
[toc] | [prev] | [next] | [standalone]
| From | Andy Lutomirski <luto@kernel.org> |
|---|---|
| Date | 2017-05-27 18:10 +0200 |
| Subject | Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state |
| Message-ID | <tLMrU-6fP-49@gated-at.bofh.it> |
| In reply to | #1651234 |
On Fri, May 26, 2017 at 1:52 AM, Christoph Hellwig <hch@lst.de> wrote: > On Wed, May 24, 2017 at 03:06:30PM -0700, Andy Lutomirski wrote: >> This should at least make vendors less nervous about Linux's APST >> policy. I'm not aware of any concrete bugs it would fix (although I >> was hoping it would fix the Samsung/Dell quirk). >> >> Cc: stable@vger.kernel.org # v4.11 > > Just following a somewhat odd and arbitray policy from another driver > that doesn't fix anything by itself certainly isn't stable material. Fair enough. The Cc: stable should certainly be dropped. > > And to be honest I'm not sure what applying it will gain us at all. I'd be fine with skipping this patch entirely at least until we find some evidence that it solves a problem instead.
[toc] | [prev] | [next] | [standalone]
| From | Linus Torvalds <torvalds@linux-foundation.org> |
|---|---|
| Date | 2017-05-27 18:20 +0200 |
| Subject | Re: [PATCH 1/2] nvme: Wait at least 6000ms before entering the deepest idle state |
| Message-ID | <tLMBA-6jn-39@gated-at.bofh.it> |
| In reply to | #1651913 |
On Sat, May 27, 2017 at 9:08 AM, Andy Lutomirski <luto@kernel.org> wrote:
> On Fri, May 26, 2017 at 1:52 AM, Christoph Hellwig <hch@lst.de> wrote:
>>
>> Just following a somewhat odd and arbitray policy from another driver
>> that doesn't fix anything by itself certainly isn't stable material.
>
> I'd be fine with skipping this patch entirely at least until we find
> some evidence that it solves a problem instead.
It's certainly worth waiting for confirmation that it actually changes
anything, but I did want to pipe up to say that "following a somewhat
odd and arbitrary policy from another driver" is not wrong per se.
In fact, on the power management we pretty much had to do that, simply
because that "odd and arbitrary policy" (Windows behavior) was the
only thing that had ever been tested by anybody. Same goes for a lot
of PCI subsystem behavior etc.
So it's not wrong per se to just emulate others' behaviors. But yes,
we should have some reason for doing so, not just doing so blindly.
Linus
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web