前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Learning vppinfra:bitmap结构解析

Learning vppinfra:bitmap结构解析

作者头像
dpdk-vpp源码解读
发布2024-04-28 14:57:32
1850
发布2024-04-28 14:57:32
举报
文章被收录于专栏:DPDK VPP源码分析

Bitmap是一种紧凑的数据结构,它使用一组连续的比特位(bits)来表示一组数据元素的状态或存在性。每个比特位对应一个特定的数据元素,值通常为0或1,表示该元素是否满足某种条件(如是否存在、是否已使用等)。由于比特是最小的存储单位,使用bitmap可以大大节省存储空间,特别适合处理大量整数型数据。

位图一般都使用数组来实现的,数据的每一个元素的二进制位都表示一个数据在或不在的状态。0表示数据不存在,1表示数据存在。

vppinfra--bitmap的实现接口

vppinfra 结构中bitmap 是通过索引set或get bit位的数值;位宽64bits,unsigned long 类型。底层也是一个vector结构。其内存分布结构如下所示:

bitmap结构在vpp中应用很广泛,比如在创建接口时,用于存储接口instace ID是否被占用;在pool数据结构中,用来判断索引是否释放等等。

  • bitmap 存储区内存申请 1、按照指定的位图数量申请bitmap内存区。
代码语言:javascript
复制
/** 按照指定的位图bits数量申请bitmap内存区。
    @param [out] v - bitmap的首地址
    @param n_bits - 请求的bits数量
*/
#define clib_bitmap_alloc(v,n_bits) \
  v = vec_new (uword, ((n_bits) + BITS (uword) - 1) / BITS (uword)

2、确保bitmap内存区至少有n_bits ,不满足会动态扩充

代码语言:javascript
复制
#define clib_bitmap_validate(v,n_bits) \
  clib_bitmap_vec_validate ((v), ((n_bits) - 1) / BITS (uword)
  • bitmap 设置指定bit位
代码语言:javascript
复制
/* ai:bitmap的指针
 * i :需要操作d的bit位置
 * value : 设置i对应bit位位的数值,
 * return: 必须注意,当i不在ai内存范围内时,会对ai进行重新mmalloc
 * 可能存在ai执向内存区位置变更。
 */
always_inline uword *
clib_bitmap_set (uword * ai, uword i, uword value)
  • bitmap 获取指定bit位
代码语言:javascript
复制
/** Gets the ith bit value from a bitmap
    @param ai - bitmap 头指针
    @param i - 要询问的bit位位置
    @returns 返回bit位的数值,存在两种情况
             1、询问的bit位位置超过ai存储区d的大小,返回0
             2、正常返回bit位的数值。
*/
always_inline uword
clib_bitmap_get (uword * ai, uword i)
  • 设置或者获取一段范围内的bitmap数值
代码语言:javascript
复制
/*  n_bits 必须小于等于64。
 * i :起始bit位置
 */
always_inline uword
clib_bitmap_get_multiple (uword * bitmap, uword i, uword n_bits)
/* 必须需要注意bitmap位置的变更。
 */
always_inline uword *
clib_bitmap_set_multiple (uword * bitmap, uword i, uword value, uword n_bits)
  • 总结

本文只是简单介绍了vppinfra库中bitmap的简单的set和get使用及内存结构分布。还有很多其他的操作有需要了解的可以详细读源码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档