2012-03-28 22 views
1

AF_UNIXソケットを介してデータ交換の速度を測定する方法は?いくつかの2つのbashスクリプトを記述することが可能です:ローカルソケットの速度を測定しますか?

  • まず、ローカルアドレスにソケットをバインド接続を受け入れ、/dev/nullにすべてのデータを受信し、ソケットを作成します。
  • もう1つはソケットを作成し、すでに開いているソケットとの接続を確立し、/devにデバイスをスポークするので、ddコマンドでスピードを測定することは可能でしょうか?

答えて

5

netcat -Uを使用すると、unixドメインソケットを介して簡単に通信できます。 pvコマンドは、データがパイプを通って移動する速度を知りたい場合に便利です。

受信機:

nc -lU /tmp/socket > /dev/null 

送信者:一般的に

pv /dev/zero | nc -U /tmp/socket 

、Unixソケットは本当に速いです。これは私の古いラップトップでは170 MB /秒で、もう少し新しいデスクトップでは400 MB /秒で計時されました。

+0

以下のコマンドでデータレートを測定しました。ソケットを行う。 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'でした。 –

+0

クール。私は最大の制限要因はあなたのRAMがどれくらい速いかということです。 – alberge

2

これはスクリプトではありませんが、標準の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に抑えられています。

+0

ありがとうございました。 –

関連する問題