GNU/Linux >> Linux の 問題 >  >> Linux

virtio-net ネットワーク アダプターのリンク速度を取得する

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

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

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

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

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

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


私も最近この問題に取り組み、ethtool を実行したときの速度の詳細が不足していることに半ば混乱していたため、これについて少し詳しく説明します。 VM 上:

$ 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 に使用されているデバイス ドライバーが仮想化されていることを示しています。この場合、これは KVM で実行されている VM であるため、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 はタイプ 1 と見なされます。タイプに関する注意事項:

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

KVM はタイプ 2 に似ていますが、virtio_* などのいくつかの要素があり、タイプ 1 のように動作および実行します。半直接アクセスできます。

NIC の速度は?

準仮想化ハイパーバイザーで実行している場合、実際のハイパーバイザーにアクセスして、ethtool を使用して NIC の理論上の速度を調べる必要があります。 .その代わりに、 iperf を使用するようなことをすることによってのみ見つけることができます 負荷がかかった状態で NIC のベンチマークを行い、実験的に NIC の速度を調べます。

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

$ sudo yum install iperf

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

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

次に、クライアント VM ホスト 2 で:

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/秒に達したことがわかります。


Linux
  1. ネットワーク インターフェイス リンクのステータスと速度を検出するシェル スクリプト (CentOS/RHEL)

  2. プログラムでリンク速度を取得しますか?

  3. LinuxでARM CPUクロック速度を取得するには?

  1. LinuxでNetworkManagerを使い始める

  2. 障害のある(オンボード)ネットワークアダプタを診断する方法は?

  3. Linux Mint を WiFi ネットワークに接続する

  1. Linux – Archでワイヤレスネットワークアダプタを無効にしますか?

  2. Rtl8723beワイヤレスネットワークアダプターを使用してUbuntu16.04から作成されたホットスポットの速度が遅いですか?

  3. Ralink Rt2870ネットワークアダプタ?