r2p2之DPDK学习记录(2)
名称解释
简称 | 全称 | 备注 |
---|---|---|
DPDK | Data Plane Development Kit | 数据平面开发套件 |
RTE | RunTime Environment | 运行时环境 |
EAL | Environment Abstraction Layer | 环境抽象层 |
lcore | logical core | EAL pthread |
TLS | Thread Local Storage | 线程本地存储 |
dpdk函数
dpdk的主要对外函数接口都以rte_作为前缀,抽象化函数接口是典型软件设计思路,可以帮助DPDK运行在多个操作系统上。
rte_eth_tx_burst()
对于要发送的每个包,rte_eth_tx_burst()函数会执行下列操作:
- 在传输ring中选择下一个可用的描述符。
- 释放先前与该描述符一起发送的网络缓冲区,如果有的话。
- 使用*rte_mbuf数据结构中提供的信息初始化传输描述符。
static uint16_t rte_eth_tx_burst | ( | uint16_t | port_id, |
uint16_t | queue_id, | ||
struct rte_mbuf ** | tx_pkts, | ||
uint16_t | nb_pkts | ||
) |
参数
port_id:以太网设备的端口标识符。
queue_id:必须通过其发送输出数据包的传输队列的索引。该值必须在先前提供给rte_eth_dev_configure()的[0,nb_tx_queue - 1]范围内。
tx-pkts:包含输出包的rte_mbuf结构的nb_pkts指针数组的地址。
nb_pkts:要传输的最大数据包数。
return发送成功的数据包的个数。
lcore
一个lcore是一个基于pthread实现的线程。
rte_eal_init(int argc, char **argv)
主线程运行入口是main函数,调用了rte_eal_init入口函数,启动基础运行环境。
函数参数是启动DPDK的命令行,比较复杂,它将被解析并且保存作为DPDK运行的系统信息。
rte_lcore_count()
返回当前系统上存在的lcore的个数。
rte_eth_dev_count()
获取在PCI探测阶段由匹配的以太网驱动程序成功初始化的以太网设备总数。所有端口标识符在[0,rte_eth_dev_count() - 1]范围内的设备都可以在调用rte_eal_init()后立即被网络应用程序操作。
rte_eth_dev_configure(port_id, nb_rx_queue, nb_tx_queue, eth_conf)
配置以太网设备。
参数
port_id: 需要配置的以太网设备的端口id。
nb_rx_queue: 为以太网设备设置的接收队列的数量。
nb_tx_queue: 为以太网设备设置的发送队列的数量。
eth_conf: 指向用于以太网设备的配置数据的指针。
rte_eth_tx_queue_setup(port_id, tx_queue_id, nb_tx_desc, socket_id, tx_conf)
给以太网设备分配并配置一个传输队列。
参数
tx_queue_id: 要设置的传输队列的索引。该值必须在先前提供给rte_eth_dev_configure()的[0,nb_tx_queue-1]范围内。
nb_tx_desc: 分配给传输ring的传输描述符的数量。
socket_id: 在r2p2的dpdk_init()中,socket_id = rte_eth_dev_socket_id(port_id),socket_id这里指的是什么?
tx_conf: 指向传输队列的配置数据的指针。
rte_eth_dev_socket_id()
返回以太网设备所连接的NUMA socket.
本文地址:https://blog.csdn.net/qq_43012789/article/details/108857129