All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Kanchan Joshi <joshi.k@samsung.com>
Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	linux-nvme@lists.infradead.org, linux-fsdevel@vger.kernel.org,
	linux-ext4@vger.kernel.org, axboe@fb.com, prakash.v@samsung.com,
	anshul@samsung.com, joshiiitr@gmail.com
Subject: Re: [PATCH v3 3/7] block: add write-hint to stream-id conversion
Date: Mon, 1 Apr 2019 16:08:21 +1100	[thread overview]
Message-ID: <20190401050821.GQ23020@dastard> (raw)
In-Reply-To: <1553846032-4451-4-git-send-email-joshi.k@samsung.com>

On Fri, Mar 29, 2019 at 01:23:48PM +0530, Kanchan Joshi wrote:
> Earlier this conversion was done by driver (nvme). Current conversion
> is of the form "streamid = write-hint - 1", for both user and kernel
> streams (note that existing infra takes care that user-streams do not
> bump into kernel ones).

Unless we add new user streams, then all the kernel streams change
ID. I'll deal with this in more detail in a later patch.

> Conversion takes stream limit (maintained in
> request queue) into account. Write-hints beyond the queue-limit turn
> to 0.
> New field 'streamid' has been added in request. While 'write-hint' field
> continues to exist. It keeps original value passed from upper layer, and
> used during merging checks.
> 
> Signed-off-by: Kanchan Joshi <joshi.k@samsung.com>
> ---
>  block/blk-core.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 3c5f61c..c86daed 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -727,6 +727,25 @@ bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio,
>  	return false;
>  }
>  
> +enum rw_hint blk_write_hint_to_streamid(struct request *req,
> +				        struct bio *bio)
> +{
> +	enum rw_hint streamid, nr_streams;
> +	struct request_queue *q = req->q;
> +	nr_streams = q->limits.nr_streams;
> +
> +	streamid = bio->bi_write_hint;
> +	if (!nr_streams || streamid == WRITE_LIFE_NOT_SET ||
> +	    streamid == WRITE_LIFE_NONE)
> +		streamid = 0;
> +	else {
> +		--streamid;

What's this magic thing do?

> +		if(streamid > nr_streams)
> +			streamid = 0;

So, basically, we'll compress all the kernel hints down to "no hint"
if there are more user streams than the device supports?

Surely we should be reserving a stream for the kernel hints separate
from the user and "none" streams when we have limited device streams
available...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

WARNING: multiple messages have this Message-ID (diff)
From: david@fromorbit.com (Dave Chinner)
Subject: [PATCH v3 3/7] block: add write-hint to stream-id conversion
Date: Mon, 1 Apr 2019 16:08:21 +1100	[thread overview]
Message-ID: <20190401050821.GQ23020@dastard> (raw)
In-Reply-To: <1553846032-4451-4-git-send-email-joshi.k@samsung.com>

On Fri, Mar 29, 2019@01:23:48PM +0530, Kanchan Joshi wrote:
> Earlier this conversion was done by driver (nvme). Current conversion
> is of the form "streamid = write-hint - 1", for both user and kernel
> streams (note that existing infra takes care that user-streams do not
> bump into kernel ones).

Unless we add new user streams, then all the kernel streams change
ID. I'll deal with this in more detail in a later patch.

> Conversion takes stream limit (maintained in
> request queue) into account. Write-hints beyond the queue-limit turn
> to 0.
> New field 'streamid' has been added in request. While 'write-hint' field
> continues to exist. It keeps original value passed from upper layer, and
> used during merging checks.
> 
> Signed-off-by: Kanchan Joshi <joshi.k at samsung.com>
> ---
>  block/blk-core.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 3c5f61c..c86daed 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -727,6 +727,25 @@ bool blk_attempt_plug_merge(struct request_queue *q, struct bio *bio,
>  	return false;
>  }
>  
> +enum rw_hint blk_write_hint_to_streamid(struct request *req,
> +				        struct bio *bio)
> +{
> +	enum rw_hint streamid, nr_streams;
> +	struct request_queue *q = req->q;
> +	nr_streams = q->limits.nr_streams;
> +
> +	streamid = bio->bi_write_hint;
> +	if (!nr_streams || streamid == WRITE_LIFE_NOT_SET ||
> +	    streamid == WRITE_LIFE_NONE)
> +		streamid = 0;
> +	else {
> +		--streamid;

What's this magic thing do?

> +		if(streamid > nr_streams)
> +			streamid = 0;

So, basically, we'll compress all the kernel hints down to "no hint"
if there are more user streams than the device supports?

Surely we should be reserving a stream for the kernel hints separate
from the user and "none" streams when we have limited device streams
available...

Cheers,

Dave.
-- 
Dave Chinner
david at fromorbit.com

  reply	other threads:[~2019-04-01  5:08 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20190329075737epcas1p4f32cad26279c1146982a6c91b3378eab@epcas1p4.samsung.com>
2019-03-29  7:53 ` [PATCH v3 0/7] Extend write-hint for in-kernel use Kanchan Joshi
2019-03-29  7:53   ` Kanchan Joshi
2019-03-29  7:53   ` [PATCH v3 1/7] block: extend stream count " Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-03-30 17:48     ` Andreas Dilger
2019-03-30 17:48       ` Andreas Dilger
2019-04-01  5:02     ` Dave Chinner
2019-04-01  5:02       ` Dave Chinner
2019-03-29  7:53   ` [PATCH v3 2/7] block: introduce API to register stream information with block layer Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-03-29  7:53   ` [PATCH v3 3/7] block: add write-hint to stream-id conversion Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-04-01  5:08     ` Dave Chinner [this message]
2019-04-01  5:08       ` Dave Chinner
2019-04-02  9:20       ` Jan Kara
2019-04-02  9:20         ` Jan Kara
2019-04-02 20:35         ` Dave Chinner
2019-04-02 20:35           ` Dave Chinner
2019-04-03  9:36           ` Jan Kara
2019-04-03  9:36             ` Jan Kara
2019-04-03 14:47             ` kanchan
2019-04-03 14:47               ` kanchan
2019-03-29  7:53   ` [PATCH v3 4/7] nvme: register stream info with block layer Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-03-29 16:58     ` Heitke, Kenneth
2019-03-29 16:58       ` Heitke, Kenneth
2019-03-29  7:53   ` [PATCH v3 5/7] fs: introduce APIs to enable sending write-hint with buffer-head Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-03-29  7:53   ` [PATCH v3 6/7] fs: introduce write-hint start point for in-kernel hints Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-04-01  5:12     ` Dave Chinner
2019-04-01  5:12       ` Dave Chinner
2019-04-03 14:30       ` kanchan
2019-04-03 14:30         ` kanchan
2019-03-29  7:53   ` [PATCH v3 7/7] fs/ext4,jbd2: add support for passing write-hint with journal Kanchan Joshi
2019-03-29  7:53     ` Kanchan Joshi
2019-03-30 17:49     ` Andreas Dilger
2019-03-30 17:49       ` Andreas Dilger
2019-04-02  9:07       ` Jan Kara
2019-04-02  9:07         ` Jan Kara
2019-04-03  2:57     ` Martin K. Petersen
2019-04-03  2:57       ` [PATCH v3 7/7] fs/ext4, jbd2: " Martin K. Petersen
2019-04-03 13:42       ` [PATCH v3 7/7] fs/ext4,jbd2: " kanchan
2019-04-03 13:42         ` kanchan

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=20190401050821.GQ23020@dastard \
    --to=david@fromorbit.com \
    --cc=anshul@samsung.com \
    --cc=axboe@fb.com \
    --cc=joshi.k@samsung.com \
    --cc=joshiiitr@gmail.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=prakash.v@samsung.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.