開発ボードテストポート帯域幅方法
1379 ワード
プロジェクトの必要性のため、開発ボードのギガビットネットワークポートの伝送速度をテストする必要があり、最初に思いついた方法は非常に簡単で、直接開発ボードにftpサーバーを移植し、Ubuntu上のftpクライアントを利用してファイルの伝送を行い、ネットワークポートのファイルの伝送速度をテストする必要があるが、このようにするにはテストファイルをSDカードに置く必要があるが、SDカードのファイルの伝送速度は非常に限られており、ギガビットの要求にはるかに達していない.したがって、このように測定されたレートはギガビットネットワークポートの実際の伝送レートではないため、ftpサーバ側を自分で作成してファイル伝送を実現するしかない.
方法は、まずメモリに大きなメモリを申請し、SDカードに保存されているファイルをまずこのメモリキャッシュに転送し、その後、ファイルをキャッシュからコンピュータに転送し、ファイルがキャッシュからコンピュータに転送されるまでの時間、すなわちネットワークポートの実際の転送に使用される時間を計算することです.この過程でネットワークケーブルもギガビットである必要があることに注意してください.サーバ側のコアコードは次のとおりです.
方法は、まずメモリに大きなメモリを申請し、SDカードに保存されているファイルをまずこのメモリキャッシュに転送し、その後、ファイルをキャッシュからコンピュータに転送し、ファイルがキャッシュからコンピュータに転送されるまでの時間、すなわちネットワークポートの実際の転送に使用される時間を計算することです.この過程でネットワークケーブルもギガビットである必要があることに注意してください.サーバ側のコアコードは次のとおりです.
/* , */
if((fd = open(space + 1, O_RDONLY, 0)) == -1)
{
printf("open file error.
");
}
/* BufMax 170M, 170M */
p = (char *)malloc(BufMax);
if(p)
printf("Memory Allocated at: %x
",p);
else
{
printf("Not Enough Memory!
");
goto err_ret;
}
int n = 0;
for( ; ; )
{
int m;
//char bufmax[BufMax];
/* buff */
if((n = Read(fd, buff, sizeof(buff))) == 0)
break;
bytes += n;
/* buff malloc p */
memcpy(p+n, buff, n); //memcpy(p+((++cnt)%19200)*n, buff, n);
}
volatile int len = 0;
while(1)
{
/* p connfd */
len = Writen(connfd, p + len, BufMax -len);
printf(" write date to disk from ddr: %d
", len);
if(len == 0)
break;
}
free(p);