我编写了一个网络程序作为网络项目的一部分。该程序生成一堆数据包(TCP 用于使用 berkely 套接字 API 进行通信)并将其发送到特定端口并测量它返回的响应。该程序运行良好,但我想做一些后端计算,例如我的程序实际生成的数据速率。我试图做的是我测量了发送数据包的代码例程之前和之后的时间,并将总数据除以那个时间,即:在一次例程中总共发送了 799 个数据包,其中每个数据包是 82 字节,所以:
799 x 82 x 8 = 524144 位。测量的时间 = 0.0001s 所以数据速率 524144 / 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));
}
我想确认我是否正确地解决了这个问题。此外,如果这是正确的方法,是否有办法找出数据包从网络中出来的实际速率,即来自以太网接口的数据包的实际物理速率?我们能否估计一下我在程序中计算的数据包速率(在用户模式下,我希望它在系统调用中遍历用户/内核屏障时会慢很多)和实际数据包速率之间的差异?非常感谢所有帮助。
谢谢。