From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Joel Fernandes <joelaf@google.com>,
"H. Peter Anvin" <hpa@zytor.com>, Paul Turner <pjt@google.com>,
Boqun Feng <boqun.feng@gmail.com>, rostedt <rostedt@goodmis.org>,
Andy Lutomirski <luto@amacapital.net>,
paulmck <paulmck@kernel.org>, Julien Desfossez <ju@klipix.org>
Subject: Re: [RFC PATCH v2] sched_pair_cpu: Introduce scheduler task pairing system call
Date: Fri, 26 Jun 2020 11:16:17 -0400 (EDT) [thread overview]
Message-ID: <1747476740.14310.1593184577574.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <489418873.12472.1593102891027.JavaMail.zimbra@efficios.com>
----- On Jun 25, 2020, at 12:34 PM, Mathieu Desnoyers mathieu.desnoyers@efficios.com wrote:
> ----- On Jun 25, 2020, at 10:56 AM, Mathieu Desnoyers
> mathieu.desnoyers@efficios.com wrote:
>
>> ----- On Jun 24, 2020, at 3:50 PM, Peter Zijlstra peterz@infradead.org wrote:
>>
>>> On Wed, Jun 24, 2020 at 02:31:33PM -0400, Mathieu Desnoyers wrote:
>>>
>> [...]
>>> The other alternative is using a preempt_notifier for the worker I
>>> suppose.
>>
> [...]
>>>
>>> preempt_notifier could work here too I suppose, install it on yourself
>>> when you do the pear syscall and take it away again when you're finished
>>> with it.
>
> The issue I currently have with preempt notifiers is that I need to
> send an IPI from a sched_out notifier, which has interrupts off and
> hold the rq lock. smp_call_function_single() warns due to irq off, and
> indeed it triggers deadlocks.
>
> Before using preempt notifiers, I was touching the "prev" task after
> irqs were reenabled and rq lock was released, which allowed me to
> send an IPI from that context.
>
> Any thoughts on how to best solve this ?
I think I may have found a way out of this: I may not need to use
smp_call_function_single() at all.
When preempting a paired task, I think we can rely on memory barrier at the
beginning of scheduling of the paired task to match the memory barrier at
the end of scheduling of the kworker thread to provide memory ordering. Therefore,
the IPI is not needed at all in this case.
When preempting the kworker thread, things are a bit trickier. AFAIU I can simply
queue task work on the paired task directly without an IPI, and then use
kick_process() on the paired task.
The remaining concern is whether kick_process() (and thus smp_send_reschedule())
is sufficient to guarantee a memory barrier before smp_send_reschedule returns ?
I suspect not, because it only raises the IPI, and does not appear to wait for
its handler to complete. In that case I need a release on the paired task and
an acquire in sched_out of the kworker. The memory barrier at the end of schedule
fulfills the acquire, but I don't see how the acquire is done on the paired task,
because execution of its scheduler does not necessarily happen immediately when
the IPI is raised.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2020-06-26 15:16 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-19 20:25 [RFC PATCH v2] sched_pair_cpu: Introduce scheduler task pairing system call Mathieu Desnoyers
2020-06-22 2:23 ` [sched_pair_cpu] e9f2fb8893: will-it-scale.per_thread_ops -67.5% regression kernel test robot
2020-06-24 12:11 ` [RFC PATCH v2] sched_pair_cpu: Introduce scheduler task pairing system call Peter Zijlstra
2020-06-24 18:31 ` Mathieu Desnoyers
2020-06-24 19:50 ` Peter Zijlstra
2020-06-25 14:56 ` Mathieu Desnoyers
2020-06-25 16:34 ` Mathieu Desnoyers
2020-06-26 15:16 ` Mathieu Desnoyers [this message]
2020-06-26 15:24 ` Mathieu Desnoyers
2020-06-26 16:00 ` Peter Zijlstra
2020-06-26 17:44 ` Mathieu Desnoyers
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=1747476740.14310.1593184577574.JavaMail.zimbra@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=boqun.feng@gmail.com \
--cc=hpa@zytor.com \
--cc=joelaf@google.com \
--cc=ju@klipix.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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