[DPDK] rte_eth_dev_start()出現(xiàn)段錯(cuò)誤
[DPDK] rte_eth_dev_start()出現(xiàn)段錯(cuò)誤
一天我運(yùn)行DPDK時(shí),它在rte_eth_dev_start()時(shí)發(fā)生段錯(cuò)誤。
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
不僅是當(dāng)前程序出錯(cuò),該機(jī)器上的所有DPDK程序在進(jìn)行到rte_eth_dev_start()時(shí)都會(huì)出現(xiàn)同樣的錯(cuò)誤。這令人很迷惑。其一,DPDK如果出錯(cuò),一般會(huì)返回詳細(xì)的錯(cuò)誤信息和錯(cuò)誤代碼,而不是直接段錯(cuò)誤讓程序崩潰。這意味著這不是我寫的程序出了錯(cuò),而是DPDK內(nèi)部的問(wèn)題。其二,它最終報(bào)錯(cuò)的點(diǎn)libibverbs.so.1是比DPDK更內(nèi)層的庫(kù)(可以理解為DPDK是在這個(gè)庫(kù)的基礎(chǔ)上編譯的)。這說(shuō)明可能是DPDK與這個(gè)內(nèi)層的庫(kù)兼容上出了問(wèn)題。要么是DPDK的問(wèn)題,要么是這個(gè)libibverrbs.so.1的問(wèn)題。后者屬于網(wǎng)卡驅(qū)動(dòng)的一部分。
嘗試
- 依次重裝MLNX_OFED,dpdk,均無(wú)效。
- 將該機(jī)器的配置與另一臺(tái)正常的機(jī)器做對(duì)比,發(fā)現(xiàn)配置相同,所以不是配置的問(wèn)題。
- 該機(jī)器的mellanox firmware與正常的機(jī)器相同,所以也不是firmware的問(wèn)題。
- 懷疑是meson版本的問(wèn)題,后來(lái)證明也不是meson的問(wèn)題。
解決
- 該機(jī)器的DPDK版本是20.11.3,另一臺(tái)好機(jī)器上的版本是20.11.7。于是將該機(jī)器的DPDK版本也換為20.11.7,再編譯DPDK,問(wèn)題解決。
結(jié)論
我后來(lái)又在另一臺(tái)機(jī)器上也出現(xiàn)了類似的問(wèn)題:在rte_eth_dev_start()報(bào)錯(cuò),但最終停在的位置不是libibverbs.so.1,而是libmlx5.so。也是用了同樣的方法解決。
最終還是不知道是什么原因?qū)е铝诉@個(gè)問(wèn)題。以后乖乖用20.11.7就好了。
| 歡迎來(lái)原網(wǎng)站坐坐! >原文鏈接<

浙公網(wǎng)安備 33010602011771號(hào)