第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

これは、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"'

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

[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'/>

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

注記

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

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る