如何衡量通过AF_UNIX
套接字进行数据交换的速度?是否可以编写两个bash脚本:
/dev/null
。/dev
中生成一些设备,以便用dd
命令测量速度?答案 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 ......由于内部以太网交换机问题引起的背压。