网络延迟测量(Linux)


8

我想测量SNMP GET请求的网络延迟。有一个免费的命令行工具time,可用于查找各种命令的计时统计信息。例如,可以通过snmpget以下方式使用它:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

根据该手册,统计信息包括:

  • 调用和终止之间经过的实时时间,

  • 用户CPU时间(

    times(2)返回的结构tms 中的tms_utime和tms_cutime值的总和),

  • 系统CPU时间(

    times(2)返回的结构tms中tms_stime和tms_cstime值的总和)。

如您所见,这些选项均无法测量实际网络延迟时间(不包括其他程序执行时间统计信息)。有什么办法吗?也许不使用时间工具,而是使用一些内核技巧?

在开始编写自己的程序之前,我想问一下。

谢谢,皮奥特

Answers:


5

tcpdump(8)程序的-ttt标志可能就是您所需要的:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

行开头的时间戳显示自上一个数据包以来的时间(以微秒为单位)。通过-t在命令行上提供不同数量的,您可以获取绝对时间,自第一个数据包以来的相对时间或数据包之间的相对时间。

我刚刚显示了随机的Mdn和网络流量,因为在我的系统上很容易找到它。您可以轻松地过滤SNMP流量,tcpdump(8)从而仅获取您感兴趣的数据包。(这是个好主意,因为从繁忙的系统中转储所有流量会产生巨大的负载。)


-ttttt也可能很有用-它不显示自上一个数据包以来的微秒,而是显示自跟踪开始以来的微秒。
Alex D

8

尝试ping:

$ ping -U 192.168.1.3

从ping手册中:

-U打印完整的用户到用户延迟(旧的行为)。通常ping命令会打印网络往返时间,由于DNS故障,时间可能有所不同。


感谢您的回答,但是我想测量特定于SNMP get请求的延迟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.