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

Proper way of notifying the application that DPDK received messages

目前,我正在通过将数据包发送和接收到 rte-rings 来使用 dpdk。我很难找到通知应用程序 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?

嗯,直接回答就是使用DPDK事件库:http://doc.dpdk.org/guides/prog_guide/eventdev.html

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