Por que o Ubuntu 16.04 define todos os agendadores de E / S de unidades como "prazo final"?

17

Acabei de instalar o Xubuntu 16.04-64bit em uma segunda partição no meu laptop. Notei que parecia um pouco lento às vezes, então verifiquei qual agendador de E / S estava usando para essa unidade, o que acaba sendo deadlinepara todas as unidades. Eu tenho alguns SSDs e discos rígidos, então eu sei que "prazo" é melhor para SSDs e cfqdiscos rígidos.

Inicializei no 14.04 em outra partição e está sendo usada cfqpara as unidades rotativas e deadlinepara o SSD, como deveria. Também examinei /etc/udev/rules.dpara ver se o 14.04 estava usando uma regra para configurar o tipo de unidade, mas ela não estava lá, então suponho que o kernel esteja fazendo isso.

Então, eu estou querendo saber se isso é um bug ou eles estão usando "prazo" para tudo agora?

Atualização: O comentário que escrevi sobre o /etc/udev/rules.d foi um erro. Na verdade, tenho usado uma regra do udev para alterar o agendador (da mesma forma que a resposta abaixo) de acordo com o tipo de rotação desde que comecei a usar um SSD, alguns anos atrás. Acho que esqueci ... de ficar velho. Enfim, uma das referências que eu usei foi o wiki de otimização de SSD do Debian .

Não seria uma boa ideia se fosse incluído? Apenas uma sugestão!

curt54
fonte

Respostas:

6

Com o lançamento do 14.04, o agendador padrão do kernel 3.13 foi alterado de CFQ para Deadline .

Não há mais um kernel de servidor separado e o sheduler do CFQ não é adequado para muitos cenários de uso do servidor, por exemplo, tempos limite de gravação do KVM . Existem até regressões de desempenho na área de trabalho com dispositivos USB .

NGRhodes
fonte
1
Obrigado pela leitura, muito esclarecedor! O problema do USB que tive com cartões SD e com um tablet Android em TWRP. No último, ele seria suspenso no final por vários minutos. O problema KVM nunca aparece nos meus convidados VB, pois eles estão no meu SSD com prazo.
precisa saber é o seguinte
32

A Equipe do Kernel do Ubuntu executa regularmente muitas análises de diferentes cargas de trabalho simuladas em diferentes sistemas de arquivos e agendadores de E / S para ter uma idéia da melhor opção de agendador de E / S genérica. A resposta geral é que não há uma escolha perfeita do planejador de E / S para uma configuração genérica em todos os tipos diferentes de instalação para todos os diferentes tipos de mídia. Os pontos mais importantes a serem lembrados são:

  1. Os sistemas estão migrando para o SSD, então noop ou prazo são os melhores; noop tem menos sobrecarga da CPU do que o prazo.

  2. CFQ vs Deadline é uma decisão difícil. O CFQ permite uma maior flexibilidade. No entanto, descobrimos que, para uma gama mais ampla de operações de E / S simuladas, o prazo proporcionava latências mais baixas e um rendimento um pouco mais alto que o CFQ.

  3. Comparo os kernels regularmente (cada teste do kernel leva mais de 3 dias para ser concluído) para vários sistemas de arquivos e agendadores de E / S. A partir disso, e de outros dados variados, tentamos tomar uma decisão informada sobre a melhor opção, consulte:

http://kernel.ubuntu.com/~cking/fs-tests/

Existem prós / contras em todos os agendadores de E / S, portanto, qualquer padrão não é perfeito e a equipe do kernel do Ubuntu está sempre disposta a fornecer a opção padrão se dados e motivos convincentes nos mostrarem mudanças de outra maneira.

Colin Ian King
fonte
5
Passamos a usar o CFQ como padrão para o kernel do Ubuntu Zesty 4.10 e também habilitamos o novo CONFIG_BLK_WBT_MQ (aceleração de gravação múltipla), pois isso resolve os problemas de gravação suja do cache com dispositivos lentos, como dispositivos flash.
Colin Ian King
1
Talvez possamos ver o BFQ como padrão agora que ele está no kernel 4.12?
21717 JaipurtyDoe
Nós avaliaremos isso para 4.12 / 4.13, também fiz alguns testes com o kyber, mas os revisitaremos novamente quando o 4.12 for lançado esta semana.
Colin Ian King
Em princípio, essa pergunta é apenas sobre o kernel 16.04, mas ainda aparece na pesquisa :-). Então, aqui está uma atualização mais recente: O Ubuntu voltou ao CFQ, correspondendo ao padrão upstream, no Ubuntu 17.04 (zesty) a 18.10 (cósmico) .
sourcejedi
1
Atualização adicional: o Linux desativou o WBT ao usar CFQ ou BFQ (pelo menos por padrão), porque não funciona bem em conjunto. 2) Se você deseja avaliar o problema resolvido pelo WBT, acho que precisa estar ciente de que o problema varia entre os dispositivos (diferentes firmwares). Nos seus resultados de benchmark, nem consigo encontrar que tipo de dispositivo foi usado. 3) Estou curioso sobre a sua descrição do que o WBT resolve. Se você observar a carta de apresentação na v2 do conjunto de patches WBT, o WBT foi projetado para lidar com gravações em buffer em flash rápido , que pode ter filas muito profundas e evitar a fome de leitores no mesmo dispositivo.
sourcejedi
9

Não sei por que os desenvolvedores decidiram escolher deadlinecomo agendador padrão, talvez seja porque a maioria dos computadores novos é fornecida com um SSD, no qual normalmente os sistemas estão instalados. Você pode definir o agendador manualmente dessa maneira, caso ainda não o tenha instalado ... instale gksu:

Abra um terminal e execute:

sudo apt install gksu  

Em seguida, execute este comando:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

Cole o seguinte texto no arquivo vazio e salve o arquivo alterado.

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

Reinicie o sistema operacional e agora você está usando os agendadores ideais para HDDs e SSDs.

cl-netbox
fonte
Sim, isso que eu estava usando, de acordo com a minha atualização na pergunta. Mas eu acho que, como hoje é comum ter os dois tipos de unidades, essa regra será incluída em todas as distribuições Linux.
curt54