전송 및 수신 모두에 대한 네트워크 활용을 계산하는 방법
-
20-09-2019 - |
문제
C 또는 쉘 스크립트를 사용하여 전송 및 수신 모두에 대한 네트워크 활용을 어떻게 계산합니까?
내 시스템은 임베디드 리눅스입니다. 내 현재 방법은 수신 된 바이트 (B1)를 기록하고 1 초를 기다린 다음 다시 기록하는 것입니다 (B2). 그런 다음 링크 속도를 알면 사용 된 수신 대역폭의 백분율을 계산합니다.
utilization을 받으십시오 = (((b2 -b1)*8)/link_speed)*100
더 나은 방법이 있습니까?
해결책 2
VNSTAT의 방향으로 나를 지적 해 준 'CSL'덕분에 감사합니다. VNSTAT 예제 여기서는 네트워크 활용을 계산하는 방법입니다.
#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;
다른 팁
비슷한 일을하는 오픈 소스 프로그램을 확인하십시오.
내 검색은 작은 도구를 불렀습니다 vnstat.
사용 가능한 경우 /Proc 파일 시스템을 쿼리하려고 시도하며 getifaddrs 가지고 있지 않은 시스템의 경우. 그런 다음 올바른 AF_LINK 인터페이스를 가져와 해당 IF_DATA 구조물을 가져온 다음 전송 및 수신 된 바이트를 읽습니다.
ifinfo.rx = ifd->ifi_ibytes;
ifinfo.tx = ifd->ifi_obytes;
또한 Sleep ()가 정확히 1 초 이상 잠을 자울 수 있으므로 방정식에 고해상도 (벽시계) 타이머를 사용해야합니다. 그렇지 않으면 적절한 것을 찾을 수 있는지 확인하기 위해 IF 기능과 구조를 탐구 할 수 있습니다. 당신의 임무를 위해.
제휴하지 않습니다 StackOverflow