[DPDK] rte_eth_dev_start()出現段錯誤

[DPDK] rte_eth_dev_start()出現段錯誤

一天我運行DPDK時,它在rte_eth_dev_start()時發生段錯誤。

Thread 1 "my_dpdk" received signal SIGSEGV, Segmentation fault.
0x00007ffff76aaff7 in execute_ioctl () from /lib/x86_64-linux-gnu/libibverbs.so.1
(gdb) bt
#0  0x00007ffff76aaff7 in execute_ioctl () from /lib/x86_64-linux-gnu/libibverbs.so.1
#1  0x00007ffff7718b7d in mlx5dv_devx_obj_query () from /lib/x86_64-linux-gnu/libmlx5.so.1
#2  0x00007ffff7fbf9cb in mlx5_devx_cmd_queue_counter_query ()
   from /usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/librte_common_mlx5.so.21.0
#3  0x00007ffff6c5f966 in mlx5_os_read_dev_stat ()
   from /usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/librte_net_mlx5.so.21.0
#4  0x00007ffff6c62280 in mlx5_os_read_dev_counters ()
   from /usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/librte_net_mlx5.so.21.0
#5  0x00007ffff6c626ba in mlx5_os_stats_init ()
   from /usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/librte_net_mlx5.so.21.0
#6  0x00007ffff6b7527d in mlx5_dev_start ()
   from /usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/librte_net_mlx5.so.21.0
#7  0x00007ffff7f1642e in rte_eth_dev_start ()
   from /usr/local/lib/x86_64-linux-gnu/librte_ethdev.so.21
#8  0x00005555555da776 in port_init () at /path/to/my-dpdk.c:201
#9  0x00005555555dada0 in main (argc=9, argv=0x7fffffffe4a8)
    at /path/to/my-dpdk.c:318

不僅是當前程序出錯,該機器上的所有DPDK程序在進行到rte_eth_dev_start()時都會出現同樣的錯誤。這令人很迷惑。其一,DPDK如果出錯,一般會返回詳細的錯誤信息和錯誤代碼,而不是直接段錯誤讓程序崩潰。這意味着這不是我寫的程序出了錯,而是DPDK內部的問題。其二,它最終報錯的點libibverbs.so.1是比DPDK更內層的庫(可以理解爲DPDK是在這個庫的基礎上編譯的)。這說明可能是DPDK與這個內層的庫兼容上出了問題。要麼是DPDK的問題,要麼是這個libibverrbs.so.1的問題。後者屬於網卡驅動的一部分。

嘗試

  • 依次重裝MLNX_OFED,dpdk,均無效。
  • 將該機器的配置與另一臺正常的機器做對比,發現配置相同,所以不是配置的問題。
  • 該機器的mellanox firmware與正常的機器相同,所以也不是firmware的問題。
  • 懷疑是meson版本的問題,後來證明也不是meson的問題。

解決

  • 該機器的DPDK版本是20.11.3,另一臺好機器上的版本是20.11.7。於是將該機器的DPDK版本也換爲20.11.7,再編譯DPDK,問題解決。

結論

我後來又在另一臺機器上也出現了類似的問題:在rte_eth_dev_start()報錯,但最終停在的位置不是libibverbs.so.1,而是libmlx5.so。也是用了同樣的方法解決。

最終還是不知道是什麼原因導致了這個問題。以後乖乖用20.11.7就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章