La determinación de la utilización de la CPU

Hay un comando o de cualquier otra forma para obtener la corriente o promedio la utilización de la CPU (para una multi-procesador de medio ambiente) en Linux?

Estoy usando Linux embebido en un sistema pequeño. Básicamente, necesito determinar el uso de la CPU, de manera que si está alta, ya que puede en lugar de desviar un nuevo proceso a otro controlador en el sistema, en lugar de la ejecución en el procesador principal, que podría ser ocupado haciendo más importante del proceso.

Esta cuestión no es meramente la priorización de los procesos, el otro controlador puede suficientemente manejar el nuevo proceso, sólo que cuando el procesador principal no está ocupado, yo prefiero hacer la ejecución.

Puede que desee utilizar tarea cpusets para forzar el planificador de Linux a hacer eso para usted; usted puede limitar el núcleo(s) se puede ejecutar una tarea. Estoy asumiendo que usted está utilizando SMP aquí.
¿Por qué has repetido huseyinalb la respuesta y, a continuación, elegido a ti mismo? Esto se ve como un intento de juego el sistema de reputación.
¿qué reputación puedo ganar por responder a mi propia pregunta?
Así que supuse que usted obtenga la reputación de una aceptados respuesta, pero incluso si no se están negando a huseyinalb, que no parece muy justo.

OriginalEl autor | 2010-09-22

5 respuestas

  1. 7

    Usted necesita para muestra los valores en /proc/stat en dos veces, y calcular el promedio de utilización durante ese tiempo. (Instantáneo utilización no hacer un montón de sentido – que va a ser siempre el 100% en un solo núcleo de la máquina, ya que su utilsation de medición de código se ejecuta cada vez que se ve).

    OriginalEl autor caf

  2. 23

    La respuesta a la pregunta después de mucho buscar y retoques:

    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
    long double a[4], b[4], loadavg;
    FILE *fp;
    char dump[50];
    for(;;)
    {
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
    fclose(fp);
    sleep(1);
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
    fclose(fp);
    loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
    printf("The current CPU utilization is : %Lf\n",loadavg);
    }
    return(0);
    }

    Estoy consiguiendo los mismos valores que los reportados por el Monitor del Sistema.

    la costumbre de la lectura de los archivos de ser super lenta?
    No, j0h, este es un procfs archivo. Esos no son un normal del sistema de ficheros. PS: lo Siento necro, pero tuve que responder.
    Por qué larga doble y no long int?
    Hay un reciente explicación en Recolección de la utilización de la CPU de /proc/stat que incluye un ejemplo en bash.
    ¿por qué no buscar el archivo de inicio en lugar de volver a abrir?

    OriginalEl autor

  3. 9
    cat /proc/stat

    verá algo como esto

    cpu  178877 11039 58012 5027374 22025 2616 1298 0 0
    cpu0 122532 8808 34213 2438147 10881 1050 448 0 0
    cpu1 56344 2230 23799 2589227 11143 1565 850 0 0

    Simplemente tomar la suma de los tres primeros números y dividir con las sumas de los primeros cuatro entero

    Los primeros 4 números de usuario, agradable, sistema, y los tiempos de inactividad

    nota: Esto da una media general. Si usted quiere tomar espontánea promedio, se deben tomar dos muestras y restar uno del otro antes de la división.

    Es esto en términos de % o algún factor? Quiero decir, es el valor máximo posible de 100 o 1?

    OriginalEl autor oguzalb

  4. 3

    El sistema de archivos /proc, tiene todo tipo de información interesante. Mira man proc para obtener más información.

    ¿podría ser más específico en términos de que el comando a utilizar?

    OriginalEl autor doron

  5. 1

    Sólo utilizar la parte superior, si está disponible. Se puede utilizar en un modo no-interactivo:

    top -n 1

    Si quieres algo específico, a continuación, sólo grep esa salida. Los detalles exactos dependerán de cómo su comando superior formatos de su salida, pero por ejemplo:

    top -n 1 | grep 'Load'
    Incorrecto, que le daría el promedio de los tiempos de carga que no es lo mismo que la Utilización de la CPU. (el primero que se extrae de /proc/loadavg mientras que el último de /proc/stat) [ver hombre proc]
    No, eso es correcto. El ejemplo que me dio agarra el promedio de carga, pero el método puede sacar también a la utilización de CPU. En OSX y linux el formato es ligeramente diferente, pero en ambos sistemas es la línea por debajo de la carga por lo que es fácil de filtrar.
    La pregunta es acerca de la comprobación de que en c, no en el símbolo del sistema.
    No era: “hay un comando o de cualquier otra forma”

    OriginalEl autor Amoss

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *