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 static inline int __attribute__((always_inline)) 2 __rte_ring_mp_do_...
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指令,...
rte_ring_mp_enqueue_bulk(mp->ring, &cache->objs[cache_size], cache->len - cache_size); cache->len = cache_size; } return 0 #endif //直接放回到ring队列 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. ...
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)) { ret = EDQUOT; }returnret; } 开发者ID:kikutak,项目名...
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,
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(mp->ring, obj); } 此时内存池结构,ring队列就关联起来了。来看下这两者之间的关联结构。 2、内存的申请 在创建好内存池后,当应用程序需要从内存池中获取一个对象元素的空间时,可以调用rte_mempool_get从内存池中获取一个元素空间。优先从每个cpu本身的缓存中查找是否有空闲的对象元素,如果...
(mp,put_bulk,1);RTE_MEMPOOL_STAT_ADD(mp,put_objs,n);driver_enqueue_stats_incremented:/* push objects to the backend */// 将对象释放到后端rte_ring的objs[]中rte_mempool_ops_enqueue_bulk(mp,obj_table,n);}static__rte_always_inlinevoidrte_mempool_generic_put(structrte_mempool*mp,void*...
static__rte_always_inlineintrte_ring_mp_enqueue(structrte_ring *r,void*obj) {returnrte_ring_mp_enqueue_bulk(r, &obj,1, NULL) ?0: -ENOBUFS; } * *@param r*A pointer to the ring structure.*@param obj_table* A pointer to a table ofvoid*pointers (objects).*@param n* The number...
flags:指定创建的ring的属性:单/多生产者、单/多消费者两者之间的组合。 0表示使用默认属性(多生产者、多消费者)。不同的属性出入队的操作会有所不同。 2.出入队 有不同的出入队方式(单、bulk、burst)都在rte_ring.h中。 例如:rte_ring_enqueue和rte_ring_dequeue ...