From: Hannes Reinecke <hare@suse.de>
To: Guoju Fang <fangguoju@gmail.com>, colyli@suse.de
Cc: linux-bcache@vger.kernel.org, linux-block@vger.kernel.org
Subject: Re: [PATCH] bcache: add a new sysfs interface to disable refill when read miss
Date: Tue, 14 Jul 2020 07:57:06 +0200 [thread overview]
Message-ID: <141fbeaf-8fb6-43fb-56ed-5f8a5a019cc7@suse.de> (raw)
In-Reply-To: <1594610902-4428-1-git-send-email-fangguoju@gmail.com>
On 7/13/20 5:28 AM, Guoju Fang wrote:
> When read cache miss, backing device will be read first, and then refill
> the cache device. But under some scenarios there are large number of new
> reads and rarely hit, so it's necessary to disable the refill when read
> miss to save space for writes.
>
> This patch add a new config called refill_on_miss_disabled which is not set
> by default. Bcache user can set it by sysfs interface and then the bcache
> device will not refill when read cache miss.
>
> Signed-off-by: Guoju Fang <fangguoju@gmail.com>
> ---
> drivers/md/bcache/bcache.h | 1 +
> drivers/md/bcache/request.c | 2 ++
> drivers/md/bcache/super.c | 1 +
> drivers/md/bcache/sysfs.c | 5 +++++
> 4 files changed, 9 insertions(+)
>
> diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
> index 221e0191b687..3a19ee6de3a7 100644
> --- a/drivers/md/bcache/bcache.h
> +++ b/drivers/md/bcache/bcache.h
> @@ -730,6 +730,7 @@ struct cache_set {
> unsigned int shrinker_disabled:1;
> unsigned int copy_gc_enabled:1;
> unsigned int idle_max_writeback_rate_enabled:1;
> + unsigned int refill_on_miss_disabled:1;
>
> #define BUCKET_HASH_BITS 12
> struct hlist_head bucket_hash[1 << BUCKET_HASH_BITS];
> diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
> index 7acf024e99f3..4bfa0e0b4b3f 100644
> --- a/drivers/md/bcache/request.c
> +++ b/drivers/md/bcache/request.c
> @@ -378,6 +378,8 @@ static bool check_should_bypass(struct cached_dev *dc, struct bio *bio)
> op_is_write(bio_op(bio))))
> goto skip;
>
> + if (c->refill_on_miss_disabled && !op_is_write(bio_op(bio)))
> + goto skip;
> /*
> * If the bio is for read-ahead or background IO, bypass it or
> * not depends on the following situations,
> diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
> index 2014016f9a60..c1e9bfec1267 100644
> --- a/drivers/md/bcache/super.c
> +++ b/drivers/md/bcache/super.c
> @@ -1862,6 +1862,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
> c->congested_write_threshold_us = 20000;
> c->error_limit = DEFAULT_IO_ERROR_LIMIT;
> c->idle_max_writeback_rate_enabled = 1;
> + c->refill_on_miss_disabled = 0;
> WARN_ON(test_and_clear_bit(CACHE_SET_IO_DISABLE, &c->flags));
>
> return c;
> diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
> index 0dadec5a78f6..178300f401bb 100644
> --- a/drivers/md/bcache/sysfs.c
> +++ b/drivers/md/bcache/sysfs.c
> @@ -144,6 +144,7 @@ rw_attribute(copy_gc_enabled);
> rw_attribute(idle_max_writeback_rate);
> rw_attribute(gc_after_writeback);
> rw_attribute(size);
> +rw_attribute(refill_on_miss_disabled);
>
> static ssize_t bch_snprint_string_list(char *buf,
> size_t size,
> @@ -779,6 +780,8 @@ SHOW(__bch_cache_set)
> if (attr == &sysfs_bset_tree_stats)
> return bch_bset_print_stats(c, buf);
>
> + sysfs_printf(refill_on_miss_disabled, "%i", c->refill_on_miss_disabled);
> +
> return 0;
> }
> SHOW_LOCKED(bch_cache_set)
> @@ -898,6 +901,7 @@ STORE(__bch_cache_set)
> * set in next chance.
> */
> sysfs_strtoul_clamp(gc_after_writeback, c->gc_after_writeback, 0, 1);
> + sysfs_strtoul(refill_on_miss_disabled, c->refill_on_miss_disabled);
>
> return size;
> }
> @@ -948,6 +952,7 @@ static struct attribute *bch_cache_set_files[] = {
> &sysfs_congested_read_threshold_us,
> &sysfs_congested_write_threshold_us,
> &sysfs_clear_stats,
> + &sysfs_refill_on_miss_disabled,
> NULL
> };
> KTYPE(bch_cache_set);
>
Please don't call the attribute refill_on_miss_disabled.
This kind of double-negation will always lead to issues; please invert
the meaning and call it 'refill_on_miss'.
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
next prev parent reply other threads:[~2020-07-14 5:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-13 3:28 [PATCH] bcache: add a new sysfs interface to disable refill when read miss Guoju Fang
2020-07-14 5:57 ` Hannes Reinecke [this message]
2020-07-14 6:20 ` Coly Li
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=141fbeaf-8fb6-43fb-56ed-5f8a5a019cc7@suse.de \
--to=hare@suse.de \
--cc=colyli@suse.de \
--cc=fangguoju@gmail.com \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-block@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;
as well as URLs for NNTP newsgroup(s).