Thread (56 messages) flat view 56 messages, 11 authors, 2018-05-28

Re: [RFC PATCH for 4.18 00/14] Restartable Sequences

From: Daniel Colascione <hidden>
Date: 2018-05-02 16:55:57
Also in: lkml

On Wed, May 2, 2018 at 9:42 AM Steven Rostedt [off-list ref] wrote:
On Wed, 02 May 2018 16:07:48 +0000
Daniel Colascione [off-list ref] wrote:
quoted
Why couldn't we take a page fault just before schedule? The reason we
can't
quoted
take a page fault in atomic context is that doing so might call
schedule.
quoted
Here, we're about to call schedule _anyway_, so what harm does it do to
call something that might call schedule? If we schedule via that call,
we
quoted
can skip the manual schedule we were going to perform.
Another issue is slowing down something that is considered a fast path.
There are two questions: 1) does this feature slow down schedule when
you're not using it? and 2) is schedule unacceptably slow when you are
using this feature?

The answer to #1 is no; rseq already tests current->rseq during task switch
(via rseq_set_notify_resume), so adding a single further branch (which we'd
only test when we follow the current->rseq path anyway) isn't a problem.

Regarding #2: yes, a futex operation will increase path length for that one
task switch, but in the no-page-fault case, only by a tiny amount. We can
run benchmarks of course, but I don't see any reason to suspect that the
proposal would make task switching unacceptably slow. If we *do* take a
page fault, we won't have done much additional work overall, since
*somebody* is going to take that page fault anyway when the lock is
released, and the latency of the task switch shouldn't increase, since the
futex code will very quickly realize that it needs to sleep and call
schedule anyway.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help