struct rte_ring *r = rte_ring_create(“MY_RING”, 1024,rte_socket_id(), 0); 2.出入队 有不同的出入队方式(单、bulk、burst)都在rte_ring.h中。 例如:rte_ring_enqueue和rte_ring_dequeue 这种数据结构与链表队列相比: 优点如下: 更快:比较void *大小的数据,只需要执行单次Compare-And-Swap指令,...
29 struct rte_ring_debug_stats stats[RTE_MAX_LCORE]; 30 #endif 31 32 void * ring[0] __rte_cache_aligned; /**< Memory space of ring starts here. 33 * not volatile so need to be careful 34 * about compiler re-ordering */ 35 }; 3.2 入队函数 __rte_ring_mp_do_enqueue: 1 sta...
}if(rte_ring_enqueue_bulk(ring, (void**)mbufs, BURST_SIZE,NULL) ==0) {for(inti =0; i < BURST_SIZE; i++) {rte_pktmbuf_free(mbufs[i]); } } }returnNULL; }void*consumer(void*arg){while(1) {structrte_mbuf*mbufs[BURST_SIZE];unsignedintnb_rx =rte_ring_dequeue_bulk(ring, (...
.dequeue=common_ring_sc_dequeue, .get_count=common_ring_get_count, };staticconststructrte_mempool_ops ops_sp_mc ={ .name="ring_sp_mc",/*单生产者多消费者*/.alloc=common_ring_alloc, .free=common_ring_free, .enqueue=common_ring_sp_enqueue, .dequeue=common_ring_mc_dequeue, .get_count...
common_ring_mc_dequeue(structrte_mempool *mp,void**obj_table, unsigned n) {returnrte_ring_mc_dequeue_bulk(mp->pool_data, obj_table, n, NULL)==0? -ENOBUFS :0; } rte_ring_mc_dequeue_bulk(structrte_ring *r,void**obj_table,
rte_ring_sp_enqueue_bulk(mp->ring, obj_table, n); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 到此为止内存池的实现就已经分析完成了, 内存池也是dpdk报文能够高速转发,零拷贝的基础。
ret = rte_ring_sp_enqueue_bulk( app.rings_tx[i ^1], (void**) worker_mbuf->array, app.burst_size_worker_write); }while(ret <0); } } 开发者ID:0day-ci,项目名称:dpdk,代码行数:32,代码来源:runtime.c 示例14: rte_lcore_id ...
ret = rte_ring_sp_enqueue_bulk(message_ring, (void*const*)mbufs, num_pkts);if(ret == -ENOBUFS) {for(i =0; i < num_pkts; i++) { rte_pktmbuf_free(mbufs[i]); } ret = ENOBUFS; }elseif(unlikely(ret == -EDQUOT)) { ...
We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Cancel Create saved search Sign in Sign up {{ message }} ...
解决方案是在DPDK lcore线程上执行所有使用mbuf的代码。没有必要在所有使用rte_pktmbuf_free()的线程上...