From: Chengming Zhou <zhouchengming@bytedance.com>
To: Joel Fernandes <joel@joelfernandes.org>
Cc: Connor O'Brien <connoro@google.com>,
linux-kernel@vger.kernel.org, kernel-team@android.com,
John Stultz <jstultz@google.com>,
Joel Fernandes <joelaf@google.com>,
Qais Yousef <qais.yousef@arm.com>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Valentin Schneider <vschneid@redhat.com>,
Will Deacon <will@kernel.org>, Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
"Paul E . McKenney" <paulmck@kernel.org>
Subject: Re: [RFC PATCH 00/11] Reviving the Proxy Execution Series
Date: Mon, 17 Oct 2022 12:26:13 +0800 [thread overview]
Message-ID: <5ea4949e-3e8b-2ec0-bdcf-93e5744caee1@bytedance.com> (raw)
In-Reply-To: <802E39EA-7444-4B33-AB95-594A600FE404@joelfernandes.org>
On 2022/10/17 11:56, Joel Fernandes wrote:
>
>
>> On Oct 16, 2022, at 11:25 PM, Chengming Zhou <zhouchengming@bytedance.com> wrote:
>>
>> Hello,
>>
>>> On 2022/10/4 05:44, Connor O'Brien wrote:
>>> Proxy execution is an approach to implementing priority inheritance
>>> based on distinguishing between a task's scheduler context (information
>>> required in order to make scheduling decisions about when the task gets
>>> to run, such as its scheduler class and priority) and its execution
>>> context (information required to actually run the task, such as CPU
>>> affinity). With proxy execution enabled, a task p1 that blocks on a
>>> mutex remains on the runqueue, but its "blocked" status and the mutex on
>>> which it blocks are recorded. If p1 is selected to run while still
>>> blocked, the lock owner p2 can run "on its behalf", inheriting p1's
>>> scheduler context. Execution context is not inherited, meaning that
>>> e.g. the CPUs where p2 can run are still determined by its own affinity
>>> and not p1's.
>>
>> This is cool. We have a problem (others should have encountered it too) that
>> priority inversion happened when the rwsem writer is waiting for many readers
>> which held lock but are throttled by CFS bandwidth control. (In our use case,
>> the rwsem is the mm_struct->mmap_sem)
>>
>> So I'm curious if this work can also solve this problem? If we don't dequeue
>> the rwsem writer when it blocked on the rwsem, then CFS scheduler pick it to
>> run, we can use blocked chain to find the readers to run?
>
> That seems a lot harder and unsupported by current patch set AFAICS (my exposure to this work is about a week so take it with a grain of salt). You could have multiple readers so how would you choose which reader to proxy for (round robin?). Also, you no longer have a chain but a tree of chains, with the leaves being each reader - so you have to track that somehow, then keep migrating the blocked tasks in the chain to each readers CPU. Possibly migrating a lot more than in the case of a single chain. Also it’s not clear if it will be beneficial as proxying for one reader does not mean you’re improving the situation if it is another reader that is in need of the boost.
>
Thanks for your reply, it's indeed more complex than I think, and proxying for just one reader
is also less efficient.
But this rwsem priority inversion problem hurts us so much that we are afraid to use
CFS bandwidth control now. Imaging when 10 readers held mmap_sem then throttled for 20ms,
the writer will have to wait for at least 200ms, which become worse if the writer held other lock.
Thanks.
next prev parent reply other threads:[~2022-10-17 4:26 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-03 21:44 Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 01/11] locking/ww_mutex: Remove wakeups from under mutex::wait_lock Connor O'Brien
2022-10-04 16:01 ` Waiman Long
2022-10-12 23:54 ` Joel Fernandes
2022-10-20 18:43 ` Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 02/11] locking/mutex: Rework task_struct::blocked_on Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 03/11] kernel/locking: Add p->blocked_on wrapper Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 04/11] locking/mutex: make mutex::wait_lock irq safe Connor O'Brien
2022-10-13 4:30 ` Joel Fernandes
2022-10-03 21:44 ` [RFC PATCH 05/11] sched: Split scheduler execution context Connor O'Brien
2022-10-14 17:01 ` Joel Fernandes
2022-10-19 17:17 ` Valentin Schneider
2022-10-20 18:43 ` Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 06/11] kernel/locking: Expose mutex_owner() Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 07/11] sched: Add proxy execution Connor O'Brien
2022-10-12 1:54 ` Joel Fernandes
2022-10-12 9:46 ` Juri Lelli
2022-10-14 17:07 ` Joel Fernandes
2022-10-15 13:53 ` Peter Zijlstra
2022-10-16 20:48 ` Steven Rostedt
2022-10-17 4:03 ` Joel Fernandes
2022-10-17 7:26 ` Peter Zijlstra
2022-10-24 22:33 ` Qais Yousef
2022-10-25 11:19 ` Joel Fernandes
2022-10-25 22:10 ` Qais Yousef
2022-10-15 15:28 ` Peter Zijlstra
2022-10-15 15:08 ` Peter Zijlstra
2022-10-15 15:10 ` Peter Zijlstra
2022-10-15 15:47 ` Peter Zijlstra
2022-10-24 10:13 ` Dietmar Eggemann
2022-10-29 3:31 ` Joel Fernandes
2022-10-31 16:39 ` Dietmar Eggemann
2022-10-31 18:00 ` Joel Fernandes
2022-11-04 17:09 ` Dietmar Eggemann
2022-11-21 0:22 ` Joel Fernandes
2022-11-21 1:49 ` Joel Fernandes
2022-11-21 3:59 ` Joel Fernandes
2022-11-22 18:45 ` Joel Fernandes
2023-01-09 8:51 ` Chen Yu
2022-10-03 21:44 ` [RFC PATCH 08/11] sched: Fixup task CPUs for potential proxies Connor O'Brien
2022-10-03 21:44 ` [RFC PATCH 09/11] sched/rt: Fix proxy/current (push,pull)ability Connor O'Brien
2022-10-10 11:40 ` Valentin Schneider
2022-10-14 22:32 ` Connor O'Brien
2022-10-19 17:05 ` Valentin Schneider
2022-10-20 13:30 ` Juri Lelli
2022-10-20 16:14 ` Valentin Schneider
2022-10-21 2:22 ` Connor O'Brien
2022-10-03 21:45 ` [RFC PATCH 10/11] torture: support randomized shuffling for proxy exec testing Connor O'Brien
2022-11-12 16:54 ` Joel Fernandes
2022-11-14 20:44 ` Connor O'Brien
2022-11-15 16:02 ` Joel Fernandes
2022-10-03 21:45 ` [RFC PATCH 11/11] locktorture: support nested mutexes Connor O'Brien
2022-10-06 9:59 ` [RFC PATCH 00/11] Reviving the Proxy Execution Series Juri Lelli
2022-10-06 10:07 ` Peter Zijlstra
2022-10-06 12:14 ` Juri Lelli
2022-10-15 15:44 ` Peter Zijlstra
2022-10-17 2:23 ` Joel Fernandes
2022-10-19 11:43 ` Qais Yousef
2022-10-19 12:23 ` Joel Fernandes
2022-10-19 13:41 ` Juri Lelli
2022-10-19 13:51 ` Joel Fernandes
2022-10-19 19:30 ` Qais Yousef
2022-10-20 8:51 ` Joel Fernandes
2022-10-17 3:25 ` Chengming Zhou
2022-10-17 3:56 ` Joel Fernandes
2022-10-17 4:26 ` Chengming Zhou [this message]
2022-10-17 12:27 ` Joel Fernandes
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=5ea4949e-3e8b-2ec0-bdcf-93e5744caee1@bytedance.com \
--to=zhouchengming@bytedance.com \
--cc=boqun.feng@gmail.com \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=connoro@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=joel@joelfernandes.org \
--cc=joelaf@google.com \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=qais.yousef@arm.com \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.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
Powered by JetHome