Messages in this thread | | | Date | Tue, 9 Jun 2015 14:54:30 -0700 | Subject | Re: [PATCH] block: Make CFQ default to IOPS mode on SSDs | From | Tahsin Erdogan <> |
| |
Thanks for catching this.
In my testing, I was switching to cfq through sysfs. Since disk initialization happens earlier than manual switching, I didn't hit this problem.
On Tue, Jun 9, 2015 at 10:42 AM, Jens Axboe <axboe@kernel.dk> wrote: > On 06/09/2015 04:18 AM, Romain Francoise wrote: >> >> Hi, >> >> On Tue, May 19, 2015 at 01:55:21PM -0700, Tahsin Erdogan wrote: >>> >>> --- a/block/cfq-iosched.c >>> +++ b/block/cfq-iosched.c >>> @@ -4460,7 +4460,7 @@ static int cfq_init_queue(struct request_queue *q, >>> struct elevator_type *e) >>> cfqd->cfq_slice[1] = cfq_slice_sync; >>> cfqd->cfq_target_latency = cfq_target_latency; >>> cfqd->cfq_slice_async_rq = cfq_slice_async_rq; >>> - cfqd->cfq_slice_idle = cfq_slice_idle; >>> + cfqd->cfq_slice_idle = blk_queue_nonrot(q) ? 0 : cfq_slice_idle; >>> cfqd->cfq_group_idle = cfq_group_idle; >>> cfqd->cfq_latency = 1; >>> cfqd->hw_tag = -1; >> >> >> Did you test this patch with regular AHCI SSD devices? Applying it on >> top of v4.1-rc7 makes no difference, slice_idle is still initialized to >> 8 in my setup, while rotational is 0. >> >> Isn't the elevator initialized long before the non-rotational flag is >> actually set on the device (which probably happens after it's probed on >> the scsi bus)? > > > You are absolutely correct. What happens is that the queue is allocated and > initialized, and cfq checks the flag. But the flag is set later in the > process, when we have finished probing the device checked if it's rotational > or not. > > There are a few options to handle this. The attached might work, not tested > at all. Basically it adds an io sched registration hook, that is called when > we are adding the disk on the queue. Non-rotational detection should be done > at that point. > > Does that work for you? > > -- > Jens Axboe >
| |