我们在大学里做了一些虚拟机(citrix-xen)/真机testing,并且碰到了一个奇怪的行为。 我们使用netperf的streamtesting来衡量两台机器之间的性能。 两者都导致相同的值为940 mbit,但是/proc/net/dev的输出是不同的:
117 MB/sec vs. 112 MB/sec.
我试图用VirtualBox在家里重现这种情况。 我用虚拟机和虚拟机主机上的nload了显示的stream量。
当使用仿真的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
值不匹配 。 所以罪魁祸首似乎是半虚拟化的networking设备。 有人知道这个问题吗? 我猜,通常从/proc/dev/net列出的“字节”是用于以太网帧,当使用半虚拟化设备时,它只列出数据包的字节(无标题),因为VM主机执行整个数据包处理?
thx任何build议:)
EDIT1:
我只是用wireshark进行一些testing。 Wireshark说:1514字节在线,一个数据包包含1448字节的数据。 从1448开始,需要乘以1,0456(大约)。 当从上面乘以102 MB时,我们得到106.7 MB =>〜107 MB
似乎certificate半虚拟化networking在/proc/net/dev跳过了头字节
EDIT2:
我不问半虚拟化networking是否比模拟networking快。 我已经知道这是一个给定的。 从我提到的值中可以看出, 两种情况下的stream量均为 107 MB /秒(当然,CPU使用率不同)。
但是/proc/net/dev 在VM中列出了不同的值 。 在主机内,两个值都是一样的! 所以我问在/proc/net/dev/列出不同的值(例如没有数据包标题)使用半虚拟化networking驱动程序时。
是。 虚拟networking设备可以通过NIC发送比通告的速度更快的数据。
您也可以通过本地主机进行基准testing来了解这一点。
关于虚拟networking基准testing和故障诊断的一些很好的参考