DPDK简介及相关资料整理

2024-09-03 01:36
文章标签 整理 相关 资料 简介 dpdk

本文主要是介绍DPDK简介及相关资料整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DPDK全称为Date planedevelopment kit,是一个用来进行包数据处理加速的软件库。与传统的数据包处理相比,DPDK具有以下特点:

1) 轮询:在包处理时避免中断上下文切换的开销,

2) 用户态驱动:规避不必要的内存拷贝和系统调用,便于快速迭代优化

3) 亲和性与独占:特定任务可以被指定只在某个核上工作,避免线程在不同核间频繁切换,保证更多的cache命中

4) 降低访存开销:利用内存大页HUGEPAGE降低TLB miss,利用内存多通道交错访问提高内存访问有效带宽

5) 软件调优:cache行对齐,预取数据,多元数据批量操作

DPDK架构

DPDK收发包相关

一台服务器可能有多个网卡,接入到PCIe通道,每个网卡可能有一个或多个物理网口,即port,这些网口共用网卡的处理芯片。对于Intel E810 100Gbps网卡为例,单个port的接收和发送速率为100Gbps,但是两个网卡的速率最多为160Gbps左右。一个port可以有多个接收/发送队列,例如 E810 100Gbps网卡,一个port最多可以支持256个接收队列,当网卡接收到数据包时会将数据包按照RSS负载均衡算法分配给这些队列,不同的线程可以从这些队列中获取数据并处理,这样的目的是可以充分发挥多核CPU的性能。一个接收/发送队列可以设置一定数量的队列描述符,用于存放数据包的metadata。例如,E810 100Gbps网卡,最多支持4096个Rx描述符,即可以同时允许4096个数据包在网卡中等待应用程序处理,如果此时还有新的数据包到达网口,这些数据包只能被drop,就是丢包的意思。描述符中存放的是数据包在内存中的地址,而不是数据包本身。

以DPDK收包为例,首先会调用rte_pktmbuf_pool_create函数为不同的port创建内存池,内存池中可以存放mbuf对象,即数据包对象,
struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create(
            strbuf, NUM_MBUFS_DEFAULT, MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, socket_id);
            
然后调用rte_eth_dev_configure设置队列数量,
ret_val = rte_eth_dev_configure(port_id, rx_queues, 0, &port_conf);

接着设置每个队列的描述符数量以及关联mbuf_pool,
for (uint16_t i = 0; i < rx_queues; i++) {
    ret_val = rte_eth_rx_queue_setup(port_id, i, rx_descs, rte_eth_dev_socket_id(port_id), NULL,
                                     mbuf_pool);
    if (ret_val) {
        RTE_LOG(ERR, NTR,
                "Failed to configure descriptors for port %d with rx queue %d, error: %s\n",
                port_id, i, rte_strerror(-ret_val));
        return ret_val;
    }
}
最后启动port,
ret_val = rte_eth_dev_start(port_id);

启动port后,可以调用rte_eth_rx_burst来轮询(PMD)获取一定数量的数据包,
rx_pkt_nb = rte_eth_rx_burst(config->port, config->queue, bufs, WORKER_RTE_MBUF_SIZE);
数据包以这个结构struct rte_mbuf *bufs[WORKER_RTE_MBUF_SIZE];来存放。

处理完数据包以后,调用函数rte_pktmbuf_free_bulk来释放相关资源,应该包含清空rx queue中的描述符,清空mbuf_pool中的数据等,
rte_pktmbuf_free_bulk(bufs, rx_pkt_nb);

参考:

wangxiaohui2015/dpdk_engineer_manual

这篇关于DPDK简介及相关资料整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131653

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。