首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DPDK KNI的几个问题解决和后续发展

但是在网络中,存在一种mbuf chain情况(典型的,mbuf本身2k,收包9k,会串成5个mbuf构成的chain),在用户态这些mbuf都是通过虚拟地址方式连结,往KNI传递时会遇到地址转换问题。...KNI内核会得到错误地址,严重导致crash。 修复方式:提前将chain上mbuf地址转换为物理地址。 https://git.dpdk.org/dpdk/commit/?...id=5eb1708ec1db1f2d644f44a42468139df0b0ad6c KNI释放mbuf泄露问题 KNI早期实现未考虑KNI释放,FIFO中mbuf释放问题,反复创建/释放KNI...修复方式:KNI释放转换未处理的mbuf https://git.dpdk.org/dpdk/commit/?...更合理的方式是通过eventfd机制,用户态发包后唤醒kernel处理,采用NAPI类似方式,使得CPU/延/吞吐达到理想状态。

3.3K21

F-Stack发送零拷贝介绍

在将BSD协议栈mbuf的数据地址赋值给DPDK的rte_mbuf用于判断是否为初始化申请的内存池中的地址,并通过虚拟地址查找对应的物理地址,分别赋值给rte_buf结构的buf_addr/buf_physaddr...使用一个循环队列保存发送的mbuf的指针,队列的长度应该与NIC的tx_queue_length相同。在队列中的一项被推入新值之前,旧的 mbuf 必须由 NIC 处理并且可以安全地释放。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_USE_PAGE_ARRAY,并重新编译F-Stack lib 库和应用程序后才能生效。...结构内部mbuf链数据不需要释放,该结构可以在函数ff_zc_mbuf_get()中复用重新分配BSD的mbuf链。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_ZC_SEND,并重新编译F-Stack lib 库和应用程序后才能生效。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

F-Stack发送零拷贝介绍

在将BSD协议栈mbuf的数据地址赋值给DPDK的rte_mbuf用于判断是否为初始化申请的内存池中的地址,并通过虚拟地址查找对应的物理地址,分别赋值给rte_buf结构的buf_addr/buf_physaddr...使用一个循环队列保存发送的mbuf的指针,队列的长度应该与NIC的tx_queue_length相同。在队列中的一项被推入新值之前,旧的 mbuf 必须由 NIC 处理并且可以安全地释放。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_USE_PAGE_ARRAY,并重新编译F-Stack lib 库和应用程序后才能生效。...结构内部mbuf链数据不需要释放,该结构可以在函数ff_zc_mbuf_get()中复用重新分配BSD的mbuf链。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_ZC_SEND,并重新编译F-Stack lib 库和应用程序后才能生效。

71530

vpp IPsec with DPDK Cryptodev have buffer resource leak.

show dpdk buffer 查询到socket0 可用buffer内存只有764个,并且show interface rx-error 错误信息中显示rx-no-buffer确定是存在buffer...name="dpdk_mbuf_pool_socket0" available = 764 allocated = 127236 total = 128000 name="dpdk_mbuf_pool_socket1...,函数直接返回了,没有对buffer资源进行释放(vpp中能释放buffer资源的主要在drop节点,或者接口tx节点?)。...但是只是解决crypto_alloc_ops 申请失败导致dpdk mempool资源池buffer泄漏的问题,但是并未解决为什么会出现crypto_alloc_ops 失败的现象。...通过分析确认是异常场景下处理逻辑存在问题,异常将原始报文送到error-drop节点丢弃,但是从dpdk crypto mempool申请的资源未释放掉,导致资源泄漏,引起crypto_alloc_ops

1.1K50

DPDK-vpp 一次mbuf地址被踩的定位思路

期间也阅读了vpp mempool申请,释放、ring队列等等代码(使用的是比较老的版本,mbuf pool池还是dpdk上申请和管理的,这点和最新vpp源码有差异)。...时或者从mempool cache中取mbufmbuf地址是非法的。...2、mempool get和put时候,增加对ring队列上mbuf地址有效性检查。 3、在vpp node节点处理调度,增加对ring队列mbuf地址有效性检查。...(mp); + return ret; } 问题稳定复现: 上述修改后,我们确认每次调度完bfd报文处理后,出现mbuf地址异常,后续的bfd处理node代码进行分析,发现问题存在原因。...2、在第二周“在vpp node节点处理调度,增加对ring队列mbuf地址有效性检查”已经加了这个检测问题,但是当时环境还是多核,误认为是其他是其他node导致。

67750

从 10 Gb 到 40 Gb,从百万级到千万级转发,打造高性能 TGW

(2)在内核注册一个虚拟网络接口,若应用程序通过socket发报文,在内核准备通过虚拟网络接口发出去,会调用kni注册的发送函数,报文将被转换成mbuf结构,并被丢到与用户态程序通讯的ring中。...但是,也由此发现了一个DPDK的代码BUG: 若网卡采用向量收报文模式,并且开启了CONFIG_RTE_LIBRTE_MBUF_DEBUG,调用rte_eth_dev_stop,则一定概率上会出现core...分析代码,发现原因如下: (1)向量收报文模式下,mbuf结构转交给报文分发核处理后,其指针仍然留在网卡接收队列中,并没有清掉。报文转发出去后,mbuf结构会被网卡驱动给释放掉。...(2)调用了rte_eth_dev_stop,会遍历网卡接收队列,将其中所有mbuf结构给释放掉,结果将之前已经转发出去的报文对应的mbuf结构再次释放一遍,造成二次释放。...(3)开启CONFIG_RTE_LIBRTE_MBUF_DEBUG释放mbuf结构的代码中会判断,是否已经释放过了,如果已经释放过,则产生panic,从而产生core dump。

5.7K85

探究分段场景下vlib_buf在收发包的处理

在使用vpp老版本copy报文的时候,经常遇到mbuf泄露的问题,根本原因是在vlib_buffer分段场景下没有将rte_mbuf进行串联,导致dpdk发包造成了泄漏。...下面来分析一下: rte_mbuf、vlib_buf 关系及内存分布 首先,先来了解一下dpdk plugins。...相关的函数的,是因为vpp启动以dlopen动态加载的so库,使用需要使用需要dlsym函数负责动态加载符号(函数),第一个参数是句柄(由dlopen返回的),第二个参数就是给定的函数名称。.../*判断是否存在多段vlib_buf串联场景,将对应的mbuf也串联起来*/ dpdk_validate_rte_mbuf (vm, b[0], 1); /*设置网卡tx 卸载功能...*/ dpdk_buffer_tx_offload (xd, b[0], mb[0]); 所以我们其他模块操作分段vlib_buf,并不需要将考虑将rte_mbufd的进行处理。

2.4K30
领券