Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932447AbbFIVyj (ORCPT ); Tue, 9 Jun 2015 17:54:39 -0400 Received: from mail-ie0-f182.google.com ([209.85.223.182]:36683 "EHLO mail-ie0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753866AbbFIVyb (ORCPT ); Tue, 9 Jun 2015 17:54:31 -0400 MIME-Version: 1.0 In-Reply-To: <55772585.30707@kernel.dk> References: <1432068921-17184-1-git-send-email-tahsin@google.com> <873821kww7.fsf@orebokech.com> <55772585.30707@kernel.dk> Date: Tue, 9 Jun 2015 14:54:30 -0700 Message-ID: Subject: Re: [PATCH] block: Make CFQ default to IOPS mode on SSDs From: Tahsin Erdogan To: Jens Axboe Cc: Romain Francoise , linux-kernel@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2112 Lines: 56 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 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/