Executando um processo dentro de uma quantidade limitada de recursos, no Linux

3

Existe uma maneira de executar um processo (por exemplo, ls, du, find etc.) dentro de uma quantidade estritamente limitada de recursos (ou seja, cpu, memória, E / S) além de usar nice & ionice, como eu não achei eles eficazes o suficiente no meu caso.

Eu tenho um servidor de produção, que tem diretórios com grande quantidade de arquivos, que precisam ser removidos, movidos, obter seu tamanho total etc.

    
por yalu 13.03.2013 / 22:59

3 respostas

1

Existe mais um nível extremo de controle de processo do que (re) nice: chrt. Você pode definir o processo como SCHED_IDLE. Em combinação com ionice IDLE que deve fazer o trabalho.

Existe um alvo de mapeador de dispositivos que infelizmente não chegou ao kernel principal ainda, o que lhe dá ainda mais controle: ioband

Outra opção seria: Coloque este processo em uma VM. O acesso direto ao VFS é possível no KVM e você pode definir com precisão a quantidade de E / S que a VM obtém.

    
por 15.03.2013 / 16:37
0

Você pode usar o taskset para limitar o grupo de processos a uma CPU específica, e se você for gentil e ionizá-lo ao máximo, o que ajudará - mas ainda será rápido o suficiente para liberar o cache VFS (se for um problema) e o cache do VFS está fora da cota de limites - mas o uso de limites não ajuda, pois desativa o novo processo quando eles acabam.

Realmente, se você quiser andar lentamente pela árvore em segundo plano, então terá que escrever algum código.

    
por 14.03.2013 / 00:36
0

Por favor, note que o uso de ionice pode diferir de acordo com as classes que você especificar; usar um bom valor de 19 com uma classe 'ociosa' do ionice funcionou bem para mim em um caso semelhante ao seu sem aumentar muito o CPU / IO

Como você pode usá-lo:

nice -n 19 'command'
ionice -c 3 -p 'ps aux | grep command | grep -v grep | awk {'print $2'}'
    
por 15.03.2013 / 18:03