私のアプリケーションからrte_eth_rx_burstを呼び出しています
時々同じ mbuff が 2 回来ることがあります。コードバッファが解放されていないことを確認しました。mbuff が無料の場合、同じ mbuff ポインタが 2 回受信されるシナリオはどのようなものになるでしょうか。
アプリを実行するには、以下を使用してください。
--log-level=8
ご覧いただける内容:
DPDKを再構築するには、以下を使用してください。
CONFIG_RTE_LIBRTE_MBUF_DEBUG=y
これにより、以下のことが可能になります。
CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=y
検出に役立ちます:
メモリ上書きチェックを有効にするには、以下の設定が有効になっています。
CONFIG_RTE_MALLOC_DEBUG=y
そして、
--mp-alloc=debug
これは以下の検出に役立ちます。
実行
testpmd -- -i
それから:
受信専用に前方転送を設定します
start
重複が解消された場合:
それでも発生する場合:
@yipingwangさん、迅速なご返信とご提案ありがとうございます。コードからはこれ以上理解できない。DPDKのデバッグフラグはどれでも役に立ちますか?
コード内に明示的な mbuf free がない場合、最も可能性の高いシナリオは、mbuf がアプリケーション内の別のパスを通じて実質的に返されたり再利用されたりしているか、スレッドやコア間で安全でない方法で共有されているか、あるいは特別なドライバ/パス固有のバッファ処理の問題によってライフサイクル状態が破損しているかのいずれかです。
RTE_MBUF_REFCNT_ATOMIC マルチコアアクセスが有効になっており、顧客も同意したが、問題は依然としてアプリケーションレベルの所有権/ライフサイクル管理として扱われた。next クリアされないため、後続の割り当て時に健全性チェックの失敗が発生します。それはあなたの報告と同じ症状ではありませんが、特別なバッファ処理パスが後々の再利用や破損の症状につながる可能性があることを示しています。sym->m_dst は NULL 、 それから m_src そして m_dst 同じmbufを使用します。ポインタの識別子は変更されていないにもかかわらず、負荷がかかるとパケットの内容が「その場で」書き換えられたように見えることがある。@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に関連付けられています