dpdk 多队列配置
dpdk配置:#
dpdk中多队列的配置,其实就是将收到的数据包通过一些计算然后分配到不同的网卡接收队列中,达到负载分流的效果。在dpdk中,可以通过一些简单的配置,开启RSS(微软提出的一种负载分流方法)。
static uint8_t default_rss_key_40bytes[] = {
0xd1, 0x81, 0xc6, 0x2c, 0xf7, 0xf4, 0xdb, 0x5b,
0x19, 0x83, 0xa2, 0xfc, 0x94, 0x3e, 0x1a, 0xdb,
0xd9, 0x38, 0x9e, 0x6b, 0xd1, 0x03, 0x9c, 0x2c,
0xa7, 0x44, 0x99, 0xad, 0x59, 0x3d, 0x56, 0xd9,
0xf3, 0x25, 0x3c, 0x06, 0x2a, 0xdc, 0x1f, 0xfc
};
static struct rte_eth_conf port_conf = {
.rxmode = {
.mq_mode = ETH_MQ_RX_RSS, //开启RSS
.split_hdr_size = 0,
},
.txmode = {
.mq_mode = RTE_ETH_MQ_TX_NONE,
},
// RSS配置
.rx_adv_conf = {
.rss_conf = {
.rss_key = default_rss_key_40bytes, // 40字节的hash key
// 为NULL的话会采用默认的key
.rss_key_len = 40,
.rss_hf = RTE_ETH_RSS_PROTO_MASK, //配置哈希方法
// 可能有一些会不受支持,没有关系,后面会消去一部分
// 开启其实就是把对应位置从0置为1就行了
},
},
};
后面就是对这个配置信息的一些内容进行修改 然后用修改过的配置信息去配置网卡
if (dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)
local_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
local_conf.rx_adv_conf.rss_conf.rss_hf &=
dev_info.flow_type_rss_offloads;
rte_eth_dev_configure(port_id, nb_rxq, nb_txq, &local_conf);
然后为每个核分配一个队列
uint lcore_id = 0;
memset(core_to_rx_queue, -1, sizeof(core_to_rx_queue));
memset(core_to_tx_queue, -1, sizeof(core_to_tx_queue));
uint nb_rx_queues = 0;
uint nb_tx_queues = 0;
while (lcore_id < EN_CS) {
if (rte_lcore_is_enabled(lcore_id)) {
if ((nb_rx_queues < nb_rxq) && (!(~core_to_rx_queue[lcore_id])))core_to_rx_queue[lcore_id] = nb_rx_queues++;
if ((nb_tx_queues < nb_txq) && (!(~core_to_tx_queue[lcore_id])))core_to_tx_queue[lcore_id] = nb_tx_queues++;
}
lcore_id++;
}
这个写的有点潦草,建议重新写一个
然后为每个核分配收发包任务
void *args;
args = (void *)mem_pool;
rte_eal_mp_remote_launch(task_per_logical_core, args, CALL_MAIN);
RTE_LCORE_FOREACH_WORKER(lcore_id) {
if (rte_eal_wait_lcore(lcore_id)) {
ret = -1;
break;
}
}
问题:#
配置完成后,每次收发包都打印是哪个核收发包,发现,只有主核的队列不停的接收数据和发送数据,其余核心也进入了task函数,但是不参与收发包。
解决:#
是vmware网卡的问题,用真实网卡测试一切正常。
作者: correct
出处:https://www.cnblogs.com/correct/p/16548379.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现