Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

block, bfq: forbid stable merging of queues associated with different actuators

If queues associated with different actuators are merged, then control
is lost on each actuator. Therefore some actuator may be
underutilized, and throughput may decrease. This problem cannot occur
with basic queue merging, because the latter is triggered by spatial
locality, and sectors for different actuators are not close to each
other. Yet it may happen with stable merging. To address this issue,
this commit prevents stable merging from occurring among queues
associated with different actuators.

Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Link: https://lore.kernel.org/r/20230103145503.71712-3-paolo.valente@linaro.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Paolo Valente and committed by
Jens Axboe
b7529898 9778369a

+9 -4
+9 -4
block/bfq-iosched.c
··· 5647 5647 * it has been set already, but too long ago, then move it 5648 5648 * forward to bfqq. Finally, move also if bfqq belongs to a 5649 5649 * different group than last_bfqq_created, or if bfqq has a 5650 - * different ioprio or ioprio_class. If none of these 5651 - * conditions holds true, then try an early stable merge or 5652 - * schedule a delayed stable merge. 5650 + * different ioprio, ioprio_class or actuator_idx. If none of 5651 + * these conditions holds true, then try an early stable merge 5652 + * or schedule a delayed stable merge. As for the condition on 5653 + * actuator_idx, the reason is that, if queues associated with 5654 + * different actuators are merged, then control is lost on 5655 + * each actuator. Therefore some actuator may be 5656 + * underutilized, and throughput may decrease. 5653 5657 * 5654 5658 * A delayed merge is scheduled (instead of performing an 5655 5659 * early merge), in case bfqq might soon prove to be more ··· 5671 5667 bfqq->creation_time) || 5672 5668 bfqq->entity.parent != last_bfqq_created->entity.parent || 5673 5669 bfqq->ioprio != last_bfqq_created->ioprio || 5674 - bfqq->ioprio_class != last_bfqq_created->ioprio_class) 5670 + bfqq->ioprio_class != last_bfqq_created->ioprio_class || 5671 + bfqq->actuator_idx != last_bfqq_created->actuator_idx) 5675 5672 *source_bfqq = bfqq; 5676 5673 else if (time_after_eq(last_bfqq_created->creation_time + 5677 5674 bfqd->bfq_burst_interval,