From: NeilBrown <neilb@suse.de>
To: Shaohua Li <shli@kernel.org>
Cc: linux-raid@vger.kernel.org, tj@kernel.org, dan.j.williams@gmail.com
Subject: Re: [patch v3 5/5] raid5: only wakeup necessary threads
Date: Wed, 28 Aug 2013 14:13:04 +1000 [thread overview]
Message-ID: <20130828141304.5e6df26e@notabene.brown> (raw)
In-Reply-To: <20130827095518.881234515@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 2201 bytes --]
On Tue, 27 Aug 2013 17:50:43 +0800 Shaohua Li <shli@kernel.org> wrote:
> @@ -229,8 +233,26 @@ static void raid5_wakeup_stripe_thread(s
>
> group = conf->worker_groups + cpu_to_group(sh->cpu);
>
> - for (i = 0; i < conf->worker_cnt_per_group; i++)
> - queue_work_on(sh->cpu, raid5_wq, &group->workers[i].work);
> + group->workers[0].working = true;
> + /* at least one worker should run to avoid race */
> + queue_work_on(sh->cpu, raid5_wq, &group->workers[0].work);
> +
> + thread_cnt = group->stripes_cnt / MAX_STRIPE_BATCH - 1;
> + /* wakeup more workers */
> + for (i = 1; i < conf->worker_cnt_per_group && thread_cnt > 0; i++) {
> + if (group->workers[i].working == false) {
> + group->workers[i].working = true;
> + queue_work_on(sh->cpu, raid5_wq,
> + &group->workers[i].work);
> + thread_cnt--;
> + } else if (group->workers[i].working_cnt <=
> + MAX_STRIPE_BATCH / 2)
> + /*
> + * If a worker has no enough stripes handling, assume
> + * it will fetch more stripes soon.
> + */
> + thread_cnt--;
> + }
> }
I don't really understand this "working_cnt <= MAX_STRIPE_BATCH / 2"
heuristic. It is at best a very coarse estimate of how long until the worker
will get some more stripes to work on.
I think I would simply not count any thread that is already working (except
the first, which is always counted whether it is working or not)
Do you see some particular gain from the counting?
> -#define MAX_STRIPE_BATCH 8
> -static int handle_active_stripes(struct r5conf *conf, int group)
> +static int handle_active_stripes(struct r5conf *conf, int group,
> + struct r5worker *worker)
> {
> struct stripe_head *batch[MAX_STRIPE_BATCH], *sh;
> int i, batch_size = 0;
> @@ -4921,6 +4955,9 @@ static int handle_active_stripes(struct
> (sh = __get_priority_stripe(conf, group)) != NULL)
> batch[batch_size++] = sh;
>
> + if (worker)
> + worker->working_cnt = batch_size;
> +
> if (batch_size == 0)
> return batch_size;
I think this could possibly return with ->working still 'true'.
I think it is safest to clear it on every exit from the function
Thanks,
NeilBrown
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
next prev parent reply other threads:[~2013-08-28 4:13 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-27 9:50 [patch v3 0/5] raid5: make stripe handling multi-threading Shaohua Li
2013-08-27 9:50 ` [patch v3 1/5] raid5: make release_stripe lockless Shaohua Li
2013-08-28 14:04 ` Tejun Heo
2013-08-28 14:29 ` Shaohua Li
2013-08-28 14:30 ` Tejun Heo
2013-08-27 9:50 ` [patch v3 2/5] raid5: fix stripe release order Shaohua Li
2013-08-28 3:41 ` NeilBrown
2013-08-28 6:29 ` Shaohua Li
2013-08-28 6:37 ` NeilBrown
2013-08-27 9:50 ` [patch v3 3/5] raid5: offload stripe handle to workqueue Shaohua Li
2013-08-28 3:53 ` NeilBrown
2013-08-28 6:30 ` Shaohua Li
2013-08-28 6:56 ` NeilBrown
2013-08-27 9:50 ` [patch v3 4/5] raid5: sysfs entry to control worker thread number Shaohua Li
2013-08-27 9:50 ` [patch v3 5/5] raid5: only wakeup necessary threads Shaohua Li
2013-08-28 4:13 ` NeilBrown [this message]
2013-08-28 6:31 ` Shaohua Li
2013-08-28 6:59 ` NeilBrown
2013-08-29 7:40 ` Shaohua Li
2013-09-02 0:45 ` NeilBrown
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=20130828141304.5e6df26e@notabene.brown \
--to=neilb@suse.de \
--cc=dan.j.williams@gmail.com \
--cc=linux-raid@vger.kernel.org \
--cc=shli@kernel.org \
--cc=tj@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;
as well as URLs for NNTP newsgroup(s).