こんにちは、皆さん。
使用機器:LX2160 LSDK 2108 メイン
MCファームウェアバージョン:10.32.0
DPDKバージョン:dpdk_19_11_tags_LSDK20.04-isc-09
プライマリ ( DPDK ) プロセス: [ rte_pktmbuf_pool_create("dlmempool", ] を使用して mbuff プールを作成します。
セカンダリ(DPDK)プロセス:API [ rte_pktmbuf_alloc(mempool) ]を使用してmbuffを割り当てるのに失敗しました
セカンダリーでは、mempoolが正しいとわかります。ムバフは満杯です。rte_pktmbuf_alloc を使用した最初の mbuff 割り当て時にエラーが発生します。
これに対する解決策はありますか?ありがとう。
こんにちは、
セカンダリプロセスは、プライマリプロセスと同じ仮想アドレスにhugepagesをマッピングする必要があります。ASLRが有効な場合、セカンダリはmempoolポインタを別の仮想アドレスに解決するため、最初の割り当てが失敗します。
echo 0 > /proc/sys/kernel/randomize_va_space
プライマリプロセスまたはセカンダリプロセスを起動する前に、これを実行してください。
2. 十分なDPMCPオブジェクトを用意する
プロセスの総数(プライマリプロセス+セカンダリプロセス)と同じ数のDPMCPオブジェクトを作成します。プライマリ1個とセカンダリ1個の場合、少なくとも2個のDMPCPが必要です。
export DPMCP_COUNT=3 # for 1 Primary + 2 Secondary (always provision +1 as buffer)
./dynamic_dpl.sh dpmac.X
各プロセスにはそれぞれ専用のDPIOポータルが必要です。その式は次のとおりです。
(総プロセス数)×(プロセスあたりのコア数+プロセスあたりの追加コア数1)
例えば、プライマリ1(2コア)+ 1セカンダリ(2コア)= 最低9DPIOの場合。
export DPIO_COUNT=20 # set generously
二次プロセスは、I/O デバイス (dpni、dpbp、dpcon、dpseci) を再初期化してはなりません。セカンダリ側で初期化する必要があるのは、 dpioとdpmcpのみである。正しいブラックリストフラグを渡してください。
# Secondary process example — blacklist all dpni/dpbp/dpcon, allow only dpio + dpmcp
./your_secondary_app --proc-type=secondary \
-b fslmc:dpni.X \
-b fslmc:dpbp.X \
-b fslmc:dpcon.X \
-- [app args]
または、セカンダリに割り当てられているdpioおよびdpmcpオブジェクトのみを明示的にホワイトリストに登録します。
./your_secondary_app --proc-type=secondary \
-w fslmc:dpio.Y \
-w fslmc:dpmcp.Z \
-- [app args]
--proc-type=secondary EAL引数を使用するセカンダリが正しいEALフラグで起動されていることを確認してください。
./your_secondary_app -c -n 1 --proc-type=secondary ...
あるいは --proc-type=auto を使ってDPDKを自動検出させるのも良いでしょう。
セカンダリでは、 rte_pktmbuf_pool_create再度呼び出さないでください。代わりに、プライマリによって作成された既存のプールを検索してください。
// In secondary process:
struct rte_mempool *mempool = rte_mempool_lookup("dlmempool");
if (mempool == NULL) {
// Error: pool not found — ASLR or hugepage mapping issue
}
struct rte_mbuf *m = rte_pktmbuf_alloc(mempool);
rte_mempool_lookupが有効な非NULLポインタを返してもrte_pktmbuf_allocがNULLを返す場合、問題はほぼ間違いなくDPIOポータルがセカンダリのスレッド/コアに対して初期化されていないことです。
よろしくお願いします。
迅速な解決策を提供してくれた@Bio_TICFSLに感謝します。