Acabei de instalar a versão 4.12 do kernel Linux no Ubuntu 17.04 usando ukuu (Utilitário de atualização do kernel do Ubuntu https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).
Acontece que, quando eu verifico os agendadores de I / O disponíveis, não consigo encontrar o BFQ nem o Kyber I / O planejador:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq]
Então, como usar um dos novos planejadores nesta versão do Linux?
Resposta
Não estou no Ubuntu, mas o que fiz no Fedora pode ajudá-lo.
O BFQ é um blk-mq (Multi-Queue Block IO Queuing Programador de mecanismo), então você precisa habilitar 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 é meu arquivo grub, por 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. No Fedora, temos que usar sudo grub2-mkconfig -o /path/to/grub.cfg
, que varia dependendo do método de inicialização . No Ubuntu, você pode simplesmente executar:
sudo update-grub
Reinicialize e, se conseguir:
cat /sys/block/sda/queue/scheduler [mq-deadline] none
Provavelmente seu kernel foi compilado com BFQ como um módulo , e este pode ser o caso também para 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 /etc/modules-load.d/bfq.conf
arquivo contendo bfq
.
É importante notar que habilitar blk_mq torna impossível usar agendadores não blk_mq, então você perderá noop cfq e o não mq deadline
Aparentemente, o sistema de agendamento blk_mq não oferece suporte a flags de elevador no grub, regras udev podem ser usadas, com a vantagem de oferecer um controle mais granular.
Crie /etc/udev/rules.d/60-scheduler.rules
se não existisse e adicione:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Conforme indicado aqui se necessário, você pode distinguir entre rotaçãoa Dispositivos l (HDDs) e não rotacionais (SSDs) em regras udev usando o atributo ATTR{queue/rotational}
. Esteja ciente de que Paolo Valente, desenvolvedor BFQ, apontou na LinuxCon Europe que o BFQ pode ser uma escolha melhor do que os programadores noop
ou deadline
em termos de garantias de baixa latência, o que é um bom conselho para usá-lo também para SSDs.
Comparação de Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Salve-o, recarregue e acione udev rules
:
sudo udevadm control --reload sudo udevadm trigger
Comentários
Resposta
Para extend great Resposta RomuloPBenedetti :
Você pode testar se o agendador bfq está realmente disponível em determinado dispositivo usando PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler""
na regra udev.Isso efetivamente substituirá DRIVERS=="sd|sr"
e não será acionado se alguém esquecer scsi_mod.use_blk_mq=1
Curiosidades:
-
PROGRAM
– Executar um programa para determinar se há uma correspondência; a chave é verdadeira se o programa retornar com sucesso; Se nenhum caminho absoluto for fornecido, o programa deve residir em / lib / udev. -
$sys
– O ponto de montagem sysfs (/sys
). -
$devpath
– O devpath do dispositivo (/ devices / pci / …).
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"
Evita correspondência de padrões com nomes de dispositivos, o que torna a correspondência mais precisa. Ele não ' corresponderá aos dispositivos de partição porque eles não ' t têm a " fila / planejador " atributo.echo bfq > /sys/block/sda/queue/scheduler
como root. (sudo não funcionou para mim no Ubuntu 18.04) Isso deve torná-lo efetivo imediatamente.