[DPDK] dumpcap報錯EAL init failed: is primary process running?解決辦法
[DPDK] dumpcap報錯EAL init failed: is primary process running?解決辦法
問題
我寫了一個DPDK程序,現在想要用DPDK自帶的dpdk-dumpcap工具來抓包測試。根據官網描述,我們需要先啟動我們的程序為主進程,然后啟動dpdk-dumpcap為副進程。但是我直接運行dpdk-dumpcap,顯示如下錯誤:
注:在編譯DPDK時,需要有libpcap庫才會編譯dpdk-dumpcap程序。
${DPDK_HOME}/build/app/dpdk-dumpcap -D
EAL: Cannot initialize tailq: RTE_FIB
Tailq 0: qname:<RTE_RING>, tqh_first:0x11fff2d1c0, tqh_last:0x11fff2d1c0
Tailq 1: qname:<RTE_MEMPOOL>, tqh_first:0x11fff2d280, tqh_last:0x11fff2d280
Tailq 2: qname:<RTE_MBUF_DYNFIELD>, tqh_first:(nil), tqh_last:0x1000044e8
Tailq 3: qname:<RTE_MBUF_DYNFLAG>, tqh_first:(nil), tqh_last:0x100004518
Tailq 4: qname:<UIO_RESOURCE_LIST>, tqh_first:(nil), tqh_last:0x100004548
Tailq 5: qname:<VFIO_RESOURCE_LIST>, tqh_first:(nil), tqh_last:0x100004578
Tailq 6: qname:<RTE_HASH>, tqh_first:(nil), tqh_last:0x1000045a8
Tailq 7: qname:<RTE_FBK_HASH>, tqh_first:(nil), tqh_last:0x1000045d8
Tailq 8: qname:<RTE_THASH>, tqh_first:(nil), tqh_last:0x100004608
Tailq 9: qname:<RTE_REORDER>, tqh_first:(nil), tqh_last:0x100004638
Tailq 10: qname:<RTE_ACL>, tqh_first:(nil), tqh_last:0x100004668
Tailq 11: qname:<RTE_LPM>, tqh_first:(nil), tqh_last:0x100004698
Tailq 12: qname:<RTE_LPM6>, tqh_first:(nil), tqh_last:0x1000046c8
Tailq 13: qname:<RTE_SWX_PIPELINE>, tqh_first:(nil), tqh_last:0x1000046f8
Tailq 14: qname:<RTE_SWX_CTL_PIPELINE>, tqh_first:(nil), tqh_last:0x100004728
Tailq 15: qname:<RTE_STACK>, tqh_first:(nil), tqh_last:0x100004758
Tailq 16: qname:<VMBUS_RESOURCE_LIST>, tqh_first:(nil), tqh_last:0x100004788
Tailq 17: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 18: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 19: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 20: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 21: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 22: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 23: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 24: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 25: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 26: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 27: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 28: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 29: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 30: qname:<>, tqh_first:(nil), tqh_last:(nil)
Tailq 31: qname:<>, tqh_first:(nil), tqh_last:(nil)
EAL: FATAL: Cannot init tail queues for objects
EAL: Cannot init tail queues for objects
EAL: Error - exiting with code: 1
Cause: EAL init failed: is primary process running?
根據報錯的信息,dpdk-dumpcap貌似識別不到我的主進程。但事實上應該是能識別到的,因為如果不啟動主進程的話,會在一開始額外報如下錯誤:
EAL: failed to send to (/var/run/dpdk/rte/mp_socket) due to No such file or directory
EAL: Fail to send request /var/run/dpdk/rte/mp_socket:bus_vdev_mp
vdev_scan(): Failed to request vdev from primary
...
上網查找一番,最后在Secondary DPDK with FastClick · Issue #339 · tbarbette/fastclick · GitHub里找到了問題原因。原因在于我的主進程和dpdk-dumpcap的編譯選項不同,所以無法識別。畢竟我的主進程是用我自己寫的cmake文件編譯的,而dpdk-dumpcap是用默認的meson編譯的,二者編譯選項肯定不同。
解決辦法
dpdk-dumpcap的源代碼只有一個文件。所以我直接復制過來放到我的cmake項目里,跟著主程序一起編譯,這樣就能保證編譯選項相同了。
| 歡迎來原網站坐坐! >原文鏈接<

浙公網安備 33010602011771號