Re: [PATCH v5 11/11] block: mq-deadline: Fix handling of at-head zoned writes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/17/23 16:47, Hannes Reinecke wrote:
> On 5/17/23 00:33, Bart Van Assche wrote:
>> Before dispatching a zoned write from the FIFO list, check whether there
>> are any zoned writes in the RB-tree with a lower LBA for the same zone.
>> This patch ensures that zoned writes happen in order even if at_head is
>> set for some writes for a zone and not for others.
>>
>> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
>> Cc: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>
>> Cc: Ming Lei <ming.lei@xxxxxxxxxx>
>> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
>> ---
>>   block/mq-deadline.c | 9 +++++++--
>>   1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/block/mq-deadline.c b/block/mq-deadline.c
>> index 059727fa4b98..67989f8d29a5 100644
>> --- a/block/mq-deadline.c
>> +++ b/block/mq-deadline.c
>> @@ -346,7 +346,7 @@ static struct request *
>>   deadline_fifo_request(struct deadline_data *dd, struct dd_per_prio *per_prio,
>>   		      enum dd_data_dir data_dir)
>>   {
>> -	struct request *rq;
>> +	struct request *rq, *rb_rq, *next;
>>   	unsigned long flags;
>>   
>>   	if (list_empty(&per_prio->fifo_list[data_dir]))
>> @@ -364,7 +364,12 @@ deadline_fifo_request(struct deadline_data *dd, struct dd_per_prio *per_prio,
>>   	 * zones and these zones are unlocked.
>>   	 */
>>   	spin_lock_irqsave(&dd->zone_lock, flags);
>> -	list_for_each_entry(rq, &per_prio->fifo_list[DD_WRITE], queuelist) {
>> +	list_for_each_entry_safe(rq, next, &per_prio->fifo_list[DD_WRITE],
>> +				 queuelist) {
>> +		/* Check whether a prior request exists for the same zone. */
>> +		rb_rq = deadline_from_pos(per_prio, data_dir, blk_rq_pos(rq));
>> +		if (rb_rq && blk_rq_pos(rb_rq) < blk_rq_pos(rq))
>> +			rq = rb_rq;
>>   		if (blk_req_can_dispatch_to_zone(rq) &&
>>   		    (blk_queue_nonrot(rq->q) ||
>>   		     !deadline_is_seq_write(dd, rq)))
> 
> Similar concern here; we'll have to traverse the entire tree here.
> But if that's of no concern...

Should be fine for HDDs. Not so sure about much faster UFS devices.
And for NVMe ZNS, using a scheduler in itself already halve the max perf you can
get...

> 
> Cheers,
> 
> Hannes

-- 
Damien Le Moal
Western Digital Research




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux