AF_UNIX
ソケットを介してデータ交換の速度を測定する方法は?いくつかの2つのbashスクリプトを記述することが可能です:ローカルソケットの速度を測定しますか?
- まず、ローカルアドレスにソケットをバインド接続を受け入れ、
/dev/null
にすべてのデータを受信し、ソケットを作成します。 - もう1つはソケットを作成し、すでに開いているソケットとの接続を確立し、
/dev
にデバイスをスポークするので、dd
コマンドでスピードを測定することは可能でしょうか?
AF_UNIX
ソケットを介してデータ交換の速度を測定する方法は?いくつかの2つのbashスクリプトを記述することが可能です:ローカルソケットの速度を測定しますか?
/dev/null
にすべてのデータを受信し、ソケットを作成します。/dev
にデバイスをスポークするので、dd
コマンドでスピードを測定することは可能でしょうか?netcat -U
を使用すると、unixドメインソケットを介して簡単に通信できます。 pv
コマンドは、データがパイプを通って移動する速度を知りたい場合に便利です。
受信機:
nc -lU /tmp/socket > /dev/null
送信者:一般的に
pv /dev/zero | nc -U /tmp/socket
、Unixソケットは本当に速いです。これは私の古いラップトップでは170 MB /秒で、もう少し新しいデスクトップでは400 MB /秒で計時されました。
これはスクリプトではありませんが、標準のTCPソケットを使用してソケットデータの速度を数値化するための基本的なCコードです(全体的なスループットだけでなく、 。基本的には、1K ... 16Mブロブのデータを1Kチャンクで書き込みます。
for (int i=0; i<15; i++)
{
if ((fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) > 0)
{
timenode node;
clock_gettime(CLOCK_REALTIME, &node.ts);
if (connect(fd, (struct sockaddr *) &sa, sizeof(sa)) == 0)
{
int n = 0;
int wb = 1024<<i;
while ((wb-n)>0)
{
n+=send(fd, buf, sizeof(buf), 0);
}
}
do_ts(node.ts, wtn[i], wavg[i]);
close(fd);
}
}
皮肉なことに、私は1Gbpsのリンク上でそれを見ることができた私は4+ MBを送ることになったまで、私は(125メガバイト/秒が理論上の最大値である)の周りに110メガバイト/ sのスループットを得ることができましたデータ...内部イーサネットスイッチの問題に起因するバックプレッシャのために、〜1 MB/sに抑えられています。
ありがとうございました。 –
以下のコマンドでデータレートを測定しました。ソケットを行う。 nc -lUソケット>/dev/null; done 'と 'dd if =/dev/zero bs = $ BS | nc -Uソケット '私は以下のブロックサイズを試しました: '128、256、512、1k、2k、4k、8k、16k、32k'。最高のパフォーマンスは、 '2MB' RAMを搭載した私の' i3'に '16k'ブロックサイズで' 201MB/sec'でした。 –
クール。私は最大の制限要因はあなたのRAMがどれくらい速いかということです。 – alberge