
ご注意 この記事の執筆時点では、DPDKのOVS速度制限は、 メインのOVSブランチでのみ利用可能でした。 メインのOVSブランチのZIPアーカイブをここからダウンロードします 。 DPDKでOVSをインストールする手順は、 ここで説明されています 。
DPDKを使用したOVSの速度制限
速度制限を設定する前に、サービス品質とvSwitchのトラフィックとの相互作用との違いについて話し合う必要があります。
サービス品質は、発信トラフィック、つまりOVSポートから送信されるデータに適用されます。 一方、速度制限は、着信トラフィック、つまりvSwitchポートが受信したデータにのみ適用されます。 速度制限は、インバウンドトラフィックリミッターを使用して、DPDKを使用したOVSで実装されます(DPVSを使用したOVSでサポートされるサービス品質のアウトバウンドトラフィックリミッターと同様)。 着信トラフィックリミッターは、インターフェイス(マーカーバッファーアルゴリズム)で特定の受信速度を超えると、単にパケットをドロップし始めます。 物理デバイスの場合、インバウンドトラフィックリミッターは、ネットワークアダプターを介してシステムの外部から着信するトラフィックを破棄します。 仮想インターフェイス、つまりvhost-user DPDKポートの場合、リミッターはゲストマシンからvSwitchに送信されたトラフィックを破棄します。 実際、ゲストマシンからこのポートへのデータ転送速度は制限されています。 これを図に示します。 1。

図 1. vhost-userポートの着信トラフィックを制限することによる速度制限
テスト環境

図 2.テスト環境
ご注意 この環境で使用されるホストコンピューターと仮想マシン(VM)の両方が、Linuxカーネル* 4.4.6を備えた64ビットバージョンのFedora * 23サーバーを実行しています。 各VMには、vhost-user DPDKインターフェイスを介してvSwitchブリッジに接続された仮想ネットワークアダプターがあります。 仮想ネットワークアダプターは、仮想マシンのオペレーティングシステムでLinuxカーネルデバイス(たとえば、ens0)として表示されます。 仮想マシン間に接続があることを確認します(たとえば、VM1からVM2にエコー要求を送信します)。
速度制限の構成とテスト
セットアップをテストするには、両方のVMにiPerf *をインストールします 。 rpmバージョンがゲストOSバージョンと一致していることを確認してください。 この場合、Fedoraの6564ビットバージョンを使用します。 Fedora 23がFedora 23のdnfなどのパッケージマネージャーを使用する場合、次のコマンドを使用してiPerfを自動的にインストールできます。
dnf install iperf
設定を確認するには、iPerfが両方の仮想マシンにインストールされていることを確認してください。 iPerfは、クライアントモードとサーバーモードで実行できます。 この例では、VM1でiPerfクライアントを起動し、VM2でiPerfサーバーを起動します。
着信トラフィックのリミッターなしでテスト
VM2で、次のコマンドを実行して、ポート8080でUDPモードでiPerfサーバーをデプロイします。
iperf –s –u –p 8080
VM1で、次のコマンドを実行して、ポート8080で帯域幅100 MbpsのUDPモードでiPerfクライアントを展開します。
iperf -c 7.7.7.2 -u -p 8080 -b 100m
この場合、VM1はUDP経由で100 Mbpsの速度でVM2にデータを送信しようとします。 10秒後、一連の値が表示されます。 制限速度を設定する前に、これらのコマンドを実行してください。 図に示すような結果が表示されます。 3.サーバーレポートでは、[帯域幅]列に注目しています。

図 3.着信トラフィックの制限なしで出力
図に示すデータ。 3、仮想マシン間の接続の帯域幅が100 Mbpsであることを示します。
構成された着信トラフィックリミッターでテストする
次のコマンドを使用して、着信トラフィックリミッターvhost-user1を使用して速度制限を10 Mbpsに設定します。
ovs-vsctl set interface vhost-user1 ingress_policing_rate=10000 ingress_policing_burst=1000
以下にオプションを説明します。
- ingress_policing_rate :この仮想マシンに許可される最大速度(Kbps)。 この値は、着信トラフィックリミッターを作成するために必要です。 値を指定しない場合、既存の速度制限設定は変更されません。
- ingress_policing_burst :マーカーバッファーサイズ(キロバイト単位)。 このパラメーターの最小値は、推定される最大パケットサイズに等しくなければなりません。 指定しない場合、デフォルト値の8000 KBが使用されます。
iPerf UDP帯域幅テストを再度実行すると、結果は図5に示す結果と同様になります。 4。

図 4.着信トラフィックが制限された出力
トラフィックリミッターが設定されている場合、利用可能な帯域幅は100 Mbit / sではなく9.59 Mbit / sであることに注意してください。 iPerfプログラムは、UDPトラフィックをVM1クライアントからVM2サーバーに100 Mbpsの速度で送信しましたが、着信トラフィックリミッターが着信vhost-user1 vSwitchポートパスで動作するため、トラフィック速度が低下しました。 このため、iPerf BM1クライアントから送信されるトラフィックの速度は約10 Mbpsに低下しました。
TCPトラフィックを使用する場合、 ingress_policing_burstの値はingress_policing_rateの値のかなりの部分である必要があることに注意してください 。 10%を超えることをお勧めします。 これは、パケットをドロップするときのTCPプロトコルパフォーマンスの低下と、パケットの再送信の問題によるものです。
vhost-user1の既存の速度制限設定は、次のコマンドを使用して取得できます。
ovs-vsctl list interface vhost-user1
vhost-user1のトラフィック速度制限を削除するには、 次に示すように、 ingress_policing_rateパラメーターを0に設定します( ingress_policing_burstパラメーターの値を構成する必要はありません)。
ovs-vsctl set interface vhost-user1 ingress_policing_rate=0
おわりに
この記事では、インバウンドトラフィックリミッターが設定されたDPDKを備えたOpen vSwitch *を介して2つの仮想マシン間でトラフィックが転送される簡単な例を示しました。 特定のDPDKポートの速度制限を設定し、現在の速度制限設定に関する情報を取得し、速度制限をキャンセルするためのコマンドを示しました。
追加情報
速度制限、オプションなどの使用の詳細については、 vswitch.xmlおよびovs-vswitchd.conf.dbの速度制限に関するトピックを参照してください。
質問がありますか? メールディスカッションにOpen vSwitchの要求を送ることができます。
DPDKを使用したOpen vSwitch *の詳細については、Intel Developer ZoneおよびIntel Network Builders Universityサイトの次のビデオおよび記事を参照してください。
- DPDKを使用したOpen vSwitch *のサービス品質の構成と使用
- Open vSwitch * with DPDK:詳細なアーキテクチャ
- DPDK Open vSwitch *:ゲスト接続の高速化
Habrahabrの翻訳記事