From: Corey Minyard <minyard@acm.org>
To: linux-aspeed@lists.ozlabs.org
Subject: [PATCH] ipmi: kcs: Update OBF poll timeout to reduce latency
Date: Tue, 20 Feb 2024 13:33:13 -0600 [thread overview]
Message-ID: <ZdT+eThnYqb3iawF@mail.minyard.net> (raw)
In-Reply-To: <a9169894-6972-49c0-a1d4-d80863f5b511@molgen.mpg.de>
On Tue, Feb 20, 2024 at 04:51:21PM +0100, Paul Menzel wrote:
> Dear Andrew,
>
>
> Thank you for your patch. Some style suggestions.
>
> Am 20.02.24 um 13:36 schrieb Andrew Geissler:
> > From: Andrew Geissler <geissonator@yahoo.com>
>
> (Oh no, Yahoo. (ignore))
>
> You could be more specific in the git commit message by using *Double*:
>
> > ipmi: kcs: Double OBF poll timeout to reduce latency
>
> > ipmi: kcs: Double OBF poll timeout to 200 us to reduce latency
>
> > Commit f90bc0f97f2b ("ipmi: kcs: Poll OBF briefly to reduce OBE
> > latency") introduced an optimization to poll when the host has
I assume that removing that patch doesn't fix the issue, it would only
make it worse, right?
> > read the output data register (ODR). Testing has shown that the 100us
> > timeout was not always enough. When we miss that 100us window, it
> > results in 10x the time to get the next message from the BMC to the
> > host. When you're sending 100's of messages between the BMC and Host,
>
> I do not understand, how this poll timeout can result in such an increase,
> and why a quite big timeout hurts, but I do not know the implementation.
It's because increasing that number causes it to poll longer for the
event, the host takes longer than 100us to generate the event, and if
the event is missed the time when it is checked again is very long.
Polling for 100us is already pretty extreme. 200us is really too long.
The real problem is that there is no interrupt for this. I'd also guess
there is no interrupt on the host side, because that would solve this
problem, too, as it would certainly get around to handling the interupt
in 100us. I'm assuming the host driver is not the Linux driver, as it
should also handle this in a timely manner, even when polling.
If people want hardware to perform well, they ought to design it and not
expect software to fix all the problems.
The right way to fix this is probably to do the same thing the host side
Linux driver does. It has a kernel thread that is kicked off to do
this. Unfortunately, that's more complicated to implement, but it
avoids polling in this location (which causes latency issues on the BMC
side) and lets you poll longer without causing issues.
I'll let the people who maintain that code comment.
-corey
>
> > this results in a server boot taking 50% longer for IBM P10 machines.
> >
> > Started with 1000 and worked it down until the issue started to reoccur.
> > 200 was the sweet spot in my testing. 150 showed the issue
> > intermittently.
>
> I?d add a blank line here.
>
> > Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
> > ---
> > drivers/char/ipmi/kcs_bmc_aspeed.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/char/ipmi/kcs_bmc_aspeed.c b/drivers/char/ipmi/kcs_bmc_aspeed.c
> > index 72640da55380..af1eae6153f6 100644
> > --- a/drivers/char/ipmi/kcs_bmc_aspeed.c
> > +++ b/drivers/char/ipmi/kcs_bmc_aspeed.c
> > @@ -422,7 +422,7 @@ static void aspeed_kcs_irq_mask_update(struct kcs_bmc_device *kcs_bmc, u8 mask,
> > * missed the event.
> > */
> > rc = read_poll_timeout_atomic(aspeed_kcs_inb, str,
> > - !(str & KCS_BMC_STR_OBF), 1, 100, false,
> > + !(str & KCS_BMC_STR_OBF), 1, 200, false,
> > &priv->kcs_bmc, priv->kcs_bmc.ioreg.str);
> > /* Time for the slow path? */
> > if (rc == -ETIMEDOUT)
>
>
> Kind regards,
>
> Paul
next prev parent reply other threads:[~2024-02-20 19:33 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-20 12:36 [PATCH] ipmi: kcs: Update OBF poll timeout to reduce latency Andrew Geissler
2024-02-20 15:51 ` Paul Menzel
2024-02-20 19:33 ` Corey Minyard [this message]
2024-02-20 22:36 ` Andrew Jeffery
2024-02-21 16:57 ` Andrew Geissler
2024-02-21 18:08 ` Corey Minyard
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=ZdT+eThnYqb3iawF@mail.minyard.net \
--to=minyard@acm.org \
--cc=linux-aspeed@lists.ozlabs.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 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).