通知应用程序DPDK收到消息的正确方法

时间:2018-08-30 00:05:23

标签: intel dpdk

目前,我正在使用dpdk,方法是将数据包发送和接收到rte环中。我很难找到适当的方法来通知应用程序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;
  }
}

但是,我的开发人员说这不是检查收到消息的有效方法,也不是正确的方法。忙轮询应仅在DPDK API中完成,而不应在应用程序中完成。

DPDK是否有一种向应用程序发送信号的方法,以使应用程序仅在收到消息时才可以检查rte_ring?

1 个答案:

答案 0 :(得分:2)

好吧,直接的答案是使用DPDK事件库:http://doc.dpdk.org/guides/prog_guide/eventdev.html

但这并不顺利。除非您有直接支持事件模型的硬件,否则仍然需要至少一个RX内核进行轮询(即执行繁忙循环),如下图所示: http://doc.dpdk.org/guides/prog_guide/eventdev.html#api-walk-through