From: tada keisuke <keisuke1.tada@kioxia.com>
To: "song@kernel.org" <song@kernel.org>,
"yukuai3@huawei.com" <yukuai3@huawei.com>
Cc: "linux-raid@vger.kernel.org" <linux-raid@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH 00/11] md: avoid counter operation conflicts
Date: Tue, 26 Mar 2024 10:29:16 +0000 [thread overview]
Message-ID: <a022f547c43e40e2b9f0aebb2bd0bfa8@kioxia.com> (raw)
Currently, active_aligned_reads and nr_pending used as counters are atomic types.
Therefore, when inc/dec in a multi-core results in conflicts.
To solve this problem, use "percpu_ref" counters that can avoid conflicts and maintain consistency.
Switch modes of percpu_ref to achieve both consistency and conflict avoidance.
During normal operations such as inc/dec, it operates as percpu mode.
When consistency is required, it operates as atomic mode.
The operations that require consistency are as follows:
・Zero check for the counter
・All operations in RAID 1/10
Patches 1, 3, 6 change active_aligned_reads, and patches 2, 4, 5, 7 to 11 change nr_pending.
nr_pending temporarily switch from percpu mode to atomic mode in patch 7.
This is to reduce the amount of changes from patches 8 to 10.
Finally, nr_pending switch from atomic mode to percpu mode in patch 11.
Keisuke TADA (11):
add infra for active_aligned_reads changes
add infra for nr_pending changes
workaround for inconsistency of config state in takeover
minimize execution of zero check for nr_pending
match the type of variables to percpu_ref
avoid conflicts in active_aligned_reads operations
change the type of nr_pending from atomic_t to percpu_ref
add atomic mode switching in RAID 1/10
add atomic mode switching when removing disk
add atomic mode switching when I/O completion
avoid conflicts in nr_pending operations
drivers/md/md-bitmap.c | 2 +-
drivers/md/md.c | 40 +++++++++++++++---
drivers/md/md.h | 62 ++++++++++++++++++++++++----
drivers/md/raid1.c | 37 +++++++++++------
drivers/md/raid10.c | 60 ++++++++++++++++-----------
drivers/md/raid5-cache.c | 4 +-
drivers/md/raid5.c | 89 +++++++++++++++++++++++++++-------------
drivers/md/raid5.h | 17 +++++++-
8 files changed, 230 insertions(+), 81 deletions(-)
base-commit: fcf3f7e2fc8a53a6140beee46ec782a4c88e4744
--
2.34.1
next reply other threads:[~2024-03-26 11:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-26 10:29 tada keisuke [this message]
2024-03-26 14:01 ` [PATCH 00/11] md: avoid counter operation conflicts Yu Kuai
2024-03-27 1:27 ` tada keisuke
2024-04-10 21:13 ` Song Liu
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=a022f547c43e40e2b9f0aebb2bd0bfa8@kioxia.com \
--to=keisuke1.tada@kioxia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=song@kernel.org \
--cc=yukuai3@huawei.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.