Re: bfq-mq performance comparison to cfq

Paolo Valente
2017-04-19T07:02:49Z

> Il giorno 19 apr 2017, alle ore 07:01, Bart Van Assche =
<bart.vanassche@sandisk.com> ha scritto:
>=20
> On 04/11/17 00:29, Paolo Valente wrote:
>>=20
>>> Il giorno 10 apr 2017, alle ore 17:15, Bart Van Assche =
<bart.vanassche@sandisk.com> ha scritto:
>>>=20
>>> On Mon, 2017-04-10 at 11:55 +0200, Paolo Valente wrote:
>>>> That said, if you do always want maximum throughput, even at the
>>>> expense of latency, then just switch off low-latency heuristics, =
i.e.,
>>>> set low_latency to 0. Depending on the device, setting slice_ilde =
to
>>>> 0 may help a lot too (as well as with CFQ). If the throughput is
>>>> still low also after forcing BFQ to an only-throughput mode, then =
you
>>>> hit some bug, and I'll have a little more work to do ...
>>>=20
>>> Has it been considered to make applications tell the I/O scheduler
>>> whether to optimize for latency or for throughput? It shouldn't be =
that
>>> hard for window managers and shells to figure out whether or not a =
new
>>> application that is being started is interactive or not. This would
>>> require a mechanism that allows applications to provide such =
information
>>> to the I/O scheduler. Wouldn't that be a better approach than the =
I/O
>>> scheduler trying to guess whether or not an application is an =
interactive
>>> application?
>>=20
>> IMO that would be an (or maybe the) optimal solution, in terms of =
both
>> throughput and latency. We have even developed a prototype doing =
what
>> you propose, for Android. Unfortunately, I have not yet succeeded in
>> getting support, to turn it into candidate production code, or to =
make
>> a similar solution for lsb-compliant systems.
>=20
> Hello Paolo,
>=20
> What API was used by the Android application to tell the I/O scheduler=20=

> to optimize for latency? Do you think that it would be sufficient if =
the=20
> application uses the ioprio_set() system call to set the I/O priority =
to=20
> IOPRIO_CLASS_RT?
>=20

That's exactly the hack we are using in our prototype. However, it
can only be a temporary hack, because it mixes two slightly different
concepts: 1) the activation of weight raising and other mechanisms for
reducing latency for the target app, 2) the assignment of a different
priority class, which (cleanly) means just that processes in a lower
priority class will be served only when the processes of the target
app have no pending I/O request. Finding a clean boosting API would
be one of the main steps to turn our prototype into a usable solution.

Thanks,
Paolo

> Thanks,
>=20
> Bart.