web-dev-qa-db-ja.com

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 に問題を説明するリンクが1つ見つかりましたが、残念ながらそれを読むためのサブスクリプションがありません。

4
ddio

Virtioは準仮想化ドライバーです。つまり、OSとドライバーは、それが物理デバイスではないことを認識しています。ドライバーは実際にはゲストとハイパーバイザー間のAPIであるため、速度は物理デバイスやイーサネット標準から完全に切り離されています。

これは、物理デバイスのふりをして、任意の「リンク速度」の概念をフローに適用するハイパーバイザーよりも高速であるため、良いことです。

VMはフレームをバスにダンプするだけであり、物理デバイスを処理するのはホストの仕事です。VMでリンクを認識したり気にする必要はありませんホストの物理デバイスの速度です。

これの利点の1つは、同じホスト上の2つのVM間でパケットが移動するときに、ホストのCPUがメモリのセット間でパケットを移動するのと同じ速さでパケットを送信できることです。ここで「リンク速度」を設定すると、不要な速度制限。

これにより、ホストはアダプターのチーミングを実行し、すべてのVMを明示的に構成してセットアップの全帯域幅を取得する必要がないため、トラフィックを複数のリンクに分散させることができます。

実際にVMから別の場所にデータを転送できる速度を知りたい場合は、iperfなどのツールを使用して実際のスループットテストを行う必要があります。

12
Nath

私が最近この問題に取り掛かり、VMでethtoolを実行するときの速度の詳細の欠如にも混乱していたため、これについて少し詳しく説明します。

$ ethtool eth0
Settings for eth0:
    Link detected: yes

lshwの出力を調べたところ:

$ lshw -class network -short
H/W path            Device      Class          Description
==========================================================
/0/100/3                        network        Virtio network device
/0/100/3/0          eth0        network        Ethernet interface

これは、このVM=に使用されているデバイスドライバーが仮想化されていることを示しています。この場合、これはVMで実行中KVMしたがって、VMは、「ハードウェア」とのすべてのやり取りにvirtio_ *ドライバーを使用しています。

$ lsmod | grep virt
virtio_rng             13019  0
virtio_balloon         13864  0
virtio_net             28096  0
virtio_console         28066  1
virtio_scsi            18453  2
virtio_pci             22913  0
virtio_ring            22746  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi
virtio                 14959  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi

これらのカーネルモジュールは、特定のOS(Linux、BSD、およびWindows)で使用できます。これらのドライバーがVMにインストールされている場合、VMのカーネルは、ハイパーバイザーで実行されているカーネルを介して、基盤となるハードウェアに特別にアクセスできます。

ハイパーバイザーには2つの異なるタイプがあることに注意してください。 ESX/vsphere が考慮されます type-1 。タイプに関する注意:

  • タイプ1、ネイティブまたはベアメタルハイパーバイザー
  • タイプ2またはホスト型ハイパーバイザー

[〜#〜] kvm [〜#〜] はタイプ2に似ていますが、virtio_ *など、タイプ1のように動作し、実行するいくつかの要素がありますハイパーバイザーの基盤となるLinuxカーネルを仮想化に公開し、VMがそれに直接アクセスできるようにします。

NICの速度は?

paravirtualized ハイパーバイザーで実行している場合、ethtoolを使用してNICの理論上の速度を確認するには、実際のハイパーバイザーに移動する必要があります。その代わりに、iperfを使用してNIC負荷をかけた状態でベンチマークを行い、NICの速度がどのように見えるかを実験的に確認することなどによってのみ確認できます。

たとえば、ここには2つのサーバーがあり、2つの異なるハイパーバイザーで実行されています。両方のサーバーでiperfを使用:

$ Sudo yum install iperf

次に、Host1 VMで1つのサーバーをiperfサーバーとして実行します。

Host1$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------ 

次に、クライアントでVM Host2:

Host2$ iperf -c 192.168.100.25
------------------------------------------------------------
Client connecting to 192.168.100.25, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.100.101 port 55854 connected with 192.168.100.25 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

Host1の出力では、次のようになります。

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.100.25 port 5001 connected with 192.168.100.101 port 55854
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

ここでは、NICが8.60Gbits/secまで向上できたことがわかります。

2
slm

Cumulus Networksは、virtio_netドライバーの速度を設定するパッチをアップストリームしました。これは、Cumulus VX VM製品のネットワークシミュレーションで役立ちます。

パッチはUbuntu Xenialにあります。今日のFedoraにあるかどうかはわかりません。

詳細については、こちらをご覧ください。 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1581132

もう1つの参考資料は、virtioドライバーに速度設定があると便利な理由に関する私のブログ投稿です。

http://linuxsimba.com/network-bonds-vagrant-libvirt

1
linuxsimba