Controle la carga de CPU de Linux para probar

3

Deseo realizar algunas pruebas en una variedad de dispositivos Linux para ver su consumo de energía en función de la carga actual del procesador.

Como tal, estoy buscando un programa que pueda usar para obligar a la CPU a usar X%, es decir, puedo incrementar la carga del procesador en un 10% de comprobaciones y realizar mediciones en ese punto.

He mirado paquetes como 'estrés' y 'cpuburn' pero parece que solo usan el 100%

Espero que puedas ayudar

Gracias

Zac Powell
fuente

Respuestas:

4

Puede usar el generador de carga de la CPU junto con un limitador de carga de la CPU.

A continuación se muestra un ejemplo con utilidades stressy cpulimit. Ambas utilidades están en Debian y repositorios de distribución derivados (como Ubuntu).

stress -c 1 & cpulimit -p $( pidof -o $! stress ) -l 20

Explicación

20es el porcentaje de tiempo de CPU que se utilizará. stressgenera un niño trabajador para que no pueda controlarlo directamente cpulimit. pidofse está utilizando para encontrar el PID secundario. Este simple ejemplo funcionará de manera confiable solo si stressse inicia una sola instancia de . Para detener la carga, presione Ctrl+ cy escriba killall stress.

Alternativamente, para un procedimiento más fácil, puede usar una utilidad de tensión de CPU diferente que no genera procesos secundarios.

cpulimitfunciona mejor si ajusta el RLIMIT_NICElímite o si lo ejecuta como root.

pabouk
fuente
tenga en cuenta que debido a que el enfoque aquí está en el% de tiempo de la CPU, no en el% de frecuencia, el estrés seguirá consumiendo energía mientras está en la parte 'apagada' de su ciclo, ya que está procesando el cambio de contexto del hilo a pesar de que los hilos de los programas de estrés están en un estado de espera de giro.
Frank Thomas el
stressse ejecutará en bucle sin fin, pero cpulimitlo suspenderá y reanudará periódicamente según sea necesario para lograr la carga de CPU solicitada. Entonces, en el caso que se muestra en mi respuesta, consumirá el 20% de un solo núcleo de CPU. Cuando stressse suspende, no consume ningún ciclo de CPU. Creo que esto es lo que pidió Zac Powell. --- Cuando se necesita cargar en múltiples núcleos stresspuede generar múltiples hijos y cpulimitpuede ejecutarse en múltiples instancias, pero creo que no hay una solución fácil para forzar la distribución de los hijos individuales a los núcleos individuales.
Pabouk
cuando los hilos están durmiendo, todavía están tomando tiempo de CPU, que es cómo se puede decir 'dormir por 100 ms'. si realmente no estuvieran ejecutándose, el sistema operativo no sabría cuándo reanudarlos, ya que la instrucción de suspensión se generó dentro del mismo hilo que está durmiendo. simplemente ceden la ejecución a otros hilos y no hacen ningún trabajo por sí mismos. la multiplexación de tiempo del subproceso del sistema operativo permite que el subproceso funcione constantemente, y el subproceso en sí mismo dice 'no, voy a esperar', lo que toma ciclos y consume energía.
Frank Thomas el
De hecho, la respuesta anterior, mientras esperaba que funcionara bien, parece dar resultados muy variados y no puedo generar un buen resultado de ella
Zac Powell, el
@FrankThomas: 1. En Linux no hay una diferencia real entre el proceso y el hilo. Ver, por ejemplo, Subprocesos vs Procesos en Linux . Solo hay algunos parámetros configurados de manera diferente. Se programan de la misma manera: Linux: subprocesos y prioridades de programación de procesos .
pabouk 01 de
0

En lugar de tratar de limitar el uso de aplicaciones de la CPU, ¿por qué no intentas estrangular la CPU en sí misma, reduciendo su capacidad al porcentaje que deseas? no podrá distinguir un subproceso que, de lo contrario, se ejecutaría a la capacidad máxima para "correr más lento", a menos que esté diseñado para dormir x% del tiempo, lo que contaminaría los datos que está tratando de recopilar con la actividad del procesador para las operaciones de subprocesamiento como spin-wait / pulse.

Dependiendo de su distribución, puede usar herramientas como cpupower, granola o cpufreq

Frank Thomas
fuente
Ok, entonces podría acelerar la CPU y luego usar cpuburn
Zac Powell
0

Hay stress-ng que permite definir porcentajes de carga de trabajo de una manera fácil. Por ejemplo, podría usarlo así:

stress-ng --cpu 4 --cpu-load 50

Esto estresará cuatro CPU con una carga de trabajo del 50%. Si está utilizando Ubuntu, simplemente puede instalarlo desde el repositorio:

sudo apt-get install -y stress-ng
arne.z
fuente
0

Alguien publicó un violín interesante que puede estresar todos los núcleos de la CPU al 100%.

Utiliza un trabajador web por núcleo (núcleo cuádruple predeterminado) y puede modificarse fácilmente para una tensión variable en cada núcleo.

http://jsfiddle.net/MTJ27/81/

  • puede usar navigator.hardwareConcurrency para obtener el número de núcleos.
  • no puede implementar CPU-Z como página web, aunque WebGL permite información detallada de GPU.
Dominic Cerisano
fuente