欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。 (QQ交流群:127163755)

dpdk的cache队列,每个核本地缓存队列,收包队列关系

0 投票
1.请问cache队列和本地缓存队列有关系吗?

    是不是网卡队列收到数据后写入cache队列再写入本地队列?

2.通过函数rte_eth_rx_burst收包,是从哪个队列里面取出来的?

    本地队列还是内存池ring队列还是。。。。
最新提问 12月 1, 2016 分类:DPDK其他问题 | 用户: lz (1,090 分)

1个回答

+1 投票
不清楚题主说的cache队列是什么,印象中DPDK mempool的确有个cache的概念,这个cache是个数组队列,mempool建立的时候会给每个进程分配一个cache,cache所有者是完全无锁的。   题主提到的cache队列应该指的是这个吧,如果是这个的话,那么cache队列和收包队列的关系就显而易见了。

DPDK收包永远只会去从rx-queue里收,这个也就是题主的收包队列,那么内存池的cache队列发挥了什么作用呢?

这就牵涉到DPDK的收包机制了,我们从queue中收走了一个mbuf,必须要替换一个空的mbuf进去,以准备存放下个网络报文数据,这个new mbuf就是从mempool中alloc出来的,alloc总是优先从mempool cache中分配,只有当cache耗尽的时候,才会从mempool公共资源中分配,这就会带来锁的消耗。

题主还有疑问的话可以看看我写的一篇微博(虽然写得不怎么好,但是把收包过程讲得比较清楚了)
最新回答 5月 8, 2017 用户: qingnan (540 分)
层主,请教一个问题,在kni的例子中,用rte_eth_rx_burst收包,为啥每次总是收四个才处理?否则就一直在内存中缓存。谢谢~
网卡的收发包描述符一般是16或者32字节,而处理器缓存基本单位一般为64字节,所以,一个处理器缓存单位可以存放4个或者2个收包描述符,你看到总是收四个才处理,是为了提高效率,尽可能的避免多次访问。
...