2019-05-18 11:19:30

by Alexey Dobriyan

[permalink] [raw]
Subject: Setting up default iosched in 5.0+

5.0 deleted three io schedulers and more importantly CONFIG_DEFAULT_IOSCHED
option:

commit f382fb0bcef4c37dc049e9f6963e3baf204d815c
block: remove legacy IO schedulers

After figuring out that I silently became "noop" customer enabling just
BFQ didn't work: "noop" is still being selected by default.

There is an "elevator=" command line option but it does nothing.

Are users supposed to add stuff to init scripts now?


2019-05-24 14:49:02

by Jeff Moyer

[permalink] [raw]
Subject: Re: Setting up default iosched in 5.0+

Hi, Alexey,

Alexey Dobriyan <[email protected]> writes:

> 5.0 deleted three io schedulers and more importantly CONFIG_DEFAULT_IOSCHED
> option:
>
> commit f382fb0bcef4c37dc049e9f6963e3baf204d815c
> block: remove legacy IO schedulers
>
> After figuring out that I silently became "noop" customer enabling just
> BFQ didn't work: "noop" is still being selected by default.
>
> There is an "elevator=" command line option but it does nothing.
>
> Are users supposed to add stuff to init scripts now?

A global parameter was never a good idea, because systems often have
different types of storage installed which benefit from different I/O
schedulers. The goal is for the default to just work.

If you feel that the defaults don't work for you, then udev rules are
the way to go.

If you also feel that you really do want to set the default for all
devices, then you can use the following udev rule to emulate the old
elevator= kernel command line parameter:

https://github.com/lnykryn/systemd-rhel/blob/rhel-8.0.0/rules/40-elevator.rules

Cheers,
Jeff

2019-05-24 15:41:10

by Paolo Valente

[permalink] [raw]
Subject: Re: Setting up default iosched in 5.0+



> Il giorno 24 mag 2019, alle ore 16:46, Jeff Moyer <[email protected]> ha scritto:
>
> Hi, Alexey,
>
> Alexey Dobriyan <[email protected]> writes:
>
>> 5.0 deleted three io schedulers and more importantly CONFIG_DEFAULT_IOSCHED
>> option:
>>
>> commit f382fb0bcef4c37dc049e9f6963e3baf204d815c
>> block: remove legacy IO schedulers
>>
>> After figuring out that I silently became "noop" customer enabling just
>> BFQ didn't work: "noop" is still being selected by default.
>>
>> There is an "elevator=" command line option but it does nothing.
>>
>> Are users supposed to add stuff to init scripts now?
>
> A global parameter was never a good idea, because systems often have
> different types of storage installed which benefit from different I/O
> schedulers. The goal is for the default to just work.
>

Just for completeness, the current default is the worst possible
choice on all systems with a speed below 500 KIOPS, which includes
practically all personal systems ;) But this is a different story ...

Thanks,
Paolo

> If you feel that the defaults don't work for you, then udev rules are
> the way to go.
>
> If you also feel that you really do want to set the default for all
> devices, then you can use the following udev rule to emulate the old
> elevator= kernel command line parameter:
>
> https://github.com/lnykryn/systemd-rhel/blob/rhel-8.0.0/rules/40-elevator.rules
>
> Cheers,
> Jeff


Attachments:
signature.asc (849.00 B)
Message signed with OpenPGP

2019-05-24 18:26:59

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: Setting up default iosched in 5.0+

On Fri, May 24, 2019 at 10:46:54AM -0400, Jeff Moyer wrote:
> Hi, Alexey,
>
> Alexey Dobriyan <[email protected]> writes:
>
> > 5.0 deleted three io schedulers and more importantly CONFIG_DEFAULT_IOSCHED
> > option:
> >
> > commit f382fb0bcef4c37dc049e9f6963e3baf204d815c
> > block: remove legacy IO schedulers
> >
> > After figuring out that I silently became "noop" customer enabling just
> > BFQ didn't work: "noop" is still being selected by default.
> >
> > There is an "elevator=" command line option but it does nothing.
> >
> > Are users supposed to add stuff to init scripts now?
>
> A global parameter was never a good idea, because systems often have
> different types of storage installed which benefit from different I/O
> schedulers. The goal is for the default to just work.

Kernel can by default complain about "noop" for HDD disks and setup
"noop" for SSD. And then let admins customise it further.

> If you feel that the defaults don't work for you, then udev rules are
> the way to go.
>
> If you also feel that you really do want to set the default for all
> devices, then you can use the following udev rule to emulate the old
> elevator= kernel command line parameter:
>
> https://github.com/lnykryn/systemd-rhel/blob/rhel-8.0.0/rules/40-elevator.rules

The following udev rules seem to work, thanks:

$ cat /etc/udev/rules.d/01-iosched.rules
SUBSYSTEM=="block", ACTION=="add", KERNEL=="sda", ATTR{queue/scheduler}="bfq"
SUBSYSTEM=="block", ACTION=="add", KERNEL=="sdb", ATTR{queue/scheduler}="bfq"