linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: Kanchan Joshi <joshi.k@samsung.com>, Jens Axboe <axboe@kernel.dk>
Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-fsdevel@vger.kernel.org,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	Christoph Hellwig <hch@lst.de>,
	Niklas Cassel <Niklas.Cassel@wdc.com>,
	Avri Altman <Avri.Altman@wdc.com>, Bean Huo <huobean@gmail.com>,
	Daejun Park <daejun7.park@samsung.com>,
	Damien Le Moal <dlemoal@kernel.org>
Subject: Re: [PATCH v2 01/15] block: Make bio_set_ioprio() modify fewer bio->bi_ioprio bits
Date: Thu, 12 Oct 2023 10:42:07 -0700	[thread overview]
Message-ID: <a490bc37-464e-4edc-b11a-91b11d24af6d@acm.org> (raw)
In-Reply-To: <fdf765a0-54a0-a9e9-fffa-3e733c2535b0@samsung.com>

On 10/12/23 01:49, Kanchan Joshi wrote:
> Function does OR bio->bi_ioprio with whatever is the return of
> get_current_ioprio().

No, that's not what ioprio_set_class_and_level() does. It clears the 
hint bits before it performs a logical OR.

> So if lifetime bits were set in get_current_ioprio(), you will end up
> setting that in bio->bi_ioprio too.
I'm not sure there are any use cases where it is useful to set the data
lifetime for an entire process.

Anyway, how about replacing this patch with the patch below? This will
allow to set hint information for an entire process.

diff --git a/block/blk-mq.c b/block/blk-mq.c
index e2d11183f62e..3419ca4c1bf4 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2924,9 +2924,14 @@ static inline struct request 
*blk_mq_get_cached_request(struct request_queue *q,

  static void bio_set_ioprio(struct bio *bio)
  {
+	u16 cur_ioprio = get_current_ioprio();
+
  	/* Nobody set ioprio so far? Initialize it based on task's nice value */
  	if (IOPRIO_PRIO_CLASS(bio->bi_ioprio) == IOPRIO_CLASS_NONE)
-		bio->bi_ioprio = get_current_ioprio();
+		bio->bi_ioprio |= cur_ioprio & IOPRIO_CLASS_LEVEL_MASK;
+	if (IOPRIO_PRIO_HINT(bio->bi_ioprio) == 0)
+		bio->bi_ioprio |= cur_ioprio &
+			(IOPRIO_HINT_MASK << IOPRIO_HINT_SHIFT);
  	blkcg_set_ioprio(bio);
  }

diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h
index 7578d4f6a969..5697832f35a3 100644
--- a/include/linux/ioprio.h
+++ b/include/linux/ioprio.h
@@ -71,4 +71,7 @@ static inline int ioprio_check_cap(int ioprio)
  }
  #endif /* CONFIG_BLOCK */

+#define IOPRIO_CLASS_LEVEL_MASK ((IOPRIO_CLASS_MASK << 
IOPRIO_CLASS_SHIFT) | \
+				 (IOPRIO_LEVEL_MASK << 0))
+
  #endif


>> ioprio_set_class_and_level() preserves the hint bits set by F2FS.
>>
>>> And what is the user interface you have in mind. Is it ioprio based, or
>>> write-hint based or mix of both?
>>
>> Since the data lifetime is encoded in the hint bits, the hint bits need
>> to be set by user space to set a data lifetime.
> 
> I asked because more than one way seems to emerge here. Parts of this
> series (Patch 4) are taking inode->i_write_hint (and not ioprio value)
> and putting that into bio.
> I wonder what to expect if application get to send one lifetime with
> fcntl (write-hints) and different one with ioprio. Is that not racy?

There is no race condition. F_SET_RW_HINT can be used to set 
inode->i_write_hint. The filesystem may use the inode->i_write_hint 
information. I think F2FS uses this information in its block allocator.

>> +            --prio=$((i<<6))
> 
> This will not work as prio can only take values between 0-7.
> Perhaps you want to use "priohint" to send lifetime.

Thanks for having mentioned the priohint option. The above works on my
test setup since I modified fio locally to accept larger prio values. I
will switch to the priohint option.

Bart.

  parent reply	other threads:[~2023-10-12 17:42 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05 19:40 [PATCH v2 00/15] Pass data temperature information to UFS devices Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 01/15] block: Make bio_set_ioprio() modify fewer bio->bi_ioprio bits Bart Van Assche
2023-10-06  6:28   ` Kanchan Joshi
2023-10-06 18:20     ` Bart Van Assche
2023-10-10  5:22   ` Kanchan Joshi
2023-10-11 16:52     ` Bart Van Assche
2023-10-12  8:49       ` Kanchan Joshi
2023-10-12 14:03         ` Niklas Cassel
2023-10-12 17:42         ` Bart Van Assche [this message]
2023-10-05 19:40 ` [PATCH v2 02/15] blk-ioprio: Modify " Bart Van Assche
2023-10-06  6:36   ` Kanchan Joshi
2023-10-06 18:25     ` Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 03/15] block: Support data lifetime in the I/O priority bitfield Bart Van Assche
2023-10-06  6:42   ` Kanchan Joshi
2023-10-06  8:19   ` Damien Le Moal
2023-10-06  9:53     ` Niklas Cassel
2023-10-06 18:07     ` Bart Van Assche
2023-10-11 20:51       ` Bart Van Assche
2023-10-12  1:02         ` Damien Le Moal
2023-10-12 18:00           ` Bart Van Assche
2023-10-13  1:08             ` Damien Le Moal
2023-10-13  9:33               ` Niklas Cassel
2023-10-13 21:20                 ` Bart Van Assche
2023-10-16  9:20                   ` Niklas Cassel
2023-10-16 16:36                     ` Bart Van Assche
2023-10-13 20:18               ` Bart Van Assche
2023-10-15 22:22                 ` Damien Le Moal
2023-10-16 16:31                   ` Bart Van Assche
2023-10-16  6:17     ` Christoph Hellwig
2023-10-16 16:32       ` Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 04/15] fs: Restore write hint support Bart Van Assche
2023-10-10  5:42   ` Kanchan Joshi
2023-10-11 16:56     ` Bart Van Assche
2023-10-16  6:20   ` Christoph Hellwig
2023-10-05 19:40 ` [PATCH v2 05/15] fs/f2fs: Restore the whint_mode mount option Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 06/15] scsi: core: Query the Block Limits Extension VPD page Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 07/15] scsi_proto: Add structures and constants related to I/O groups and streams Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 08/15] sd: Translate data lifetime information Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 09/15] scsi_debug: Reduce code duplication Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 10/15] scsi_debug: Support the block limits extension VPD page Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 11/15] scsi_debug: Rework page code error handling Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 12/15] scsi_debug: Rework subpage " Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 13/15] scsi_debug: Implement the IO Advice Hints Grouping mode page Bart Van Assche
2023-10-05 19:41 ` [PATCH v2 14/15] scsi_debug: Implement GET STREAM STATUS Bart Van Assche
2023-10-05 19:41 ` [PATCH v2 15/15] scsi_debug: Maintain write statistics per group number Bart Van Assche

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=a490bc37-464e-4edc-b11a-91b11d24af6d@acm.org \
    --to=bvanassche@acm.org \
    --cc=Avri.Altman@wdc.com \
    --cc=Niklas.Cassel@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=daejun7.park@samsung.com \
    --cc=dlemoal@kernel.org \
    --cc=hch@lst.de \
    --cc=huobean@gmail.com \
    --cc=joshi.k@samsung.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.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 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).