Cisco VPP(vectors packets processing)中Vectors解析

本文深入探讨了Cisco VPP中的Vectors,它是一个动态大小的可变数组,用于高效内存管理和数据结构存储。Vectors通过统一数据结构的存储方式,简化内存管理,便于运行时数据分析、数据同步和恢复。常见的内存操作如resize、alloc、dup等都可以通过Vectors实现,并可应用于数组和其他复杂数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vectors 的本质

外在表现

很简单,实际上就是一个动态的可变大小数组。这个数组:

  1. 每个元素的大小可以变化,数组大小可以变化。从而使得其可以作为任何数据结构的存储结构,事实上,VPP就是这样做的,所有数据结构的存储结构就是vectors。
  2. 用户自定义头结构,表示vectors表示的存储结构对应的全部或部分逻辑结构的信息。
  3. 利用头部位图表示数组某个元素是否已经被使用
  4. 用户可以用C数组的访问方式访问vectors,效率极高
  5. 提供了一系列对vectors的操作宏,函数。
  6. 对vector中的数据结构,经过指针变换后,仍然保持原数据结构的访问方式。

为什么定义vectors结构

这实际上是网络操作系统多年实践中得来的经验。作为转发协议栈:

  1. 需要极致高效,
  2. 从1, 各模块需要共享数据结构
  3. 新的特性,协议及相关的安全需求不断出现导致其更新永不停,
  4. 可移植,可维护,可扩展,可测试,可调试
  5. 热插拔,主备冗余转发表数据同步及恢复

这些需求直接导致的就是转发协议栈程序极易出现bug,尤其是内存相关的bug。因此,普遍的,网络操作系统通常自己实现一个内部的内存管理系统,期待更细致的跟踪每个模块甚至每个数据结构的内存使用,但这种系统往往仍然是一个大一统方案,仅仅增加了一些公用的使用统计信息,对每个数据结构的分析仍然要依靠各模块做额外

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任成珺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值