En C en FreeBSD, ¿cómo se accede a la utilización de la CPU?Usando llamadas al sistema desde C, ¿cómo obtengo la utilización de la (s) CPU (s)?
Estoy escribiendo algunos códigos para manejar los redireccionamientos HTTP. Si la carga de la CPU supera un umbral en un sistema FReeBSD, quiero redirigir las solicitudes del cliente. Examinando las páginas man, kvm_getpcpu() parece ser la respuesta correcta, pero las páginas man (que leo) no documentan el uso.
Cualquier sugerencia o sugerencia sería bienvenida, ¡gracias!
Después de leer las respuestas aquí, pude decir que a continuación. Debido a la documentación deficiente, no estoy 100% seguro de que sea correcta, pero la parte superior parece estar de acuerdo. Gracias a todos los que contestaron.
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <unistd.h>
#define CP_USER 0
#define CP_NICE 1
#define CP_SYS 2
#define CP_INTR 3
#define CP_IDLE 4
#define CPUSTATES 5
int main()
{
long cur[CPUSTATES], last[CPUSTATES];
size_t cur_sz = sizeof cur;
int state, i;
long sum;
double util;
memset(last, 0, sizeof last);
for (i=0; i<6; i++)
{
if (sysctlbyname("kern.cp_time", &cur, &cur_sz, NULL, 0) < 0)
{
printf ("Error reading kern.cp_times sysctl\n");
return -1;
}
sum = 0;
for (state = 0; state<CPUSTATES; state++)
{
long tmp = cur[state];
cur[state] -= last[state];
last[state] = tmp;
sum += cur[state];
}
util = 100.0L - (100.0L * cur[CP_IDLE]/(sum ? (double) sum : 1.0L));
printf("cpu utilization: %7.3f\n", util);
sleep(1);
}
return 0;
}
Gracias - ¡eso fue muy útil! –