[dpdk-dev] [PATCH 2/2] kdp: add virtual PMD for kernel slow data path communication

Reshma Pattan reshma.pattan at intel.com
Tue Feb 9 18:33:55 CET 2016


Hi Ferruh,

On 1/27/2016 4:32 PM, Ferruh Yigit wrote:
> This patch provides slow data path communication to the Linux kernel.
> Patch is based on librte_kni, and heavily re-uses it.
>
> The main difference is librte_kni library converted into a PMD, to
> provide ease of use for applications.
>
> Now any application can use slow path communication without any update
> in application, because of existing eal support for virtual PMD.
>
> Also this PMD supports two methods to send packets to the Linux, first
> one is custom FIFO implementation with help of KDP kernel module, second
> one is Linux in-kernel tun/tap support. PMD first checks for KDP kernel
> module, if fails it tries to create and use a tap interface.
>
> With FIFO method: PMD's rx_pkt_burst() get packets from FIFO,
> and tx_pkt_burst() puts packet to the FIFO.
> The corresponding Linux virtual network device driver code
> also gets/puts packets from FIFO as they are coming from hardware.
>
> With tun/tap method: no external kernel module required, PMD reads from
> and writes packets to the tap interface file descriptor. Tap interface
> has performance penalty against FIFO implementation.
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit at intel.com>
> ---
>   
> diff --git a/doc/guides/nics/pcap_ring.rst b/doc/guides/nics/pcap_ring.rst
> index 46aa3ac..78b7b61 100644
> --- a/doc/guides/nics/pcap_ring.rst
> +++ b/doc/guides/nics/pcap_ring.rst
> @@ -28,11 +28,11 @@
> +
> +
> +DPDK application can be used to forward packages between these interfaces:
> +

     Packages ==> packets.?

> diff --git a/drivers/net/kdp/rte_eth_kdp.c b/drivers/net/kdp/rte_eth_kdp.c
> new file mode 100644
> index 0000000..ac650d7
> --- /dev/null
> +++ b/drivers/net/kdp/rte_eth_kdp.c
> @@ -0,0 +1,481 @@
>

     No public API to create KDP PMD device. We should have one right?

> diff --git a/drivers/net/kdp/rte_kdp.h b/drivers/net/kdp/rte_kdp.h
> new file mode 100644
> index 0000000..b9db048
> --- /dev/null
> +++ b/drivers/net/kdp/rte_kdp.h
> @@ -0,0 +1,126 @@
>
> +struct rte_kdp_tap *rte_kdp_tap_init(uint16_t port_id);
> +struct rte_kdp *rte_kdp_init(uint16_t port_id);
> +
> +int rte_kdp_start(struct rte_kdp *kdp, struct rte_mempool *pktmbuf_pool,
> +	      const struct rte_kdp_conf *conf);
> +
> +unsigned rte_kdp_rx_burst(struct rte_kdp *kdp,
> +		struct rte_mbuf **mbufs, unsigned num);
> +
> +unsigned rte_kdp_tx_burst(struct rte_kdp *kdp,
> +		struct rte_mbuf **mbufs, unsigned num);
> +
> +int rte_kdp_release(struct rte_kdp *kdp);
> +
> +void rte_kdp_close(void);
>

     These functions can be static.

     Thanks,
     Reshma


More information about the dev mailing list