こんにちは、
SolidRun LX2160A Clearfog CXでDPDKを使ってDPAA2のRSS機能をテストしています。
例えばMPLSラベルやPPPoEの内部IPでハッシュ化できることがわかりました。
しかし、MPLS内部IPアドレスに対してハッシュ化できないようですが、私の理解は正しいでしょうか?
これは少し驚きました。なぜなら:
- MPLSヘッダーが何かを知っているのは、MPLSラベル上でハッシュ化できるからです
- PPPoEの内側IPをハッシュ化できるため、内部IPを取得する方法を知っています
MPLSの内部IPでハッシュ化がサポートされているかどうか確認してもらえますか?
私はNXP DPAA2やNXP全般についてかなり初心者なので、技術的な言葉を教えてもらえますか?
ありがとうございます。
はい — あなたの理解は、今日testpmdで使われているDPDK DPAA2 PMDに関して正しいです。MPLSラベル自体でのハッシュ処理はサポートされており、PPPoE後の内側IPでのハッシュも動作しますが、MPLSの内側IP RSSはすぐに使えるDPDK RSSモードとして明確に公開されていません。
重要なニュアンスは次のとおりです。
つまり、シリコンの制限ではなく、あなたが使っているDPDK DPAA2 PMDパスのソフトウェアやドライバー露出制限が原因だと思います。
試せることは
ハードウェアパーサーが内部のIPv4ヘッダーを存在としてマークしない場合、内部IP上のRSSは動作しません。
DPDKで、DPAA2 PMDログを有効にします。
コピー
--log-level=pmd.net.dpaa2:debug
また、受信パケットがアプリケーション内やtestpmdで意味のあるパケットタイプ情報を得られるかどうかも確認してください。例えば、パケットがMPLSのみに分類されているのか、MPLSと内なるIPv4として分類されているのかなどです。
パケットタイプがMPLSで終了すると、ドライバの観点からは内部IPv4が解析されていないため、RSSハッシュは内部IPv4を使用できません。
RSSタイプをmplsのみに設定した場合、MPLSフィールドは自動的にハッシュ化されます。内部IPv4ヘッダーを明示的に含むパターンを試してください。
コピー
フロー作成 0 イングレス \
パターン eth / mpls / ipv4 / end \
アクション RSS キュー 0 1 終了 タイプ IPv4 終了 / 終了
送信元/宛先IPアドレスを具体的に知りたい場合は、以下も試してみてください。
コピー
フロー作成 0 イングレス \
パターン eth / mpls / ipv4 / end \
アクション RSS キュー 0 1 終了 タイプ IP IPv4 終了 / 終了
それが拒否または承認されたにもかかわらず、内部 IPv4 アドレスに基づいて配布されない場合は、PMD が DPAA2 配布キーを「最後の/内部 IP」としてプログラムしていない可能性があります。
MPLSトラフィックが通常のサービスラベルを使用している場合、パーサはペイロードがIPv4であることを認識しない可能性があります。制御テストとしては、MPLSの明示的NULLラベルを試してください:
DPAA2のドキュメントによると、MPLSラベル解釈が有効の場合、ラベル0はIPv4に、label2はIPv6にマッピングされます。
もし内側IP上のRSSがラベル0でのみ動作する場合、問題はRSS自体ではありません。問題は、パーサーがMPLSペイロードがIPであることを知らなかったことです。
DPAA2ハードウェアには、これに必要な概念が備わっています。
したがって、ドライバーレベルの実装では、DPNIの配信プロファイルを以下のようにプログラムする必要があるでしょう:
実際には、これは単にtestpmdコマンドを変更するだけでなく、DPAA2 DPDK PMDを変更する必要があるかもしれません。
私の結論として、DPAA2ハードウェアは原則として「内側/最終IP」フィールドに到達できますが、MPLS-inner-IP RSSはスタック上で既にサポートされているDPDK DPAA2 PMD機能ではないようです。もし明示的なeth / mpls / ipv4のRSSルールが失敗した場合、別のtestpmdコマンドではなくPMD/パーサー/配布プロファイルの変更が考えられます。