Ethernet controller overview
PHY (物理层的模拟信号) ----> MAC(数字信号) ---->FIFO(buff 先进先出)---->
DMA&Queue mangement (维护管理多个Queue DMA描述符环形队列 把网卡数据搬移到内存or缓存过程)---->
PCIe (主机和网卡的接口 )
SR-IOV引入了两个新的功能类型:
- PFs(Physical Functions,物理功能):物理网卡所支持的一项PCI功能,一个PF可以扩展出若干个VF。
- VFs(Virtual Functions,虚拟功能):支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现,每个VF有独立的PCI配置区域,并可以与其它VF共享同一个物理资源(共用同一个物理网口
对于DPDK 都是一个device (portid)
Rx Descriptors
Read和Write-Back 都是对网卡来说的 (网卡Read这个Descriptors格式是什么 ,不是CPU read)
Read
Write-Back : 网卡发完了 通知host
Tx Descriptors
Ring
DMA(Direct Memory Access,直接存储器访问)是一种高速的数据传输方式,允许在外部设备和存储器之间直接读写数据。数据既不通过CPU,也不需要CPU干预。整个数据传输操作在DMA控制器的控制下进行。网卡DMA控制器通过环形队列与CPU交互。环形队列的内容部分位于主存中,控制部分通过访问外设寄存器的方式完成。
Rx Overview
Tx Overview
DPDK PMD driver
DPDK Architecture
UIO Picture
UIO: 通过mmap 把地址映射到 用户空间 用户空间的pmd 可以像操作内存那样操作设备
Mbuf
现在增加后扩展到两个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_alloc” in rx_pkt_burst function (收包方向)
Free mbuf “rte_pktmbuf_free_seg”/ “rte_pktmbuf_free” in tx_pkt_burst function (发包反向)
PMD Logical View
Hardware PMDs通过编程 NIC的寄存器 或 封装ND Shared code.来实现dpdk以太网设备抽象
drivers/net/
PS: 绿色为真实的物理网卡
Ethernet Device Framework
数据结构
Example DPDK Network Application
一些概念
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
Vector PMD
利用intel宽指令集实现的收发包函数
NIC Features
RX HW offload
rt u mbuf->ol_flags 标志表示RX卸载状态
Pack type
rte_mbuf->ptype 根据NIC的解析 指明数据包类型。
Example:
- RTE_PTYPE_L2_ETHER |
- RTE_PTYPE_L3_IPV4_EXT_UNKNOWN |
- RTE_PTYPE_L4_TCP
Receive classification filters(接收分类筛选器)
MAC VLAN filtering/Internal Switch (mac-vlan过滤/内部交换机)
RSS – Receive Side Scaling (接收端缩放)
Flow director(流量控制器)
Tx HW offload
VLAN Insert
Checksum offload
TSO
More advanced features
Virtrulization
SRIOV
VMDQ
QoS
DCB
Tx Schedule
Mirroring
Tunnel supporting