我正在尝试测量两台机器之间的单向延迟,我想用它来从一台机器向另一台机器ping
发送ICMP
数据包。数据包之间的间隔应该是 1 微秒 (1us),我想发送 100 万个数据包 (10^6),所以发送这些数据包总共需要 1 秒。
另外,我不关心另一台机器的响应(我只会捕获第二台机器上的数据包并对其进行分析)。
现在我已经尝试过:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 -b 255.255.255.255
我还尝试停用-l
和-f
选项。当我使用较大的值时,-l
我收到警告,提示 rcvbuf 不足以容纳预加载。
我正在使用 tcpdump 捕获从我的机器传出的数据包以及到另一台机器的传入数据包。
问题是数据包之间的间隔大多数情况下在5us到15us之间,或者稍微大一些。
当我直接发送到像谷歌这样的网站时,我遇到了同样的问题:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 google.com
我想要的是:
- 将数据包从一台机器发送到另一台机器
- 第一台机器无需等待任何响应
- 数据包之间的间隔为1us
最好使用ping
命令及其提供的选项(如果足够的话)来执行此操作。我有管理员权限。
更新
我的目标是测量不同电缆对数据包造成的延迟。因此我需要准确的数据包生成和捕获。在硬件方面,我有合适的工具,但我没有得到我所期望的结果。我相信问题出在软件上。
对我来说,问题是当我使用该选项时,ping 似乎无法按预期工作-i
。当我使用时-f -l 1000000
,捕获每 3us 到 5us 发送一次。当我指定-f
或不指定这两个时,每 12ms 生成一次数据包。
通常,我认为我无法控制广播 ping 的数据包距离。
答案1
ping -f
将要不是等待远程方回复。
但是,连续数据包之间的 1us 延迟对于硬件(CPU)和软件(IP 堆栈)组合来说要求太高了。
为了最大限度地提高性能(并最大限度地减少发送延迟),请尝试禁用任何电源管理功能,或者至少使用 CPUperformance
调节器。
答案2
您可能混淆了延迟和吞吐量。只需发送 1 个数据包并测量其延迟即可确定延迟。您所需要的只是一种高精度测量时间的机制。一种方法是 PTP(精确时间协议)- 即发送方将时间戳附加到发送的数据包。对于吞吐量,数据包的大小至关重要 - 默认情况下 ping 的长度为 64 字节。