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...
有不同的出入队方式(单、bulk、burst)都在rte_ring.h中。 例如:rte_ring_enqueue和rte_ring_dequeue 这里只是简要介绍使用方法,本文的重点是介绍ring的整体架构。 二、创建ring struct rte_ring { /* * Note: this field kept the RTE_MEMZONE_NAMESIZE size due to ABI * compatibility requirements, it co...
len_to_cpy= RTE_MIN(data_len - offset, desc->len -vb_offset); };/*Update used ring with desc information*/vq->used->ring[res_cur_idx & (vq->size -1)].id =head[packet_success];/*Drop the packet if it is uncompleted*/if(unlikely(uncompleted_pkt ==1)) vq->used->ring[res_...
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 ...
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)) { ...
uint16_t rte_vhost_dequeue_burst(int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count) //数据包流向 VM 到 OVS 具体的发送过程概括来说就是,如果OVS往VM发送数据包,对应的vhost端口去avail ring中读取可用的buffer地址,转换成VVA后,进行数据包拷贝,...
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指令...