Posso impedir que uma aplicação nomeada altere a frequência da CPU?

4

Eu tenho um servidor Intel. As CPUs são gerenciadas por energia entre 800MHz e 3GHz, usando o driver p_state. Obviamente, ele consome menos energia e produz menos ruído quando está em 800Mhz.

A maioria das coisas que estão sendo executadas no servidor são sob demanda e devem ser executadas o mais rápido possível (e funcionam), mas eu tenho um daemon que é completamente sem importância. Demora cerca de 20% da CPU no pico, mas isso pode durar algumas horas enquanto processa arquivos.

Meu problema é sempre que esse processo faz alguma coisa, o estado de energia na CPU aumenta. Ele usa mais energia e faz mais barulho. Eu quero que este daemon rode a 800MHz o tempo todo (a menos que qualquer outra coisa precise da CPU).

Eu poderia colocar todo o servidor no modo de economia de energia, mas preciso de outros aplicativos para dimensionar a CPU. Existe uma maneira sensata de dizer o que gerencia a CPU para desconsiderar o carregamento de um aplicativo em particular?

    
por Oli 19.01.2016 / 12:27

1 resposta

5

Eu encontrei cpulimit .

$ sudo apt-get install cpulimit  # for installing cpulimit
$ pgrep process_to_limit         # getting the pid
1234

$ cpulimit -p 1234 -l 30         # -p pid -l percentage_of_cpu_to_use

Mas parece que cpulimit usa apenas o pid de um processo em execução ou executa um programa. Isso significa que você precisa encontrar um caminho (script bash) para executar o cpulimit quando o daemon estiver em execução.

Aqui está um pequeno script de shell que lê o pid, executa o cpulimit e dorme por 60min.

#!/bin/sh
# This example uses firefox, replace the variable PROG

PROG=firefox
PID='pgrep $PROG'

if [ $PID ]                # if $PID not equals 0 (zero)
then
   cpulimit -p $PID -l 30  # limit the cpu time to 30%
   sleep 60m               # wait 60 minutes
else
   sleep 60m
fi

Salvar como, por exemplo, run_cpulimit.sh , conceda permissão chmod u+x run_cpulimit.sh e inicie-a.

    
por Kev Inski 19.01.2016 / 13:00