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...
具体的发送过程概括来说就是,如果OVS往VM发送数据包,对应的vhost端口去avail ring中读取可用的buffer地址,转换成VVA后,进行数据包拷贝,拷贝完成后发送eventfd通知VM;如果VM往OVS发送,则相反,从VM内的数据包缓冲区拷贝到DPDK的mbuf数据结构。以下贴一段代码注释吧,不要管里面的iommu、iova,那些都是vhost-user的新特性...
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_...
RTE_CACHE_LINE_SIZE, rte_socket_id());if(udpi.msg_rings ==NULL)rte_panic("Cannot allocate memory to store ring pointers\n");for(i =0; i < n_swq; i++) {structrte_ring*ring;charname[32];snprintf(name,sizeof(name),"udpi_ctrlmsg_%u", i); ring = rte_ring_create( name,16,...
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 ...
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...
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指令...
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)) { ...
ptask->rx_params_sw.last_read_ring =0; } INCR_EMPTY_CYCLES(ptask->stats,rte_rdtsc() - cur_tsc);return0; }else{returnMAX_RING_BURST; }#elseuint16_tnb_rx = rte_ring_sc_dequeue_burst(ptask->rx_params_sw.rx_rings[ptask->rx_params_sw.last_read_ring], (void**)rx_mbuf, MAX_...