第5章 OpenvSwitchDPDK を使用したインスタンス Open vSwitch インターフェイスでの TX ドロップ


この手順を使用して、インスタンス vhost-user (VHU) インターフェイスでの送信ドロップのトラブルシューティングを行います。

5.1. 現象

パケットは、カーネルまたは qemu プロセスを通過せずに、virtio トランスポートを使用して vswitch からゲストに送信されます。これは、VHU インターフェイスとパケットを交換することによって行われます。

VHU は、ほとんどの場合、パケットのバッチを送受信する機能も提供する DPDK librte_vhost によって実装されます。VHU のバックエンドは、仮想マシンとパケットを交換するために qemu によって提供される virtio リングです。virtio リングには、記述子とバッファーで設定される特別な形式があります。

TX/RX (送信/受信) 統計は OpenvSwitch (OVS) 用です。これは、送信統計が VM の受信統計に直接関連していることを意味します。

VM がパケットを十分に高速に処理しない場合、OVS TX キューはオーバーフローし、パケットをドロップします。

5.1.1. パケットドロップの説明

飽和した virtio リングにより、vhost-user デバイスで TX ドロップが発生します。virtio リングはゲストのメモリーにあり、vhost-user がパケットをプッシュして VM がパケットを消費するキューのように機能します。VM がパケットを消費するのに十分な速度でない場合、virtio リングはバッファーを使い果たし、vhost-user はパケットをドロップします。

Perf および Ftrace ツールを使用して、パケットドロップのトラブルシューティングを行います。

  • Perf を使用して、スケジューラースイッチの数をカウントします。これにより、qemu スレッドがプリエンプトされたかどうかを確認できます。
  • Ftrace を使用して、プリエンプションの理由と所要時間を表示します。

プリエンプションの理由は次のとおりです。

  • 時間割り込み (カーネルティック):

    これらは、少なくとも 2 つのコンテキストスイッチのコストを追加します。タイマー割り込みは、予測できない時間がかかる可能性のあるリードコピー更新 (RCU) コールバックを実行することもできます。

  • CPU パワー管理とハイパースレッディング

これらのツールは、次のパッケージに含まれています。

  • PERF: perf rpm in rhel-7-server-rpms/7Server/x86_64.詳細は、About Perf を参照してください。
  • FTRACE: trace-cmd info rhel-7-server-rpms/7Server/x86_64.詳細は、About Ftrace を参照してください。

5.1.2. 他のドロップの説明

OVS 2.9 より前は、vHost ユーザーポートは dpdkvhostuser モードで作成されていました。このモードでは、OVS が vhost サーバーとして機能し、QEMU がクライアントとして機能します。インスタンスがダウンまたは再起動すると、OVS ブリッジの vhost ユーザーポートはアクティブなままで、VM 宛てのパケットをドロップします。これにより、tx_drop_counter が増加します。

次の例では、VM は nova stop <UUID> で停止されました。

[root@overcloud-compute-0 network-scripts]# ovs-vsctl list interface vhubd172106-73 | grep _state
admin_state         : up
link_state          : down
Copy to Clipboard Toggle word wrap

これは、ip link set dev <br internal port name> がダウンした状態でカーネルポートがシャットダウンされ、フレームがユーザースペースにドロップされた場合に発生することと似ています。

VM が起動すると、同じ vhu ソケットに接続し、virtio リングバッファーを空にし始めます。TX が中断されることはなくなり、通常のネットワークトラフィックが再開されます。

5.1.3. DPDK の TX および RX キューの長さを増やす

以下の OpenStackDirector テンプレートの変更により、DPDK の TX および RX キューの長さを変更できます。

NovaComputeExtraConfig:
        nova::compute::libvirt::rx_queue_size: '"1024"'
        nova::compute::libvirt::tx_queue_size: '"1024"'
Copy to Clipboard Toggle word wrap

次の例は、検証チェックを示しています。

[root@overcloud-compute-1 ~]# ovs-vsctl get interface vhu9a9b0feb-2e status
{features="0x0000000150208182", mode=client, num_of_vrings="2", numa="0",
socket="/var/lib/vhost_sockets/vhu9a9b0feb-2e", status=connected, "vring_0_size"="1024",
"vring_1_size"="1024"}

[root@overcloud-compute-1 ~]# virsh dumpxml instance-00000017 | grep rx
<driver rx_queue_size='1024' tx_queue_size='1024'/>
<driver rx_queue_size='1024' tx_queue_size='1024'/>
Copy to Clipboard Toggle word wrap

カーネルの制限により、キューサイズを 1024 を超えて増やすことはできません。

注記

DPDK を介した neutron ネットワークで PXE ブートを使用できるようにする場合は、PXE バージョンが 1024 バイトをサポートしていることを確認する必要があります。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat