首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netperf中本地发送大小(-m)和发送缓冲区大小(-s)之间的差异?

netperf中本地发送大小(-m)和发送缓冲区大小(-s)之间的差异?
EN

Stack Overflow用户
提问于 2020-10-08 07:54:59
回答 1查看 57关注 0票数 0

我现在使用netperf在Ubuntu机器上做一些带宽测试。

我在同一台主机上设置了netperf客户机和netperf服务器。我在客户端和服务器之间做了一些主机内的数据包转发。

然而,我发现netperf的默认设置不能充分利用主机内带宽。

我之前用iperf3做了主机内的包转发带宽测试。带宽通常在35Gbps左右。

当我使用netperf做主机内的包转发带宽测试时,我得到的带宽只有11Gbps左右,考虑到主机内的包转发带宽,这个带宽太小了。以下是netperf测试的输出:

在netperf的输出中,让我感到困惑的是“发送消息大小”的含义。是数据包大小吗?但通常当我们谈论数据包大小时,我们指的是MTU大小或MSS大小。那么netperf中“发送消息大小”的实际含义是什么呢?

我还尝试将"Send Message Size“的数量更改为128KB (131072B),这等于"Recv Socket Size”。本次主机内包转发带宽约为35Gbps,有望充分利用主机内带宽。所以为什么“发送消息大小”会影响带宽的测量。这真的让我感到困惑。有人能给我一些指导吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-04-17 00:46:28

"Send Message Size“是任何一个"send”调用提供给堆栈的字节数。发送消息的大小越大,将给定数量的数据放入堆栈所需的发送调用次数就越少。

Netperf的发送消息大小的默认值是在创建数据套接字时采用发送套接字缓冲区(SO_SNDBUF)大小的值。如果您在您的linux系统上查看:

sysctl net.ipv4.tcp_wmem

您将看到第二个值(即初始大小)为16384字节。如果你看一下:

sysctl net.ipv4.tcp_rmem

您将看到接收套接字缓冲区(SO_RCVBUF)的初始值为128K。

Iperf3的默认发送大小为128K

默认情况下(除非显式调用setsockopt()以获取套接字缓冲区大小),Linux将在连接的整个生命周期内“自动调整”套接字缓冲区的大小。netperf显示的是它们在连接开始时的状态。您可以使用"omni output selectors“让它显示连接结束时的内容。

$ netperf -O?| grep -e "LRSSR_SIZE“LSS_SIZE_REQ LSS_SIZE LSS_SIZE_END LSR_SIZE_REQ LSR_SIZE LSR_SIZE_END RSS_SIZE_REQ RSS_SIZE RSS_SIZE_END RSR_SIZE_REQ RSR_SIZE RSR_SIZE_END

LSS =本地套接字发送RSR =远程套接字接收_REQ是请求值_END是测试结束时的值

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64253878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档