测量本地套接字速度?

时间:2012-03-28 08:24:03

标签: linux bash sockets unix

如何衡量通过AF_UNIX套接字进行数据交换的速度?是否可以编写两个bash脚本:

  • 首先创建套接字,将套接字绑定到本地地址,接受连接并接收所有数据到/dev/null
  • 第二个创建套接字,与已打开的套接字建立连接并在/dev中生成一些设备,以便用dd命令测量速度?

2 个答案:

答案 0 :(得分:5)

您可以使用netcat -U轻松通过unix域套接字进行通信。当您想知道数据在管道中移动的速度时,pv命令会派上用场。

接收器:

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

发件人:

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

通常,unix套接字确实快。在我的旧笔记本电脑上以170 MB / s的速度运行,在我更新的台式机上以400 MB / s的速度运行。

答案 1 :(得分:2)

虽然它不是脚本,但这是一些基本的C代码,我用它来量化使用标准TCP套接字的套接字数据的速度(如果你真的需要在套接字级别验证,而不仅仅是整体吞吐量)。基本上,它以1K块的形式写出1K ...... 16M的数据块。

  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链路上,我能够获得大约110 MB / s的吞吐量(125 MB / s是理论上的最大值),直到我发送4 MB以上的数据...然后它被限制在~1 MB / s ......由于内部以太网交换机问题引起的背压。