Re: [PATCH v2 1/3] x86/cpufeatures: Enumerate user wait instructions

From: Andy Lutomirski
Date: Sun Feb 24 2019 - 14:45:52 EST

On Thu, Feb 21, 2019 at 2:57 PM Yu, Fenghua <fenghua.yu@xxxxxxxxx> wrote:
> > From: Fenghua Yu [mailto:fenghua.yu@xxxxxxxxx]
> > On Wed, Feb 20, 2019 at 10:37:27PM -0800, Andy Lutomirski wrote:
> > Or to simplify the situation, how about we still use zero as global max wait
> > time (i.e. no limitation for global wait time) as implemented in this patch
> > set? User can still change the value to any value based on their usage. Isn't
> > this a right way to take care of any usage?
> Plus, if scheduler timers works, umwait will be forced time out by timer in HZ anyway.

Indeed. But, on some configs, the scheduler timer intentionally will
*not* fire.

> Only for case without scheduler timer, sysadmin may need to set a small max umwait time to force timout. But in this case (real time), I doubt user app really wants to call umwait to save power with long latency of waking up from umwait. So likely in this case, user app won't call umwait and there is no usage to set a small value for max umwait time.

I don't really know why an application would use umwait at all. About
the only legitimate use I can think of is to treat it as a somewhat
power-saving variant of REP NOP. What I want to avoid is the case
where it works dramatically differently on NO_HZ_FULL systems as
compared to everything else. Also, UMWAIT may behave a bit
differently if the max timeout is hit, and I'd like that path to get
exercised widely by making it happen even on default configs.

So I propose setting the timeout to either 100 microseconds or 100k
"cycles" by default. In the event someone determines that they save
materially more power or gets materially better performance with a
longer timeout, we can revisit the value.