в настоящее время я использую dpdk, отправляя и получая пакеты в rte-ring. У меня возникают трудности с поиском правильного способа уведомления приложения о том, что DPDK получил входящие сообщения.
Чтобы проверить, получил ли rte_ring данные или нет, я запускаю цикл занятости для rte_ring.
вот пример ниже
while (1) {
if (rte_ring_dequeue(rx_ring, &_msg) < 0) {
usleep(5);
} else {
recv_msg = (char *) _msg;
if (chara_debug) printf("[%d] Server merge data::[%.24s...]__length::[%ld]\n", batched_packets, recv_msg, strlen(recv_msg));
collect_packets++;
if (collect_packets > MERGE_PACKETS) break;
}
}
Однако мои коллеги-разработчики говорят, что это не эффективный и не правильный способ проверки полученных сообщений. Опрос должен выполняться только в API-интерфейсе DPDK, а не в приложении.
Есть ли способ для DPDK отправить сигнал приложению, чтобы приложение могло проверять rte_ring только при наличии полученного сообщения?