2379408_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2379408_ja-JP

2379408_ja-JP

rte_eth_rx_burst -> 同じmbuffポインタを2回連続で返しています

私のアプリケーションからrte_eth_rx_burstを呼び出しています

時々同じ mbuff が 2 回来ることがあります。コードバッファが解放されていないことを確認しました。mbuff が無料の場合、同じ mbuff ポインタが 2 回受信されるシナリオはどのようなものになるでしょうか。

QorIQ LS1デバイスRe: rte_eth_rx_burst -> returning same mbuff pointer twice consecutively
  1. DPDKのログレベルを有効にする(まず最初に試すべきこと)

アプリを実行するには、以下を使用してください。

--log-level=8

ご覧いただける内容:

  • RXディスクリプタの処理
  • バッファの割り当て/リサイクル
  • PMDの挙動
  1. mbufデバッグチェックを有効にする(非常に便利)

DPDKを再構築するには、以下を使用してください。

CONFIG_RTE_LIBRTE_MBUF_DEBUG=y

これにより、以下のことが可能になります。

  • mbufの一貫性を検証する
  • キャッチ:
    • メタデータが破損しています
    • mbufを誤って再利用した
    • 無効なrefnt

  1. メモリプールのデバッグを有効にする

CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=y

検出に役立ちます:

  • 二重割り当て
  • キャッシュ破損
  • mempoolから同じバッファが2回返されました

  1. 毒物/無料追跡(非常に便利)

メモリ上書きチェックを有効にするには、以下の設定が有効になっています。

CONFIG_RTE_MALLOC_DEBUG=y

そして、

--mp-alloc=debug

これは以下の検出に役立ちます。

  • mbuf の前後で上書きする
  • 隠されたメモリ破損

  1. 素早く隔離できるコツ(非常に効果的)

実行

testpmd -- -i

それから:

受信専用に前方転送を設定します

start


重複が解消された場合:

  • アプリケーションのバグ

それでも発生する場合:

  • PMD / HW / キュー構成の問題
Re: rte_eth_rx_burst -> returning same mbuff pointer twice consecutively

@yipingwangさん、迅速なご返信とご提案ありがとうございます。コードからはこれ以上理解できない。DPDKのデバッグフラグはどれでも役に立ちますか?

Re: rte_eth_rx_burst -> returning same mbuff pointer twice consecutively

コード内に明示的な mbuf free がない場合、最も可能性の高いシナリオは、mbuf がアプリケーション内の別のパスを通じて実質的に返されたり再利用されたりしているか、スレッドやコア間で安全でない方法で共有されているか、あるいは特別なドライバ/パス固有のバッファ処理の問題によってライフサイクル状態が破損しているかのいずれかです。

  • クロスコア/共有mbuf所有権の問題。 ある事例では、1つのCPUをRXに使用し、多数のワーカーCPUがリングからmbufを消費していました。その際、mbufアドレスが他の場所で参照されているにもかかわらず、再利用または上書きされていることが確認されました。NXPは具体的に、 RTE_MBUF_REFCNT_ATOMIC マルチコアアクセスが有効になっており、顧客も同意したが、問題は依然としてアプリケーションレベルの所有権/ライフサイクル管理として扱われた。
  • アプリケーションパイプラインに重複したリリース、または隠されたリターンパスが存在します。 NXPのこの件に関するガイダンスは、バッファの割り当て/解放/パケット送信アクションを計測し、同じアドレスがバッファプールに複数回解放されているかどうかを確認することだった。
  • PMD/ドライバが、不正な形式のmbufを特別なパスでプールに返します。 連鎖したmbufに関連する別のDPAA2 PMDケースがあり、mempoolに戻されたmbufが破損しているように見えました( next クリアされないため、後続の割り当て時に健全性チェックの失敗が発生します。それはあなたの報告と同じ症状ではありませんが、特別なバッファ処理パスが後々の再利用や破損の症状につながる可能性があることを示しています。
  • 暗号化パス内の送信元と宛先のmbufが同じである。 DPAAセキュリティ/IPsecのケースで、NXPは、 sym->m_dst  NULL 、 それから m_src そして m_dst 同じmbufを使用します。ポインタの識別子は変更されていないにもかかわらず、負荷がかかるとパケットの内容が「その場で」書き換えられたように見えることがある。

Re: rte_eth_rx_burst -> returning same mbuff pointer twice consecutively

@yipingwangさん、迅速なご返信ありがとうございます。最新情報をお伝えするように努めます。

複数のmbuf(同じアドレス)が来るたびに、画面に以下の出力が表示されるという観察結果があります。


fslmc: dpaa2_get_qbman_swp(): 新しいポータル 0x17ffd61c0 (5) アファイン Thread - 1953
fslmc: dpaa2_configure_stashing(): ポータル= 5 CPU= 10 SDEST= 5
fslmc: DPAAポータル=0x17ffd61c0 (5) はThread1953に関連付けられています

Tags (1)
No ratings
Version history
Last update:
Friday
Updated by: