我有一个在vvm上使用virtio-net运行的
linux vm,我想查看链接速度.我怎样才能做到这一点?
到目前为止我尝试了什么:
# ethtool eth0 Settings for eth0: Link detected: yes
似乎ethtool不支持virtio-net(但是?)我有debian jessie的版本3.16-1,ethtool是否支持更新版本?接缝版本6是最新版本.
# cat /sys/class/net/eth0/speed cat: /sys/class/net/eth0/speed: Invalid argument # lspci | grep -iE --color 'network|ethernet' 00:12.0 Ethernet controller: Red Hat,Inc Virtio network device # lshw -class network *-network description: Ethernet interface product: Virtio network device vendor: Red Hat,Inc physical id: 12 bus info: pci@0000:00:12.0 logical name: eth0 version: 00 serial: 4e:ff:a8:bf:61:12 width: 32 bits clock: 33MHz capabilities: msix bus_master cap_list rom ethernet physical configuration: broadcast=yes driver=virtio_net driverversion=1.0.0 ip=172.30.2.152 latency=0 link=yes multicast=yes resources: irq:10 ioport:c080(size=32) memory:febf2000-febf2fff memory:febe0000-febeffff
解决方法
Virtio是一个半虚拟化驱动程序,这意味着操作系统和驱动程序都知道它不是物理设备.驱动程序实际上是guest虚拟机和虚拟机管理程序之间的API,因此它的速度完全与任何物理设备或以太网标准断开连接.这是一件好事,因为这比虚拟机管理程序假装成一个物理设备并应用任意“链接速度”概念更快. VM只是将帧转储到总线上,它是处理物理设备的主机工作;不需要vm知道或关心主机物理设备的链接速度.
这样做的一个优点是
当数据包在同一主机上的2个VM之间移动时,它们可以像主机的cpu一样快地将数据包从一组内存移动到另一个内存,这里设置一个链接速度只是放入一个不需要的速度限制.
这还允许主机进行适配器组合并跨多个链路传播流量,而不需要显式配置每个VM以获得设置的全部带宽.
如果您想知道实际将数据从VM传输到更远的位置有多快,您需要使用iperf等工具进行实际吞吐量测试