我一直在测试网络吞吐量和延迟,想知道我的测量结果是否符合预期。在测试中,我使用 Fedora 17 作为主机和客户机,使用内核 3.5.2-3.fc17.86_64。
从主机 ping 局域网上的外部服务器,使用千兆接口,结果如下:
# ping -c 10 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_req=1 ttl=64 time=0.109 ms
64 bytes from 172.16.1.1: icmp_req=2 ttl=64 time=0.131 ms
64 bytes from 172.16.1.1: icmp_req=3 ttl=64 time=0.145 ms
64 bytes from 172.16.1.1: icmp_req=4 ttl=64 time=0.116 ms
64 bytes from 172.16.1.1: icmp_req=5 ttl=64 time=0.110 ms
64 bytes from 172.16.1.1: icmp_req=6 ttl=64 time=0.114 ms
64 bytes from 172.16.1.1: icmp_req=7 ttl=64 time=0.112 ms
64 bytes from 172.16.1.1: icmp_req=8 ttl=64 time=0.117 ms
64 bytes from 172.16.1.1: icmp_req=9 ttl=64 time=0.119 ms
64 bytes from 172.16.1.1: icmp_req=10 ttl=64 time=0.128 ms
--- 172.16.1.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8999ms
rtt min/avg/max/mdev = 0.109/0.120/0.145/0.011 ms
从客户机 ping 局域网上的同一外部主机,延迟似乎要高得多:
# ping -c 10 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_req=1 ttl=64 time=0.206 ms
64 bytes from 172.16.1.1: icmp_req=2 ttl=64 time=0.352 ms
64 bytes from 172.16.1.1: icmp_req=3 ttl=64 time=0.518 ms
64 bytes from 172.16.1.1: icmp_req=4 ttl=64 time=0.351 ms
64 bytes from 172.16.1.1: icmp_req=5 ttl=64 time=0.543 ms
64 bytes from 172.16.1.1: icmp_req=6 ttl=64 time=0.387 ms
64 bytes from 172.16.1.1: icmp_req=7 ttl=64 time=0.348 ms
64 bytes from 172.16.1.1: icmp_req=8 ttl=64 time=0.364 ms
64 bytes from 172.16.1.1: icmp_req=9 ttl=64 time=0.345 ms
64 bytes from 172.16.1.1: icmp_req=10 ttl=64 time=0.334 ms
--- 172.16.1.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8999ms
rtt min/avg/max/mdev = 0.206/0.374/0.543/0.093 ms
(测试期间,局域网、主机和客户机均处于空闲状态。)
vhost_net 和 macvtap 模块已加载到主机上,并且 qemu 使用 -netdev vhost=on 选项启动(由 libvirtd 启动)。
这是预料之中的正常现象吗?还是其他人看到的延迟更好?我可以尝试任何方法改善它吗?其他人看到的延迟是多少?
答案1
已加载模块并不代表 VM 配置良好。您测试的 VM 究竟是如何设置的?
使用 RHEL 5、桥接和 virtio_net,我在物理主机之间获得约 0.1ms 的延迟,在虚拟机内部 ping 时获得约 0.18ms 的延迟。简单的桥接,没有优化或更改,以及相当旧的 RHEL 5 堆栈。