VPP源码阅读----vppinfra 结构说明

vppinfra 相关结构学习

相关视频地址可以在B站上搜索的,但是ppt暂时没有找到,自己的阅读截图说明了。

vec

vec结构是最基础的类型,图片的右下角的大字比较醒目,也是初学者很容易犯的错误:

Allocation only increases,Vector origin pointer may changer,store indexes(not pointers)!

vector 原始指针可能会改变,存储索引而不是指针。这种说法成立的前提是vector操作中不调用vec_del函数,否则也不能存储索引。
通过下面vec_del1的实现就可以确认,存储索引也不是绝对安全的。

#define vec_del1(v,i)				\
do {						\
  uword _vec_del_l = _vec_len (v) - 1;		\
  uword _vec_del_i = (i);			\
  if (_vec_del_i < _vec_del_l)			\
    (v)[_vec_del_i] = (v)[_vec_del_l];		\
  _vec_len (v) = _vec_del_l;			\
  CLIB_MEM_POISON(vec_end(v), sizeof ((v)[0])); \
} while (0

在这里插入图片描述

bitmap

通过索引设置或获取bits位的数值。uword类型,底层是一个vec结构。

/** Allocate a bitmap with the supplied number of bits
    @param [out] v - the resulting bitmap
    @param n_bits - the required number of bits
*/
#define clib_bitmap_alloc(v,n_bits) \
  v = vec_new (uword, ((n_bits) + BITS (uword) - 1) / BITS (uword))

在这里插入图片描述

pool

固定大小的内存池,基于vec和位图实现的。内存池使用的目的,下图也很明显的说明le

Sparse memory assignment ,Avoids memory fragmentation. Fast
稀疏内存分配,避免内存碎片,快速

https://www.bilibili.com/video/BV1ST4y1g7Dt/

heap

可变元素大小的内存池。 底层结构中mhash有使用heap、再就是老版本的多吓一跳场景的路由模块

Rarely used (pool are faster) 很少使用,内存池更快
still efficient 但是也很有用
to be used if you need variably sized allocations 如果需要可变大小的分配,则使用
在这里插入图片描述

bihash

bihash的相关介绍可以参见博客 vpp官方bihash介绍

Bihash(Bounded-index extensible hash),个人认为其特点可大致概括如下:
1、bihash支持8/16/24/40/48等类型,减少对于_mm_crc32_u32/16等的使用,提高效率的同时,避免引入GCC的bug;
2、bihash使用64bit Hash值,最多可以支持双层hash查找,第一层bucket查找,第二层page查找(后面具体分析其hash结构);
3、bucket大小和page大小均为2的指数倍,因此hash查找时,仅需要位与操作即可;
4、采用working_copy,bucket操作区变换前后添加内存屏障,实现线程安全,使得bihash的查找无锁,修改时仍可进行查找;
5、采用freelists减少heap的碎片化,同时提高分配效率;
6、采用cache_lru的方式,提高查找效率。

在这里插入图片描述

format

在这里插入图片描述

unformat

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值