Linux
獲取 virtio-net 網路適配器的連結速度
我有一個使用 virtio-net 在 kvm 上執行的 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
我在redhat kb中找到了一個描述問題的連結,但不幸的是我沒有訂閱來閱讀它。
Virtio 是半虛擬化驅動程序,這意味著作業系統和驅動程序都知道它不是物理設備。驅動程序實際上是來賓和管理程序之間的 API,因此它的速度與任何物理設備或乙太網標準完全斷開。
這是一件好事,因為這比虛擬機管理程序假裝為物理設備並應用任意“連結速度”概念來進行流動要快。
VM 只是將幀轉儲到匯流排上,而主機的工作是處理物理設備;虛擬機不需要知道或關心主機物理設備的連結速度是多少。
這樣做的一個優點是,當數據包在同一主機上的 2 個虛擬機之間移動時,它們可以像主機的 CPU 將它們從一組記憶體移動到另一組記憶體一樣快地發送數據包,在這裡設置“連結速度”只是放入一個不必要的速度限制。
這還允許主機進行適配器組合併跨多個鏈路傳播流量,而無需明確配置每個 VM 以獲得設置的全部頻寬。
如果您想知道實際將數據從 VM 傳輸到另一個位置的速度有多快,您需要使用
iperf
.