问题标签 [iperf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2045 浏览

linux - iperf 2 挂起多个 udp 流

当我使用多个线程运行 iperf UDP 测试时,它只是挂起。它永远不会回来。但是相同的测试总是成功地完成单个流。这是我的 iperf 版本和详细信息:

客户端 (10.20.32.50) 命令:$ iperf -c 10.20.32.52 -P 2 -t 10 -u -b 1g

服务器 (10.20.32.52) 命令:$ iperf -s -u

客户端给出以下输出并且永远不会完成

服务器输出如下

我的两台客户端/服务器机器都是 32 核,速度为 10 Gbps。请注意,客户端在单线程/流中运行良好,即$ iperf -c 10.20.32.52 -P 1 -t 10 -u -b 1g始终完成。任何帮助表示赞赏!

这个问题最初是作为对类似问题 [1] 的回答而提出的,但使用的是 iperf3。在收到建议后,我提出了一个单独的问题。

诺迪尔

[1] https://stackoverflow.com/questions/31836985/iperf3-parallel-udp-not-running/32728777

0 投票
2 回答
6554 浏览

linux - 基于 IPv6 的 iperf UDP

我正在通过 IPv6使用 iperf ( https://iperf.fr/ ) 进行一些 UDP 带宽测试。使用带有以下命令行的 Linux UDP 客户端时,我的结果非常糟糕:

调查 Wireshark 的问题我发现客户端发送数据时存在一些碎片。更准确地说,我看到 UDP 客户端传出的数据包大小为 1510 字节和 92 字节,交替出现。例如,我看到的 UDP 数据包具有以下模式(大小):1510、92、1510、92、1510、92、...、1510、92、...

阅读 iperf2 文档我为选项 (-l) 阅读了以下内容:

要读取或写入的缓冲区的长度。iPerf 通过多次写入一个 len 字节数组来工作。TCP 的默认值为 8 KB,UDP 的默认值为 1470 字节。请注意,对于 UDP,这是数据报大小,在使用 IPv6 寻址时需要将其降低到 1450 或更少以避免碎片。另请参见 -n 和 -t 选项。

我尝试通过将 Linux iperf UDP 客户端命令行替换为以下内容来进行相同的带宽测试:

我看到了很好的结果。看着 Wireshark 捕获,我再也看不到碎片了。

在 IPv4 上进行相同的测试我不需要更改默认的 UDP 数据报大小(我不需要使用 '-l' 选项)以获得良好的结果。

所以我的结论是分片(通过 IPv6)是造成带宽性能不佳的原因。

无论如何,我想知道在通过 IPv6 将 UDP 数据报大小设置为 1450 时会发生什么。为什么使用 UDP 数据报大小的默认值在 IPv6 上而不是在 IPv4 上进行分段?此外,为什么我将UDP数据报大小减小到1450时没有碎片?

谢谢你。

0 投票
0 回答
1350 浏览

networking - 从带宽确定2台主机之间的吞吐量?

我正在使用 mininet,我必须使用 iperf 观察两台主机之间的吞吐量。

我不明白的是如何确定实际吞吐量,因为在这里我得到了带宽作为结果。

这是我设置拓扑的方式:

如何从上面的结果中获得吞吐量?

0 投票
3 回答
1367 浏览

networking - iperf 服务器和客户端的区别

如果这是错误的地方,请原谅我 - 这是我的第一篇文章。

我在 Mininet 中建立了一个网络 - 创建了两个具有相同带宽和延迟的节点(带宽:10Mbps,延迟:10ms)。在使用 iperf 进行测试时,我执行以下步骤:

  1. 在节点 1 (10.0.0.2) 上启动 iperf 服务器 iperf -s
  2. 在节点 2 (10.0.0.3) 上启动 iperf 客户端 iperf -c 10.0.0.2
  3. 测试完成

节点 2(客户端)显示带宽为 11.2Mbps,测试时间为 10.4 秒。节点 1(服务器)显示带宽为 9.56Mbps,测试时间为 12.2 秒。客户端和服务器都显示相同的传输大小(13.9Mb)。

这个时差是由于每个单独的数据包的延迟造成的吗?TCP 窗口大小为 85.6 KB,因此为在网络上发送的每个数据包添加 10 毫秒的延迟大致允许差异。但是,我原以为延迟会是 20 毫秒,因为发送端和接收端都有 10 毫秒的网络延迟 - 为什么不是这样?

我希望这是有道理的。

0 投票
0 回答
1030 浏览

iperf - iperf3 似乎在初始连接后卡住了

昨天,我对 iperf3 的测试运行良好。不幸的是,今天似乎建立了初始连接,但之后就冻结了。

在输出下方。

服务器:

客户:

0 投票
1 回答
93 浏览

android - android 使用存储在 assets 文件夹中的 Linux 工具

我想使用默认情况下在 Android 中不可用的 Linux 工具,例如 iw 和 iperf。我看到了使用这个工具的 Android 应用程序(像这样)。有两种方法可以做到这一点。

首先:获取设备的root权限并将工具文件放入文件system/bin/夹。

第二:将工具文件放到assetsAndroid项目的文件夹中并以某种方式使用它。

Play Market 的应用程序使用第二种方式。但我不知道,它是如何完成的。有没有关于第二种方式的实现的描述?

0 投票
0 回答
172 浏览

tcp - iPerf 中 UDP(有时是 TCP)的性能上限

我似乎无法弄清楚我的 iPerf 可执行文件出了什么问题。我正在尝试使用 Telnet 脚本自动执行 iPerf(这是我正在使用的脚本https://github.com/ngharo/Random-PHP-Classes/blob/master/Telnet.class.php)。我想知道我能做些什么来找到瓶颈的原因,假设 PHP 脚本按预期工作。基本上,如果我通过命令行手动运行它,我会获得所需的速率,但是如果我使用脚本远程运行它,我会获得性能上限。

我尝试的是在 iperf 运行时使用 tcpdump 输出日志,然后使用 Wireshark 读取它。我只能观察到使用脚本时片段之间的时间差异更大,这意味着速率会更低。我不知道接下来该做什么。有什么想法我还能看/尝试吗?我尝试使用 sysctl 更改缓冲区大小的内核值,但这没有任何效果,因为手动运行它总是可以正常工作。

请注意,我尝试使用所有 iperf 配置选项,例如 -w、-l、-b(我没有尝试过突发模式)。没有成功。

0 投票
1 回答
391 浏览

java - 在 Java 应用程序中发出执行命令

我正在尝试通过我的 Java 应用程序执行网络测试应用程序。下面是代码:

我收到一条错误消息,提示应用程序无法连接到服务器。但是,当我在命令提示符下执行命令时,没有错误。

我可以知道我在这里错过了什么吗?

0 投票
1 回答
352 浏览

tcp - 为什么如果我在 iperf 中放置一个大的 TCP 窗口会返回错误的测量值?

我想知道当我在 iperf 中放置一个巨大的 TCP 窗口时如何,例如 64MB,不会给我错误,而是给我错误的测量值,例如带宽中的 54Mbits/sec,而我的连接上传速度仅为 1 Mbps。是iperf的bug吗?

我输入命令:iperf -w 64MB -c IPaddress -p and_the_port

我收到了这个:

间隔传输带宽

0.0-10.1sec 65.0MBytes 54.2 Mbits/sec

这是错误的,因为我的连接是:带宽(上/下)[kbps/kbps]:1.023/15.000

0 投票
1 回答
673 浏览

c# - 优雅地杀死 C# 进程不起作用

我有一个产生多个线程的应用程序,其中一个线程运行一个iPerf用于监视网络可靠性的可执行文件。此过程将无限期运行,直到用户尝试关闭窗口。这就是问题所在。我正在尝试优雅地关闭该进程,以便iPerf服务器不会挂起,但我似乎无法使其正常工作。如果我从命令提示符手动运行命令并按 ,我可以很好地关闭它Ctrl+c,但这似乎并不容易以编程方式完成。

我尝试了多种方法,包括process.Kill();process.StandardInput.Close()process.StandardInput.WriteLine("\x3");至,但这些似乎都没有向进程发送正常的关闭消息。process.Kill();导致服务器挂起或下次启动失败,其他两个选项根本不停止服务器。但是手册ctrl+c工作得很好。

这是我的代码片段:

任何帮助是极大的赞赏。谢谢!

更新:

根据 Hans 在评论中的建议,我尝试在代码中添加一些内容以ctrl+c发送事件。

这根本不起作用。该过程仍在运行,并且添加的功能返回false。我确实检查了传递的进程 ID 是否与任务管理器中的进程 ID 匹配。这一切都很好,但是 GenerateConsoleCtrlEvent 函数返回 false。知道为什么会这样吗?