web-dev-qa-db-ja.com

VM

TL; DR

(1)最初の2つのVFのみがVMに転送されます

そして

(2)VMへのトラフィックはありません。

セットアップ

  • ホストはUbuntu16.04です
  • PCIe経由で接続されたIntel82599(SR-IOVをサポート)
  • ドライバーixgbe
  • ゲストVMはUbuntu16.10です
  • ハイパーバイザーとしてKVM)でLibvirtを使用する

処理する

SR-IOV機能を利用しようとしています。両方のNICでsriov_numvfsを4に更新すると、NICごとに4つのVFが取得されます。 VMを実行し、Intel82599の両方のNICに接続します。

トラフィックジェネレータを使用してセットアップをテストします。

問題

VMを実行する前に、ixgbeドライバーはホストにさらに8つのリンク(VFごとに1つ)を作成します。これらはすべてip linkに表示され、状態が停止しています。 VMアクティベーション後、2つのVF(各NICの最初のVF、機能0を意味する)のみがVMに転送されます。

変更前VMアクティベーション

  • ホストでlspciをチェックすると、PCIバス上のNICとすべてのVFの両方が表示されます。
  • ホストでip linkをチェックすると、ドライバーによって作成された8つのリンクすべて(割り当てられたMACアドレスで状態が停止)と両方のカードNICが表示されます。

後VMアクティベーション

  • ホストでlspciをチェックすると、PCIバス上のNICとすべてのVFの両方が表示されます。
  • ゲストでlspciをチェックすると、転送された2つのVFのみが表示されます。
  • VMアクティベーション後にホストでip linkをチェックすると、ドライバーによって作成された残りの6つのリンク(MACアドレスが割り当てられている)が表示され、両方のカードNICとすべてのVF(MACアドレスが割り当てられている)が表示されます)。
  • ゲストでip linkをチェックすると、VFに接続されている2つのNICが表示されます(MACアドレスを使用-正しく、HWと一致します)。
  • ホスト(両方のNICのvirsh net-dumpxml)でlibvirtをチェックすると、VMにソートおよび接続された8つのVFすべてが表示されます。

だが...

VMへのトラフィックはありません。

VMから外部へのトラフィックがあります。

何か案は?

それに取り組んでいます

1

this リンクに続いて、ドライバーの自動化プロセスをバイパスしようとすると、VMは、2つのカードNICへの2つのブリッジネットワークで開始されます。VMは正常に上昇し、両方のNICからのトラフィックがあります。次に、virsh attach-deviceコマンドを使用して新しいデバイスが追加され、コマンドが正常に実行されます。最初に、XMLファイルにはVFのPCIアドレスのみが含まれます。明らかな変更はありません。 VMで明らかであり、ip linkでも、lspci...でもありません。--configフラグが立てられたため、再起動後に状態が再度チェックされ、再び何もチェックされません。 NIC(PF)のPCIアドレスが明示的に追加され、VFMACアドレスも明示的に指定されます。明示的なパラメーターを指定したvirsh attach-deviceの後-まだ何もありません。

2

基本的に、 this リンクに続いて、PCIデバイスはホストから手動で切り離され、VMに挿入されます。最終的な結果として、PCIeカードはvHBAではなく、その結果NPIV互換ではなくなり( ここ を参照)、それに応じてエラーメッセージが通知されます。

3

別のアプローチは、説明されているように、passthrough転送モードを使用することです ここ 。これは、一度に1つのNIC)へのvNICアクセスを意図的に1つだけ許可するため(そして全体の目的はSR-IOV機能を利用することです)、望ましい作業モードではありません。 hostdev転送モードと同様:NIC nameがpfディレクティブに記述されている場合、基本的なブリッジのように機能し、VF名が記述されている場合pfディレクティブには何もありません。

4

パススルーアプローチと同様に、MACvTapアプローチがあり、 ここここ および ここ で説明されています。これは適用されません。 ixgbeドライバーはVFリンク名を設定するため、処理が異なります。 VFの名前をインターフェイスとして指定するオプションはありません。インターフェイス名を指定すると、passthrough転送モードと同様にインターフェイスが渡されます。これは、ドライバーバージョン、カーネルバージョン、libvirtバージョン、またはそれらの組み合わせが原因である可能性があります。

5

SFPの変更も役に立たないようです。いくつかの異なるモデルに変更されましたが、電力を受け取り、リンクがアップしていた(PCIeバスに表示されていた)ものを除いて、Intelカードでは機能しませんでしたが、ixgbeドライバーによって検出されませんでした。他のカーネルモジュールもインターフェースも作成されませんでした。

1
somethingorange

プロセッサを利用するために使用されるカーネルパラメータは、他のプロセッサが設定されているものとは少し異なっていました。

パラメータをいじってみると、両方の問題が解決しました。

基本的な考え方は、カーネル(IntelまたはAMD)でSR-IOV機能をアクティブにし、カーネルパラメーターを渡して「パススルー」モードに設定することです。

その他のカーネルパラメータオプションについては、 this リンクを使用してください。

0
somethingorange