Pregunta

¿Cómo calculo utilización de la red para transmitir y recibir ya sea utilizando C o un script?

Mi sistema es un Linux embebido. Mi método actual es la de bytes grabados recibido (b1), espera 1 segundo, entonces registrado de nuevo (b2). A continuación, conociendo la velocidad del enlace, calculo el porcentaje del ancho de banda utilizado recibir.

recibir utilización = (((b2 - b1) * 8) / link_speed) * 100

¿existe un método mejor?

¿Fue útil?

Solución 2

Gracias a 'CSL' para mí apuntando en la dirección de vnStat. utilizando vnStat ejemplo aquí es cómo puedo calcular utilización de la red.

#define FP32 4294967295ULL
#define FP64 18446744073709551615ULL
#define COUNTERCALC(a,b) ( b>a ? b-a : ( a > FP32 ? FP64-a-b : FP32-a-b))
int sample_time = 2; /* seconds */
int link_speed = 100; /* Mbits/s */
uint64_t rx, rx1, rx2;
float rate;

/* 
 * Either read:
 * '/proc/net/dev' 
 * or 
 * '/sys/class/net/%s/statistics/rx_bytes'
 * for bytes received counter
 */

rx1 = read_bytes_received("eth0"); 
sleep(sample_time); /* wait */
rx2 = read_bytes_received("eth0");

/* calculate MB/s first the convert to Mbits/s*/
rx = rintf(COUNTERCALC(rx1, rx2)/(float)1048576);
rate = (rx*8)/(float)sample_time;

percent = (rate/(float)link_speed)*100;

Otros consejos

Salida programas de código abierto que hace algo similar.

Mi búsqueda permitió obtener una pequeña herramienta llamada vnStat .

Se trata de consultar el sistema / proc archivo, si está disponible, y los usos getifaddrs para los sistemas que no lo tienen. Se busca entonces la interfaz AF_LINK correcta, obtiene la correspondiente estructura if_data y luego lee en voz transmitida y recibida bytes, como esto:

ifinfo.rx = ifd->ifi_ibytes;
ifinfo.tx = ifd->ifi_obytes;

Asimismo, recuerda que el sueño () podría dormir más de exactamente 1 segundo, por lo que es mejor usar un temporizador de alta resolución (reloj de pared) de la ecuación - o usted podría ahondar en el caso de funciones y estructuras para ver si encontrar nada apropiado para su tarea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top