Правильный способ уведомления приложения о том, что DPDK получил сообщения - PullRequest
0 голосов
/ 30 августа 2018

в настоящее время я использую 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 только при наличии полученного сообщения?

1 Ответ

0 голосов
/ 30 августа 2018

Ну, прямой ответ - использовать библиотеку событий DPDK: http://doc.dpdk.org/guides/prog_guide/eventdev.html

Но это не так гладко. Если у вас нет аппаратного обеспечения, которое напрямую поддерживает модель событий, вам все равно потребуется по крайней мере одно ядро ​​RX для опроса (то есть выполните цикл занятости), как показано на этом рисунке: http://doc.dpdk.org/guides/prog_guide/eventdev.html#api-walk-through

...