Linux

獲取 virtio-net 網路適配器的連結速度

  • July 9, 2019

我有一個使用 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.

引用自:https://serverfault.com/questions/738840