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つ見つかりましたが、残念ながらそれを読むためのサブスクリプションがありません。
Virtioは準仮想化ドライバーです。つまり、OSとドライバーは、それが物理デバイスではないことを認識しています。ドライバーは実際にはゲストとハイパーバイザー間のAPIであるため、速度は物理デバイスやイーサネット標準から完全に切り離されています。
これは、物理デバイスのふりをして、任意の「リンク速度」の概念をフローに適用するハイパーバイザーよりも高速であるため、良いことです。
VMはフレームをバスにダンプするだけであり、物理デバイスを処理するのはホストの仕事です。VMでリンクを認識したり気にする必要はありませんホストの物理デバイスの速度です。
これの利点の1つは、同じホスト上の2つのVM間でパケットが移動するときに、ホストのCPUがメモリのセット間でパケットを移動するのと同じ速さでパケットを送信できることです。ここで「リンク速度」を設定すると、不要な速度制限。
これにより、ホストはアダプターのチーミングを実行し、すべてのVMを明示的に構成してセットアップの全帯域幅を取得する必要がないため、トラフィックを複数のリンクに分散させることができます。
実際にVMから別の場所にデータを転送できる速度を知りたい場合は、iperf
などのツールを使用して実際のスループットテストを行う必要があります。
私が最近この問題に取り掛かり、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 。タイプに関する注意:
[〜#〜] kvm [〜#〜] はタイプ2に似ていますが、virtio_ *など、タイプ1のように動作し、実行するいくつかの要素がありますハイパーバイザーの基盤となるLinuxカーネルを仮想化に公開し、VMがそれに直接アクセスできるようにします。
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まで向上できたことがわかります。
Cumulus Networksは、virtio_netドライバーの速度を設定するパッチをアップストリームしました。これは、Cumulus VX VM製品のネットワークシミュレーションで役立ちます。
パッチはUbuntu Xenialにあります。今日のFedoraにあるかどうかはわかりません。
詳細については、こちらをご覧ください。 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1581132
もう1つの参考資料は、virtioドライバーに速度設定があると便利な理由に関する私のブログ投稿です。