NXPサポート様
LX2160A ベースのカスタム ハードウェアで VPP がクラッシュすると、カーネルのデッドロックが発生します。
以下に、環境の詳細と観察された動作を示します。
1. システムとソフトウェアのバージョン
SoC / ボード: LX2160A、カスタムハードウェア
データプレーン: DPDK + VPP
LSDK: 20.05
カーネル: 4.19.90-rt35
MCファームウェア: 10.36.0
VPP: 22.06
DPDK: 21.11
2. DPAA2インターフェースマッピング
dprc.1/dpni.7 (インターフェース: eth4、エンドポイント: dpmac.3)
dprc.1/dpni.1 (インターフェース: eth1、エンドポイント: dpmac.4)
dprc.1/dpni.0(インターフェース: eth0、エンドポイント: dpsw.0.1)
dprc.1/dprc.3/dpni.6 (エンドポイント: dpmac.9)
dprc.1/dprc.3/dpni.5 (エンドポイント: dpmac.7)
dprc.1/dprc.3/dpni.4(エンドポイント:dpmac.8)
3. VPP LCPおよびTAP/TUNの設定
VPP LCP は TAP ペア (tap1/N3、tap2/cu、tap3/cu2) を作成しています。
itf-pair: [0] TenGigabitEthernet0 tap1 N3 10型タップ
itf-pair: [1] TenGigabitEthernet1 tap2 cu 11タイプタップ
itf-pair: [2] TenGigabitEthernet2 tap3 cu2 12型タップ
4. 問題の説明
VPP がクラッシュまたは異常終了した場合:
vpp_main プロセスは割り込み不可能なスリープ (D 状態) に入ります。
カーネルワーカースレッドは rtnl_lock でブロックされています。
ps -eo pid,stat,comm,args | grep vpp_main
21670 Dl vpp_main [vpp_main]
ps -eo pid、comm、wchan | grep -E ip
9510 kworker/0:0+ipv rtnl_lock
/proc/21670/スタックをcat
[<0>] __switch_to+0xe8/0x150
[<0>] __flush_work.isra.13+0x134/0x248
[<0>] フラッシュワーク+0xc/0x18
[<0>] ロールバック登録数+0x1a8/0x560
[<0>] ネットデバイスキューの登録解除+0x90/0x118
[<0>] __tun_detach+0x37c/0x390
[<0>] tun_chr_close+0x30/0x90
[<0>] __fput+0x8c/0x1b8
[<0>] __ __fput+0xc/0x18
[<0>] タスクワーク実行+0x90/0xb0
[<0>] do_exit+0x2b4/0x9a0
[<0>] do_group_exit+0x38/0xa0
[<0>] get_signal+0xac/0x5c8
[<0>] do_signal+0x80/0x2a8
[<0>] do_notify_resume+0xd0/0x110
[<0>] 作業保留中+0x8/0x10
[<0>] 0xffffffffffffffff
/proc/9510/スタックをcat
[<0>] __switch_to+0xe8/0x150
[<0>] rtnl_lock+0x14/0x20
[<0>] addrconf_verify_work+0xc/0x20
[<0>] プロセス_one_work+0x1e0/0x318
[<0>] ワーカースレッド+0x40/0x440
[<0>] kthread+0x128/0x130
[<0>] ret_from_fork+0x10/0x18
[<0>] 0xffffffffffffffff
どうやって修正するか!
Layerscape Linux Distribution POC Rev. 6.1.55_2.2.0 リリースを使用できます。
統合するもの:
DPDK v22.11
VPP v2302