gpt4 book ai didi

c++ - 使用 C++ 测量跨网络的 2 个应用程序之间的数据传输速率(带宽),如何获得无偏见和准确的结果?

转载 作者:太空狗 更新时间:2023-10-29 23:08:19 25 4
gpt4 key购买 nike

我正在尝试测量 2 个模拟应用程序(用 C++ 编写)之间的 IO 数据传输速率(带宽)。我创建了一个非常简单的 perfclient 和 perfserver 程序,只是为了在实际应用程序中实现这种计算方法之前验证我计算网络带宽的方法是否正确。所以在这种情况下,我需要以编程方式进行(不使用 Iperf)。

我尝试在各种域(本地主机、连接到以太网的计算机和连接到无线连接的计算机)上运行我的 perfclient 和 perfserver 程序。然而,我总是在这些不同的主机上获得相似的带宽,大约 1900 Mbps(使用 1472 字节的数据大小进行测试)。这是一个合理的结果,还是我可以获得更好、更准确的带宽?

我应该使用 1472(这是以太网 MTU,不包括 header )作为每个 send() 和 recv() 的最大数据大小,为什么/为什么不呢?我还尝试使用不同的数据大小,这是我获得的平均带宽(使用以太网连接测试),这对我来说没有意义,因为数字超过了 1Gbps 并达到了大约 28 Gbps。

SIZE    BANDWIDTH
1KB 1396 Mbps
2KB 2689 Mbps
4KB 5044 Mbps
8KB 9146 Mbps
16KB 16815 Mbps
32KB 22486 Mbps
64KB 28560 Mbps

这是我目前的做法:
我做了一个基本的乒乓时尚循环,其中客户端不断地向服务器程序发送字节数据流。服务器将读取这些数据,并将数据反射(reflect)(发送)回客户端程序。然后客户端将读取那些反射数据(2 路传输)。上述操作重复 1000 次,然后我将时间除以 1000 得到平均延迟时间。接下来,我将平均延迟时间除以 2,得到 1 路传输时间。然后可以计算带宽如下:

bandwidth = total bytes sent / average 1-way transmission time

我的做法有什么问题吗?我怎样才能确保我的结果没有偏差?一旦我做对了,我将需要在我的原始应用程序(不是这个简单的测试应用程序)中测试这个方法,我想把这个性能测试结果写成一篇科学论文。

编辑:我已经解决了这个问题。查看我在下面发布的答案。

最佳答案

除非你需要重新发明轮子iperf就是为了处理这个问题。

Iperf was developed by NLANR/DAST as a modern alternative for measuring maximum TCP and UDP bandwidth performance. Iperf allows the tuning of various parameters and UDP characteristics. Iperf reports bandwidth, delay jitter, datagram loss.

关于c++ - 使用 C++ 测量跨网络的 2 个应用程序之间的数据传输速率(带宽),如何获得无偏见和准确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10173517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com