ネットワーク プロジェクトの一環として、ネットワーク プログラムを作成しています。このプログラムは、一連のパケット (berkely ソケット API を使用した通信に使用される TCP) を生成し、それを特定のポートに送信して、返される応答を測定します。プログラムは完全に正常に動作しますが、プログラムが実際に生成するデータ レートのようなバックエンド計算を少し行いたいと考えていました。私がやろうとしたことは、パケットを送信するコードのルーチンの前後の時間を測定し、合計データをその時間で割ったことです。パケットは 82 バイトなので:
799 x 82 x 8 = 524144 ビット。測定された時間は = 0.0001 秒なので、データ レートは 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));
}
問題に正しくアプローチしているかどうかを確認したかったのです。また、これが正しい方法である場合、実際にどのくらいの速度でパケットがワイヤから出ているか、つまりイーサネット インターフェイスからのパケットの実際の物理速度を調べる方法はありますか? プログラムで計算したパケット レート (ユーザー モードであり、ユーザー/カーネル バリアがシステム コールでトラバースされるため、はるかに遅くなると予想されます) と実際のパケット レートの差を見積もることはできますか? すべての助けに感謝します。
ありがとう。