Re: [PATCH] ipmi_si_intf: use usleep_range() instead of busy looping

From: Tejun Heo
Date: Wed Jul 10 2019 - 10:22:26 EST


Hello,

On Tue, Jul 09, 2019 at 06:01:44PM -0500, Corey Minyard wrote:
> > I'm really not sure "carefully tuned" is applicable on indefinite busy
> > looping.
>
> Well, yeah, but other things were tried and this was the only thing
> we could find that worked. That was before the kind of SMP stuff
> we have now, though.

I see.

> > We can go for shorter timeouts for sure but I don't think this sort of
> > busy looping is acceptable. Is your position that this must be a busy
> > loop?
>
> Well, no. I want something that provides as high a throughput as
> possible and doesn't cause scheduling issues. But that may not be
> possible. Screwing up the scheduler is a lot worse than slow IPMI
> firmware updates.
>
> How short can the timeouts be and avoid issues?

We first tried msleep(1) and that was too slow even for sensor reading
making it take longer than 50s. With the 100us-200us sleep, it got
down to ~5s which was good enough for our use case and the cpu /
scheduler impact was still mostly negligible. I can't tell for sure
without testing but going significantly below 100us is likely to
become visible pretty quickly.

We can also take a hybrid approach where we busy poll w/ 1us udelay
upto, say, fifty times and then switch to sleeping poll.

Are there some tests which can be used to verify the cases which may
get impacted by these changes?

Thanks.

--
tejun