Когда происходит сбой библиотеки DPDK, ядро, сброшенное приложением DPDK, всегда указывает на обратную трассировку. У меня есть многоядерное приложение.
0 0x00007f22bf35a483 in epoll_wait () from /lib64/libc.so.6
1 0x00007f22bf903de4 in eal_intr_handle_interrupts (totalfds=<optimized out>, pfd=10) at /root/akshay/dpdk-stable-17.11.1/lib/librte_eal/linuxapp/eal/eal_interrupts.c:779
2 eal_intr_thread_main (arg=<optimized out>) at /root/akshay/dpdk-stable-17.11.1/lib/librte_eal/linuxapp/eal/eal_interrupts.c:863
3 0x00007f22bea2fdd5 in start_thread () from /lib64/libpthread.so.0
4 0x00007f22bf359ead in clone () from /lib64/libc.so.6
Это в основном происходит, когда сбой происходит в пределах любого кода драйвера PMD. Когда я запустил свое приложение DPDK с помощью GDB, я смог увидеть правильную обратную трассировку и точку сбоя. Который был ниже в моем случае
0 ixgbe_xmit_pkts (tx_queue=0x0, tx_pkts=0x7f17fc9dd398, nb_pkts=1) at /root/subh/dpdk-stable-17.11.1/drivers/net/ixgbe/ixgbe_rxtx.c:69
1 0x00007f1806e3d3be in rte_eth_tx_burst (port_id=0, queue_id=0, tx_pkts=0x7f17fc9dd398, nb_pkts=1) at /root/subh/dpdk-stable-17.11.1/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:3173
2 0x00007f1806e3d415 in rte_eth_tx_buffer_flush (port_id=0, queue_id=0, buffer=0x7f17fc9dd380) at /root/subh/dpdk-stable-17.11.1/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:3356
3 0x00007f1806e3e579 in rte_eth_tx_buffer (tx_pkt=0x7f1802c3eec0, buffer=0x7f17fc9dd380, queue_id=0, port_id=0) at /root/subh/dpdk-stable-17.11.1/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:3406
Как мы можем убедиться, что в случае сбоя библиотеки DPDK происходит правильный дамп ядра.
Что произойдет, если мы отключим поток прерываний EAL и не создадим его. У нас даже есть возможность не создавать поток обработки прерываний eal.