2

次の設定があるとします。

2 つの KVM VM ( VM1VM2 )、仮想ブリッジvirbr、および 2 つのブリッジ タップvTAP1vTAP2を実行するホスト。VM はそれぞれ vTAPS に接続されます。

ブリッジ上のさまざまな負荷メトリックを測定するアプリケーションをホスト上で実行しています。これを実現するには、測定のためにブリッジを介して vTAP 間でパケットをストリーミングするために、vTAPS を取得する必要があります。問題
は 、ioctl TUNSETIFF syscall がEBUSY errnoで失敗するため、vTAPS を取得できないことです。アプリケーション(ホスト上で実行される)がタップ(VMが所有する)の所有者ではない ために発生すると思います。VM vTAPS 間のフローを直接測定したい場合があるため、測定用に新しい一時ブリッジ vTAPS を追加することが常に解決策になるとは限りません。試みられた解決策:あります

マルチキュー tuntap インターフェイス:

Linux は、複数のファイル記述子 (キュー) を使用してパケットの送受信を並列化できるマルチキュー tuntap をサポートしています。デバイスの割り当ては以前と同じで、ユーザーが複数のキューを作成したい場合は、同じデバイス名の TUNSETIFF を IFF_MULTI_QUEUE フラグで何度も呼び出す必要があります。

IFF_MULTI_QUEUEを使用すると、ioctlがEBUSY errno で失敗することはなくなりましたが、vTAP への書き込みシステムコールでEINVAL errno で失敗し始めました。それで根本的な解決にはなりませんでした。

助けていただければ幸いです、ありがとう。

4

0 に答える 0