Como ativar e usar o agendador BFQ?

15

Acabei de instalar o kernel Linux versão 4.12 no Ubuntu 17.04 usando o ukuu (Utilitário de atualização do kernel do Kernel link ).

O problema é que, quando eu verifico os agendadores de E / S disponíveis, não consigo encontrar o BFQ nem o agendador de E / S do Kyber:

cat /sys/class/block/sda/queue/scheduler
> noop deadline [cfq]

Então, como usar um dos novos agendadores nesta versão do Linux?

    
por Sidahmed 06.07.2017 / 00:24

1 resposta

18

Não estou no Ubuntu, mas o que fiz no Fedora pode ajudá-lo.

O BFQ é um scheduler blk-mq (Multi-Queue Block IO Queuing Mechanism), então você precisa ativar o blk-mq no momento da inicialização, editar seu arquivo / etc / default / grub e adicionar scsi_mod.use_blk_mq=1 ao seu GRUB_CMDLINE_LINUX , este é o meu arquivo grub, como exemplo:

GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=false
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1"
GRUB_DISABLE_RECOVERY="true"

Depois disso, você deve atualizar seu grub, se eu não estiver errado, no Ubuntu é:

sudo update-grub

Reinicie, e se você conseguir isso:

cat /sys/block/sda/queue/scheduler
[mq-deadline] none

Provavelmente seu kernel foi compilado com BFQ como um módulo , e este também pode ser o caso do Kyber.

sudo modprobe bfq
sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] bfq none

Você pode adicioná-lo no momento da inicialização adicionando um arquivo /etc/modules-load.d/bfq.conf contendo bfq .

É importante notar que habilitar o blk_mq torna impossível usar planejadores não blk_mq, então você perderá noop cfq e o prazo não mq

Aparentemente, o sistema de agendamento blk_mq não está suportando sinalizadores de elevador no grub, as regras do udev podem ser usadas no lugar, com um bônus de oferecer um controle mais granulado.

Crie /etc/udev/rules.d/60-scheduler.rules se ele não existir e adicione:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"

Como apontado aqui , se necessário, você pode distinguir entre dispositivos rotacionais (HDDs) e não-rotacionais (SSDs) em dev regras usando o atributo ATTR{queue/rotational} . Esteja ciente de que Paolo Valente , BFQ developer, apontou na LinuxCon Europe que o BFQ pode ser uma escolha melhor do que NOOP ou DEADLINE em termos de garantias de baixa latência, o que aconselha a usá-lo também em SSDs.

Comparação de Paolo: link

Salve e recarregue e acione udev rules :

sudo udevadm control --reload
sudo udevadm trigger
    
por 08.07.2017 / 08:38