네트워킹 프로젝트의 일부로 네트워크 프로그램을 작성했습니다. 프로그램은 패킷 묶음 (berkely socket API를 사용하는 통신에 사용되는 TCP)을 생성하고 특정 포트로 보내고 응답을 가져옵니다. 이 프로그램은 완벽하게 작동하지만, 프로그램에서 실제로 생성되는 데이터 속도와 같은 백 엔드 계산을하고 싶었습니다. 내가 시도한 것은 패킷을 내보내고 그 시간까지 전체 데이터를 나눈 코드의 루틴 전후의 시간을 측정했다는 것입니다 : 총 799 개의 패킷이 루틴에서 한 번에 전송됩니다. 각 패킷은 82 바이트이므로Linux에서의 C에서의 패킷 생성 속도 측정
799x82x8 = 524144 비트. 측정 된 시간이었다 = 0.0001s 데이터 속도, 524,144/0.0001 = 여기에 5.24 Gbps의
내가 노력 코드의 조각이다 그래서 :
struct timeval start,end;
double diffTime (struct timeval* start, struct timeval* end)
{
double start_sec = ((double) start->tv_sec) + (double) start->tv_usec/1000000.00;
double end_sec = ((double) end->tv_sec) + (double) end->tv_usec/1000000.00;
return (end_sec - start_sec);
}
while(1){
gettimeofday(&start, NULL); // getting start time
*/ Call packet sending routine */
gettimeofday(&end, NULL);
printf("Time taken for sending out a batch is %f secs\n", diffTime(&start,&end));
}
내가 문제를 접근하고 있는지 확인하고 싶었다는 바르게 또는 아닙니다. 또한 이것이 올바른 방법이라면 이더넷 인터페이스에서 패킷의 실제 물리적 속도 인 i-e에서 패킷이 어느 속도로 빠져 나가고 있는지 실제로 알 수있는 방법이 있습니까? 프로그램에서 계산 한 패킷 속도 (사용자 모드에 있으며 사용자/커널 장벽이 시스템 호출에서 지나치게 많을수록 속도가 느릴 것으로 예상 함)와 실제 패킷 속도의 차이점을 추정 할 수 있습니까? 모든 도움을 많이 주셨습니다.
감사합니다.
65K 패킷 크기로 인해 얻게되는 타이밍에 대한 결론을 이끌어 낼 수 있는지 여부는 확실하지 않습니다. 데이터 양은 매우 작으므로 기본적으로 대역폭보다는 연결 대기 시간 만 측정합니다. –
그건 의미가 있습니다. 더 현실적인 결과를 얻기 위해 시도 할 수있는 다른 것이 있습니까? – Abdullah
예, 더 많은 데이터가 포함 된 더 많은 패킷을 보내십시오. 또한 처음부터 패킷을 생성하는 데 필요한 실제 시간을 측정하려고 시도하면 재미있을 수도 있습니다. –