DPDK详解

DPDK的优点:

  1. 可以绑定到固定的core上运行;
  2. 舍弃内核中断,报文直接通过DMA传输到用户态处理;
  3. 单独的内存管理机制,效率高效;

用户态配置参数:

  • NB_MBUF:rte_mempool中包含的rte_mbuf元素的个数;
  • MBUF_SIZE:每个rte_mbuf元素的大小;
  • 环形队列的元素个数;

内存池:

1 l2fwd_pktmbuf_pool =
2     rte_mempool_create("mbuf_pool", NB_MBUF,  //rte_mempool包含的rte_mbuf元素的个数;
3                MBUF_SIZE, 32,                 //每个rte_mbuf元素的大小;
4                sizeof(struct rte_pktmbuf_pool_private),
5                rte_pktmbuf_pool_init, NULL,
6                rte_pktmbuf_init, NULL,
7                rte_socket_id(), 0);

环形队列:

  • 环形无锁队列,存储mempool中的对象指针
  • share_ring = rte_ring_create("TESTRING", 1048576, rte_socket_id(), rg_flags);

DPDK从队列摘包过程:

    void *obj;
    struct header_info *hdr;
    struct rte_mbuf *m;
    const char *p;
    while(1){
        ring_count = rte_ring_count(share_ring);  // share_ring = rte_ring_create("TESTRING", 1048576, rte_socket_id(), rg_flags);
        if(ring_count > 0){
            rte_ring_mc_dequeue(share_ring,&obj);
            hdr = (struct header_info *)obj;
            m = (struct rte_mbuf *)hdr->buffer;
            p = rte_pktmbuf_mtod(m, u_char *);
            (*pkt_parse)(p, m->data_len);
            rte_pktmbuf_free(m);
            rte_mempool_mp_put(header_info_pool, hdr);
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值