dpdk常用函数接口

入口函数

int rte_eal_init(int argc, char **argv)

内存池函数:

rte_pktmbuf_pool_create()  它是函数 rte_mempool_create 的一个封装(rte_mbuf*)。

struct rte_mempool *         

rte_pktmbuf_pool_create(const char *name, unsigned n,

        unsigned cache_size, uint16_t priv_size, uint16_t data_room_size,

        int socket_id)

name是内存池名字。为了获得更好的性能,n应该为2的幂减1 。

注意flag,默认为0,ring_mp_mc

rte_pktmbuf_free() //rte_mbuf_raw_free的封装

rte_pktmbuf_alloc()

rte_pktmbuf_reset()

rte_mempool_avail_count()

rte_mbuf_raw_alloc()

rte_mbuf_raw_free()

rte_mempool_create()  //内存池创建

rte_mempool_lookup() //内存池查找 key==name

rte_mempool_get()       //pop内存

rte_mempool_put()       //push内存

内存函数

rte_malloc()

rte_zmalloc()

rte_calloc()

rte_realloc()

rte_xxx_socket() //指定numa

rte_free()

rte_memcpy()

网卡操作函数:

rte_eth_dev_configure()  设置网卡设备。在其他操作之前,先调用这个函数进行设置。

rte_eth_rx_queue_setup()  申请并设置一个收包队列。

    关键参数: struct rte_mempool *mp; 由前文创建的pool

rte_eth_tx_queue_setup()   申请并设置一个发包队列。

rte_eth_dev_start() 就是设置好了之后就启动啊,该收的收,该发的发。

rte_eth_promiscuous_enable()  启动混杂模式,不解释。

收发包函数:

rte_eth_rx_burst()  收一大批包。该接口不提供任何错误检测功能,上层应用可以在返回包数为零时,去主动检测link状态来完成接口异常及错误检测机制。

    关键参数:

     struct rte_mbuf** rx_pkts;  一个指针数组,数组中的每一个指针指向收取到的一个包,具体的包结构查看下文的数据结构章节。指针所指向的内存空间为queue_setup(mpool) 函数中的参数pool提供。

     const uint16_t nb_pkts;  简单来说,就是数组大小。

    返回值:

      收到的报数,数组中被填充的item个数。

      当返回值== nb_pkts时,隐含说明,收包性能已经跟不上了。

      当返回值== 0 时,应该启动异常检测,查看接口状态等。

rte_eth_tx_burst()  发一大批包

rte_pktmbuf_free()  收到了但是没有被发出去的包,应该将其free,即还给mpool。

rte_eth_add_rx_callback()  //设置收包回调

rte_eth_add_tx_callback()  //设置发包回调

rte_eth_tx_buffer_set_err_callback() //设置发包error回调

队列操作函数

rte_ring_create() 创建队列,注意flag,默认0,多线程安全。

RING_F_SC_DEQ | RING_F_SP_ENQ 

RING_F_MP_RTS_ENQ| RING_F_MC_RTS_DEQ

RING_F_MP_HTS_ENQ| RING_F_MC_HTS_DEQ

rte_ring_lookup()   根据name查找队列

rte_ring_dequeue() 出队列

rte_ring_enqueue() 入队列

rte_ring_count()   队列数量

rte_ring_full()       队列满

rte_ring_empty()  队列空

KNI操作函数

待补充,还没看呢~~~

其他函数:

rte_eth_dev_count()

返回可以被dpdk使用的网口个数。即(加载了UIO驱动,或VFIO ??) rte_eal_init 之后就可以用了。

rte_lcore_id(): 返回逻辑核ID

rte_lcore_count()

rte_get_main_lcore()

rte_lcore_to_cpu_id()

rte_socket_id(): 返回CPU sock 的ID,即命令参数中指定的lcore所属的CPU numa。

rte_socket_count()

rte_lcore_to_socket_id()

rte_eal_remote_launch()   用于在多个核上启动多线程,原例子中用法如下: RTE_LCORE_FOREACH_SLAVE(lcore_id) {    

                rte_eal_remote_launch(lcore_hello, NULL, lcore_id);

        }

       lcore_id = rte_lcore_id();

rte_eal_mp_remote_launch()用于在多个核上启动多线程,原例子中用法如下:

/* launch per-lcore init on every lcore */

       rte_eal_mp_remote_launch(l2fwd_launch_one_lcore, NULL, CALL_MAIN);

       RTE_LCORE_FOREACH_WORKER(lcore_id) {

              if (rte_eal_wait_lcore(lcore_id) < 0) {

                     ret = -1;

                     break;

              }

       }

rte_eal_wait_lcore() //对应rte_eal_remote_launch()

rte_eal_mp_wait_lcore() //对应rte_eal_mp_remote_launch()

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值