¿Hay alguna forma de limitar el consumo general de CPU?

23

Mi computadora portátil (una HP con un chip i3) se sobrecalienta como loco cada vez que ejecuto un proceso de recursos pesados ​​(como una gran compilación, extrayendo grandes tarballs o ... jugando Flash).

Actualmente estoy buscando algunas soluciones de enfriamiento, pero tuve la idea de limitar el consumo global de CPU. Pensé que si la CPU está limitada, es probable que la temperatura deje de aumentar frenéticamente, y estoy dispuesto a sacrificar un poco de rendimiento para hacer el trabajo.

  1. ¿Estoy equivocado en mi razonamiento?
  2. ¿Cómo puedo proceder para limitar el uso general de la CPU?

Si ayuda, estoy ejecutando Debian.

rahmu
fuente
Creo que puede hacer esto con cgroups, dejando esto aquí como un puntero en lugar de una respuesta porque no estoy seguro, y no estoy seguro de cómo exactamente ...
derobert
Puedes intentar usar cgroups. Aquí hay una pregunta con un problema similar: unix.stackexchange.com/questions/14537/…
Grzegorz Wierzowiecki

Respuestas:

10

No sé que limitar la CPU a todo el sistema es algo que es posible sin mucho pirateo, pero puede limitar fácilmente la cantidad de CPU utilizada por un solo proceso usando cpulimit

La única forma en que puedo pensar en que puedas usar esto de manera efectiva es escribiendo un script de envoltura (realmente no puedo llamarlo un script, es tan pequeño) para las aplicaciones que sabes que son un gran recurso. Digamos, por ejemplo, que google-chrome usa mucha CPU, podría reemplazar el binario google-chrome en su camino con algo como:

#! /bin/bash
cpulimit --limit 70 /usr/bin/google-chrome-bin

No he probado esto, así que tómalo con un grano de sal. Desde el sitio web de cpulimit, parece que puede establecer reglas para límites de CPU en diferentes aplicaciones. No estoy seguro, tendrías que echar un vistazo.

n0pe
fuente
10

Otra alternativa que no se ha mencionado es cpufrequtils, que instalé y utilicé en mi computadora portátil con Debian 6. Le permite cambiar el algoritmo ( gobernador , en cpufrequtilsterminología) que el kernel usa para escalar la velocidad del reloj hacia arriba y hacia abajo en respuesta para cargar, en particular, el userspacegobernador le permite bloquear la frecuencia en algo de su elección (por supuesto, la CPU debe ser capaz de funcionar a esta velocidad).

Lo he usado para bloquear un Atom a 800MHz en lugar de 1.6GHz, por ejemplo. Es muy fácil de usar.

AlexWebr
fuente
1
Esta debería ser la respuesta aceptada. (O temp_throttle)
Vajk Hermecz
6

Puede limitar los núcleos de su CPU automáticamente en función de la temperatura utilizando el script temp_throttle . Puede ejecutarse en segundo plano mientras te enfocas en cosas más importantes. Un ejemplo sobre cómo ejecutar:

sudo ./temp_throttle.sh 80 # Will limit CPU cores when 80C is reached.

* Descargo de responsabilidad: soy el autor y mantenedor de temp_throttle *

Sepero
fuente
3

Entra en BIOS y subclockea la CPU. - No hay necesidad de inteligencia.

Sirex
fuente
¿Qué pasa con las BIOS que no son compatibles con el underclocking?
daboross
1
uso cgroups, pero tbh no he visto una BIOS que no pueda cambiar la configuración de frecuencia nunca.
Sirex
Mi computadora portátil alienware m14x r1 (es cierto que está bastante mal construida) no tiene esa configuración, no hay mucho disponible para cambiar la BIOS además del orden de arranque y el tiempo del sistema.
daboross
1

No es necesario cambiar el gobernador, solo necesita cambiar el valor de /sys/devices/system/cpu/*/cpufreq/scaling_max_freqcada núcleo de la CPU.

Por ejemplo, con este bucle for:

for f in /sys/devices/system/cpu/*/cpufreq/scaling_max_freq; do
    sudo sh -c "echo $1 > $f" 
done

vea también mi script setcpu .

( comandos originales encontrados aquí )

Eadmaster
fuente
-2

Puede usar renicepara alterar la prioridad del proceso por proceso o ID de grupo. De los ejemplos para renice:

  1. Ajuste el valor agradable para que las ID de proceso 987 y 32 tengan un valor agradable más bajo:

    renice -n 5 -p 987 32

  2. Ajuste el valor agradable para que las ID de grupo 324 y 76 tengan un valor agradable mayor, si el usuario tiene los privilegios adecuados para hacerlo:

    renice -n -4 -g 324 76

  3. Ajuste el valor agradable para que la ID de usuario numérica 8 y el usuario sas tengan un valor agradable más bajo: renice -n 4 -u 8 sas

Rilindo
fuente
44
Solo una nota adicional a la respuesta: renice, nice u otras herramientas similares no afectarán la temperatura de la CPU, el proceso problemático continuará consumiendo los ciclos de la CPU.
Rufo El Magufo
2
Nice and renice no limitará el consumo de CPU. Simplemente establecen prioridades. Si nada más se está ejecutando al mismo tiempo, el proceso seguirá consumiendo toda la potencia de procesamiento.
rahmu