2016-10-04 16:45 GMT+02:00, Keith Wiles <keith.wiles at intel.com>:
> The rte_eth_tap.c PMD creates a device using TUN/TAP interfaces
> on the local host. The PMD allows for DPDK and the host to
> communicate using a raw device interface on the host and in
> the DPDK application. The device created is a Tap device with
> a L2 packet header.
[...]
> +static uint16_t
> +pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
> +{
> +     int len, n;
> +     struct rte_mbuf *mbuf;
> +     struct rx_queue *rxq = queue;
> +     struct pollfd pfd;
> +     uint16_t num_rx;
> +     unsigned long num_rx_bytes = 0;
> +
> +     pfd.events = POLLIN;
> +     pfd.fd = rxq->fd;
> +     for (num_rx = 0; num_rx < nb_pkts; ) {
> +             n = poll(&pfd, 1, 0);
> +
> +             if (n <= 0)
> +                     break;
> +

Considering that syscalls are rather expensive, it would be cheaper to
allocate an mbuf here and free it when read() returns -1 instead of
calling poll() to check whether a packet is waiting. This way you
save a syscall per packet and replace one syscall with one mbuf free
per poll.

Best Regards,
Micha??Miros?aw

Reply via email to