picaso77
从事嵌入式linux软件开发工作
展开
-
DPDK无锁队列
首先说明下几个关键指针: r->prod.head:接下来开始进行入队的位置; r->prod.tail:已经入队完成的位置; 若r->prod.head > r->prod.tail,说明有core正在执行入队操作,两者相等时说明入队完成; r->cons.head:接下来开始进行出队的位置; r->cons.tail:出队已完成的位置; 若 r->...原创 2022-03-02 23:15:28 · 217 阅读 · 0 评论 -
DPDK rte_mbuf结构解析
1、单segment的rte_mbuf2、多segment的rte_mbuf3、间接buffer dpdk使用该方式来进行ip报文的分片,申请直接buf来进行ip头部的存放,申请间接buf直接在rte_mbuf记录分配给其的原mbuf的data地址和长度;在下行发包时将直接buffer和间接buffer进行dma时,ip头部dma的时直接buf上的数据区,间接buffer根据其记录的数据区的物理地址,实际dma的是原mbuf的数据区的地址和分配给其的长度; ...原创 2021-09-07 21:21:30 · 1520 阅读 · 0 评论 -
dpdk的kni模块实现原理
一、kni虚拟网卡与物理网卡的对比 相同点: kni虚拟网卡驱动与物理网卡驱动一样,需要在linux内核申请虚拟网卡设备的struct net结构体,并注册到网络命名空间,交由linux内核net模块进行网卡资源的操作; 其与网卡驱动一样,kni内核模块需要对该其网卡队列分配用于收发包的mbuf内存,要实现虚拟网卡的收发包方法,已经通过ethtool对虚拟网卡进行管理的接口; 不同点: 与物理网卡驱动不同的是,kni虚...原创 2021-08-01 18:47:31 · 696 阅读 · 0 评论 -
DPDK的igb_uio内核态和用户态实现
igb_uio驱动:将igb_uio驱动注册到PCI总线,驱动提供以下机制: 1、igbuio_pci_probe: 1.1、通过在PCI总线读取设备的resource配置信息(BIOS在系统初始化时将系统分配给设备的配置信息写入到PCI总线的配置空间也将配置写入到pci设备的resource字段),将设备分配的IO内存地址、大小、端口号等信息获取出来; ...原创 2020-04-15 23:33:11 · 1878 阅读 · 0 评论 -
以testpmd为例分析DPDK网卡启动流程
以testpmd为例分析DPDK网卡启动流程:1、调rte_eal_init进行DPDK初始化;2、调rte_log_register进行日志的注册、调rte_log_set_level进行日志等级注册;3、register_eth_event_callback:注册网卡中断的回调函数;4、rte_pdump_init:将收发包的抓包打印回调函数添加到action_entry上,entry-&g...原创 2020-08-31 21:56:25 · 849 阅读 · 0 评论 -
dpdk之memcpy优化
最近看某技术论坛,看到同是后台开发的同学,面试腾讯并回忆了一题关于是否知道memcpy优化相关的。因为工作原因,是好久没有使用到类似这些库函数,并思考着优化方面,然后带着兴趣去研究下。本身优化这件事情,是需要测试评估的,不过早优化,还是先以程序功能正确和稳定,后面有瓶颈再通过一些工具去压测,找出热点,8-2原则,使用时间复杂度更低的数据结构或算法去代替并回归测试,或以空间换时间。见过网上大...原创 2020-03-14 20:39:33 · 294 阅读 · 0 评论 -
DPDK IP分片与重组免拷贝的实现分析
DPDK IP分片与重组设计实现前言 IP的分片和重组会影响效率,应该尽量避免分片包的形成。在TCP中,已经自己限定了MSS,默认是536字节,不会形成IP分片。所以值得注意的就是UDP包和ICMP,他们并未对此作出限定。因此,在发送数据包时需要注意包的大小。在这篇文章中,我们主要分析在DPDK中,是怎么设计分片和重组的。设计时要考虑的问题:分片:1.如何确定要进行分片?...原创 2019-12-05 23:12:46 · 521 阅读 · 0 评论 -
DPDK用户态kni实现
以DPDK的kni example分析用户态kni实现:1、DPDK初始化;2、申请mbuf pool内存池:pktmbuf_pool;3、init_kni 若网卡的kni_port_params_array的nb_lcore_k未设置,设置nb_lcore_k为1; rte_kni_init:打开kni设备文件,获取kni设备文件fd:kni_fd;4、查找ports_mas...原创 2020-04-15 23:19:30 · 894 阅读 · 0 评论 -
DPDK KNI内核态代码流程
KNI内核态代码流程:module_init(kni_init);初始化 kni_init 模块;kni_init : 1、检查 kthread 、 carrier 配置; 2、register_pernet_subsys(&kni_net_ops):将kni_net_ops添加到到*first_device = &pernet_list链表(需要使用网络子模块的协议栈...原创 2020-04-15 23:21:14 · 271 阅读 · 0 评论 -
DPDK 网卡驱动总结
RTE_PMD_REGISTER_PCI(net_ixgbe, rte_ixgbe_pmd) 调构造函数,在mian函数之前将rte_ixgbe_pmd驱动注册到rte_pci_bus.driver_list上,driver名为net_ixgbe; --》该链表在ret_bus_probe时触发RTE_PMD_REGISTER_PCI_TABLE(net_ixgbe, pci_id_ix...原创 2020-04-15 23:21:55 · 1828 阅读 · 0 评论