Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752194AbeAEQYT (ORCPT + 1 other); Fri, 5 Jan 2018 11:24:19 -0500 Received: from mail-it0-f47.google.com ([209.85.214.47]:35401 "EHLO mail-it0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751870AbeAEQYR (ORCPT ); Fri, 5 Jan 2018 11:24:17 -0500 X-Google-Smtp-Source: ACJfBovO4v8qho6D8nxvGMHuFGsUgKh5TldwKvrowLc3sY/XKI0hzB1ltjGgnkYUJv9ZHqO9XmC7+w== Subject: Re: [PATCH IMPROVEMENT] block, bfq: increase threshold to deem I/O as random To: Paolo Valente Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, ulf.hansson@linaro.org, broonie@kernel.org, linus.walleij@linaro.org, angeloruocco90@gmail.com, bfq-iosched@googlegroups.com References: <20171220162736.5067-1-paolo.valente@linaro.org> From: Jens Axboe Message-ID: Date: Fri, 5 Jan 2018 09:24:15 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Thunderbird/57.0 MIME-Version: 1.0 In-Reply-To: <20171220162736.5067-1-paolo.valente@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On 12/20/17 9:27 AM, Paolo Valente wrote: > If two processes do I/O close to each other, i.e., are cooperating > processes in BFQ (and CFQ'S) nomenclature, then BFQ merges their > associated bfq_queues, so as to get sequential I/O from the union of > the I/O requests of the processes, and thus reach a higher > throughput. A merged queue is then split if its I/O stops being > sequential. In this respect, BFQ deems the I/O of a bfq_queue as > (mostly) sequential only if less than 4 I/O requests are random, out > of the last 32 requests inserted into the queue. > > Unfortunately, extensive testing (with the interleaved_io benchmark of > the S suite [1], and with real applications spawning cooperating > processes) has clearly shown that, with such a low threshold, only a > rather low I/O throughput may be reached when several cooperating > processes do I/O. In particular, the outcome of each test run was > bimodal: if queue merging occurred and was stable during the test, > then the throughput was close to the peak rate of the storage device, > otherwise the throughput was arbitrarily low (usually around 1/10 of > the peak rate with a rotational device). The probability to get the > unlucky outcomes grew with the number of cooperating processes: it was > already significant with 5 processes, and close to one with 7 or more > processes. > > The cause of the low throughput in the unlucky runs was that the > merged queues containing the I/O of these cooperating processes were > soon split, because they contained more random I/O requests than those > tolerated by the 4/32 threshold, but > - that I/O would have however allowed the storage device to reach > peak throughput or almost peak throughput; > - in contrast, the I/O of these processes, if served individually > (from separate queues) yielded a rather low throughput. > > So we repeated our tests with increasing values of the threshold, > until we found the minimum value (19) for which we obtained maximum > throughput, reliably, with at least up to 9 cooperating > processes. Then we checked that the use of that higher threshold value > did not cause any regression for any other benchmark in the suite [1]. > This commit raises the threshold to such a higher value. Applied for 4.16, thanks. -- Jens Axboe