- 概述
vpp的hash结构分为hash头、桶(_hash_create或hash_resize申请)和桶下元素(clib_mem_realloc申请),总共3个部分组成。
根据元素key的hash值不同,分配到不同的桶下,与其他hash表原理相同。
vpp的hash结构默认是支持动态扩容的,即当hash表存放键值对大于3/4哈希桶的个数时,会2倍扩容。
哈希冲突时,vector长度认为是没有限制的。
如非特殊说明,以存储key和value来进行介绍,即log2_pair_size > 0。
(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
- hash结构图
hash struct (原图更清晰)
- hash_t:hash_header
/* Vector header for hash tables. */
typedef struct hash_header
{
/* 哈希表元素数量,包括所有桶下的元素 */
uword elts;
/* 标记位,包括以下3种取值 */
u32 flags;
/* 自动扩容,默认打开 */
#define HASH_FLAG_NO_AUTO_GROW (1 << 0)
/* 自动缩减,默认关闭 */
#define HASH_FLAG_NO_AUTO_SHRINK (1 << 1)
/* 当hash_next在遍历此散列表的过程中进行