Como definir a prioridade de E / S do disco automaticamente?

8

Se eu usar algum aplicativo intensivo de IO (como Virtualbox, verificação de dados do Steam ou até mesmo dd), meu sistema ficará quase sem resposta. Apesar de tudo ter sido iniciado com prioridade normal, eles tornam a área de trabalho muito lenta e atrasam muito a inicialização de outros aplicativos.

Eu sei que posso usar algo como ionicepara alterar a prioridade para ocioso, por exemplo, mas no caso do Virtualbox, que gera muitos processos, fica difícil.

Posso dar algum tipo de dicas para o sistema, portanto, ao iniciar alguns aplicativos específicos, eles são iniciados com a menor prioridade de E / S?

Salem
fonte
você tentou minha solução? Faz o trabalho?
sm4rk0

Respostas:

7

Nota: Esta solução funciona apenas com o planejador cfq, conforme explicado aqui . Você deve verificar qual é usado emitindo

cat /sys/block/sda/queue/scheduler

e altere -o se necessário.

Se entendi corretamente, você deseja que alguma ioniceconfiguração seja aplicada toda vez que você inicia um comando. Você pode fazer assim:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

O primeiro comando cria um arquivo VirtualBoxcom o texto entre aspas simples como seu conteúdo. Isso deve ter o caminho completo para o programa, porque, se alguém especificar VirtualBox, pode interpretá-lo como o arquivo que acabamos de criar e criar um "loop".

O segundo comando o torna executável e o terceiro move esse novo arquivo em uma pasta que está na frente da pasta bin "system" /usr/bin, para que nosso novo arquivo seja executado em vez do original. A parte "$ @" contém todos os argumentos com os quais o comando foi chamado, então eles são encaminhados para o comando VirtualBox real.

De acordo com a resposta ("sim") a esta pergunta do superusuário Os processos filhos herdam as prioridades de ionícia de seus pais? Como você verifica a prioridade de E / S de um processo em execução? , deve ser suficiente para ioniceo processo pai, assim:

ionice -c 3 VirtualBox

Na ionice página de manual , os seguintes valores da classe de planejamento de E / S estão disponíveis:

  • 0 para nenhum
  • 1 para tempo real
  • 2 para melhor esforço
  • 3 para inativo (usado no exemplo acima)

Um número ou nome de classe pode ser usado.

Além disso, a -n levelopção é aplicável a classes em tempo real e de melhor esforço, com 0 a 7 como dados válidos (níveis de prioridade).

sm4rk0
fonte
1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Lucio
@ Lucio, obrigado por uma dica, mas não é "deve ser suficiente para ioniceo processo pai" parte essencial?
sm4rk0
1
Sim, você está certo. Mas, se puder , reserve um tempo e, em seguida, adicione mais informações de sua própria experiência sobre esse procedimento, criando uma resposta melhor :)
Lucio
@ Lucio, espero que seja bom o suficiente agora. Obrigado por insistir (:
sm4rk0
1
FYI: ionicepode trabalhar cfqapenas com agendador! Para obter mais detalhes: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Você pode usar o comando 'renice' para priorizar processos:

renice -<priority> <application's pid>

Também pode ser que sua unidade esteja diminuindo demais; portanto, quando você deseja iniciar um aplicativo como o Virtualbox, ele precisa girar antes que você possa começar a trabalhar (isso pode demorar um pouco).

acinzentado
fonte
Obrigado pela dica, mas eu estava procurando uma maneira de fazer isso automaticamente e em todo o sistema. Por exemplo: ao iniciar o Virtualbox, execute-o com a menor prioridade de E / S possível ...
Salem
regular nice e renice não priorizam E / S separadamente.
Jay _silly_evarlast_ Wren
E isso é bom, não ionice. Um é para CPU e o outro para E / S.
Dagelf