From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Boqun Feng <boqun.feng@gmail.com>,
linux-kernel@vger.kernel.org, rcu@vger.kernel.org,
Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Subject: Re: [PATCH v2 0/6] RCU tasks fixes for v6.9
Date: Mon, 26 Feb 2024 14:56:06 +0100 [thread overview]
Message-ID: <ZdyYdhZtNuJp3h-a@localhost.localdomain> (raw)
In-Reply-To: <8f992601-153e-4cc1-8e7e-6684823cd590@paulmck-laptop>
Le Fri, Feb 23, 2024 at 04:43:04PM -0800, Paul E. McKenney a écrit :
> I do indeed mean doing cond_resched() mid-stream.
>
> One way to make this happen would be to do something like this:
>
> struct task_struct_anchor {
> struct list_head tsa_list;
> struct list_head tsa_adjust_list;
> atomic_t tsa_ref; // Or use an appropriate API.
> bool tsa_is_anchor;
> }
>
> Each task structure would contain one of these, though there are a
> number of ways to conserve space if needed.
>
> These anchors would be placed perhaps every 1,000 tasks or so. When a
> traversal encountered one, it could atomic_inc_not_zero() the reference
> count, and if that succeeded, exit the RCU read-side critical section and
> do a cond_resched(). It could then enter a new RCU read-side critical
> section, drop the reference, and continue.
>
> A traveral might container_of() its way from ->tsa_list to the
> task_struct_anchor structure, then if ->tsa_is_anchor is false,
> container_of() its way to the enclosing task structure.
>
> How to maintain proper spacing of the anchors?
>
> One way is to make the traversals do the checking. If the space between a
> pair of anchors was to large or too small, it could add the first of the
> pair to a list to be adjusted. This list could periodically be processed,
> perhaps with more urgency if a huge gap had opened up.
>
> Freeing an anchor requires decrementing the reference count, waiting for
> it to go to zero, removing the anchor, waiting for a grace period (perhaps
> asynchronously), and only then freeing the anchor.
>
> Anchors cannot be moved, only added or removed.
>
> So it is possible. But is it reasonable? ;-)
Wow! And this will need to be done both for process leaders (p->tasks)
and for threads (p->thread_node) :-)
next prev parent reply other threads:[~2024-02-26 13:56 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 1:27 [PATCH v2 0/6] RCU tasks fixes for v6.9 Boqun Feng
2024-02-17 1:27 ` [PATCH v2 1/6] rcu-tasks: Repair RCU Tasks Trace quiescence check Boqun Feng
2024-02-17 1:27 ` [PATCH v2 2/6] rcu-tasks: Add data to eliminate RCU-tasks/do_exit() deadlocks Boqun Feng
2024-02-22 16:54 ` Frederic Weisbecker
2024-02-22 20:46 ` Paul E. McKenney
2024-02-17 1:27 ` [PATCH v2 3/6] rcu-tasks: Initialize " Boqun Feng
2024-02-22 16:21 ` Frederic Weisbecker
2024-02-22 20:41 ` Paul E. McKenney
2024-02-23 11:39 ` Frederic Weisbecker
2024-02-17 1:27 ` [PATCH v2 4/6] rcu-tasks: Maintain lists " Boqun Feng
2024-02-22 16:32 ` Frederic Weisbecker
2024-02-23 12:19 ` Frederic Weisbecker
2024-02-24 0:28 ` Paul E. McKenney
2024-02-17 1:27 ` [PATCH v2 5/6] rcu-tasks: Eliminate deadlocks involving do_exit() and RCU tasks Boqun Feng
2024-02-22 16:46 ` Frederic Weisbecker
2024-02-17 1:27 ` [PATCH v2 6/6] rcu-tasks: Maintain real-time response in rcu_tasks_postscan() Boqun Feng
2024-02-22 17:48 ` Frederic Weisbecker
2024-02-22 20:52 ` Paul E. McKenney
2024-02-22 22:56 ` Paul E. McKenney
2024-02-23 12:17 ` Frederic Weisbecker
2024-02-23 15:14 ` Frederic Weisbecker
2024-02-24 0:23 ` Paul E. McKenney
2024-02-22 16:52 ` [PATCH v2 0/6] RCU tasks fixes for v6.9 Frederic Weisbecker
2024-02-22 22:09 ` Paul E. McKenney
2024-02-23 12:25 ` Frederic Weisbecker
2024-02-24 0:43 ` Paul E. McKenney
2024-02-26 13:56 ` Frederic Weisbecker [this message]
2024-02-26 14:37 ` Paul E. McKenney
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=ZdyYdhZtNuJp3h-a@localhost.localdomain \
--to=frederic@kernel.org \
--cc=Neeraj.Upadhyay@amd.com \
--cc=boqun.feng@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=rcu@vger.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