当前位置: 代码迷 >> 综合 >> (四)DPDK-PMD
  详细解决方案

(四)DPDK-PMD

热度:78   发布时间:2023-10-17 00:46:21.0

Ethernet controller overview

(四)DPDK-PMD 

PHY (物理层的模拟信号)  ----> MAC(数字信号) ---->FIFO(buff 先进先出)---->

DMA&Queue mangement  (维护管理多个Queue   DMA描述符环形队列 把网卡数据搬移到内存or缓存过程)---->

PCIe (主机和网卡的接口 )

(四)DPDK-PMD

SR-IOV引入了两个新的功能类型:

  • PFs(Physical Functions,物理功能):物理网卡所支持的一项PCI功能,一个PF可以扩展出若干个VF。
  • VFs(Virtual Functions,虚拟功能):支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现,每个VF有独立的PCI配置区域,并可以与其它VF共享同一个物理资源(共用同一个物理网口

 对于DPDK 都是一个device (portid)

Rx Descriptors

(四)DPDK-PMD 

Read和Write-Back 都是对网卡来说的 (网卡Read这个Descriptors格式是什么 ,不是CPU read)

Read 

Write-Back : 网卡发完了 通知host  

Tx Descriptors

(四)DPDK-PMD 

 

 Ring

(四)DPDK-PMD

(四)DPDK-PMD 

DMA(Direct Memory Access,直接存储器访问)是一种高速的数据传输方式,允许在外部设备和存储器之间直接读写数据。数据既不通过CPU,也不需要CPU干预。整个数据传输操作在DMA控制器的控制下进行。网卡DMA控制器通过环形队列与CPU交互。环形队列的内容部分位于主存中,控制部分通过访问外设寄存器的方式完成。 

Rx Overview

(四)DPDK-PMD

 

Tx Overview

(四)DPDK-PMD

 

 

DPDK PMD driver

DPDK  Architecture 

(四)DPDK-PMD

UIO Picture

(四)DPDK-PMD 

UIO: 通过mmap 把地址映射到 用户空间    用户空间的pmd 可以像操作内存那样操作设备 

Mbuf

 (四)DPDK-PMD

现在增加后扩展到两个cacheline  

Mempool and mbuf

Create mbuf pool rte_pktmbuf_pool_create” in application initilization

NB_MBUF = nb_ports*nb_rx_queue*nb_rx_desc +

                          nb_ports*nb_tx_queue*nb_tx_desc +

                          nb_ports*nb_lcores*MAX_PKT_BURST

                          nb_lcores*MEMPOOL_CACHE_SIZE

Allocate mbuf rte_rxmbuf_allocin rx_pkt_burst function                                         (收包方向)

Free mbuf “rte_pktmbuf_free_seg”/ “rte_pktmbuf_free” in tx_pkt_burst function  (发包反向)

PMD Logical View

(四)DPDK-PMD

Hardware PMDs通过编程  NIC的寄存器  或 封装ND Shared code.来实现dpdk以太网设备抽象 

drivers/net/

(四)DPDK-PMD

PS: 绿色为真实的物理网卡 

Ethernet Device Framework

(四)DPDK-PMD  

数据结构

(四)DPDK-PMD

Example DPDK Network Application

 (四)DPDK-PMD

(四)DPDK-PMD

一些概念 

Bursting (突发)

  • Multiple buffers can be allocated, and sometimes freed, at once, removing per-packet overhead(开销)

Scattered(分散) (针对大包)

  • Multi-segmented rte_mbuf  
  • EOP flag in descriptor indicates if the descriptor is the last one of the packet.

Threshold (阈值) (发了多个包之后 在去写寄存器)

  • rx_free_thresh: Drives the freeing of RX descriptors
  • tx_rs_thresh : Drives the setting of RS bit on TXDs
  • tx_free_thresh : Start freeing TX buffers if there are less free descriptors than this value

Number of descriptors on queue

   队列上的描述符数   就是这个Ring有多长(给CPU一个缓存的空间)

Bulk

 (四)DPDK-PMD

Vector PMD

利用intel宽指令集实现的收发包函数

NIC Features

RX HW offload

rt u mbuf->ol_flags    标志表示RX卸载状态

 

Pack type

rte_mbuf->ptype  根据NIC的解析 指明数据包类型。

(四)DPDK-PMD

Example

  •   RTE_PTYPE_L2_ETHER |
  •   RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
  •   RTE_PTYPE_L4_TCP

 

Receive classification filters(接收分类筛选器)

(四)DPDK-PMD

 

MAC VLAN filtering/Internal Switch (mac-vlan过滤/内部交换机)

(四)DPDK-PMD 

RSS – Receive Side Scaling (接收端缩放)

(四)DPDK-PMD

 Flow director(流量控制器)

(四)DPDK-PMD

Tx HW offload

 

VLAN Insert

Checksum offload

TSO

(四)DPDK-PMD

 

More advanced features

 

Virtrulization

SRIOV

VMDQ

QoS

DCB

Tx Schedule

Mirroring

Tunnel supporting