![virtio /proc/net/dev](https://linux22.com/image/561703/virtio%20%2Fproc%2Fnet%2Fdev.png)
我们在大学里做一些 VM(citrix-xen)/真实机器基准测试,遇到了一个奇怪的行为。我们使用 netperf 的流测试来测量两台机器之间的性能。两者的结果都是相同的 940 mbit,但输出/proc/net/dev
不同:
117 MB/sec vs. 112 MB/sec.
nload
我尝试在家中使用 VirtualBox 重现这种情况。我测量了虚拟机上显示的流量和在虚拟机主机上。
使用模拟的1000mbit设备时:
vm says: 107 MB/sec
vm host says: 107 MB/sec
两个值匹配. 到目前为止一切顺利。但是当使用 virtio-net 设备时:
vm says: 102 MB/sec
vm host says: 107 MB/sec
价值不匹配。所以罪魁祸首似乎是半虚拟化网络设备。有人知道这个问题吗?我猜,通常列出的“字节”是/proc/dev/net
针对以太网帧的,当使用半虚拟化设备时,它只列出数据包的字节(没有报头),因为 VM 主机会处理整个数据包?
谢谢任何建议:)
编辑1:
我刚刚使用 wireshark 进行了一些测试。Wireshark 说:线路上有 1514 个字节,一个数据包包含 1448 个字节的数据。要从 1448 得到这个数字,需要乘以 1,0456(大约)。当从上面乘以 102 MB 时,我们得到 106,7 MB => ~107 MB
=> 似乎可以证明半虚拟化网络跳过了/proc/net/dev
编辑2:
我是不是询问半虚拟化网络是否比模拟网络更快。我已经知道这是肯定的。从我提到的值可以看出,流量两个都情况下为 107 MB/秒(当然 CPU 使用率不同)。
但/proc/net/dev
列表VM 内的不同值。在主机内,两个值是相同的!所以我想问的是,/proc/net/dev/
在使用半虚拟化网络驱动程序时是否会列出不同的值(例如没有数据包头)。
答案1
是的。虚拟网络设备可以以比 NIC 宣传的速度更快的速度发送数据。
您还可以通过本地主机对此进行基准测试来查看这一点。
有关虚拟网络基准测试和故障排除的一些重要参考: