一种硬件流表hash冲突解决方法及系统技术方案

技术编号:37994418 阅读:8 留言:0更新日期:2023-06-30 10:08
本发明专利技术涉及云计算领域,针对硬件流表hash冲突会导致流表一直重复卸载,造成软硬件的资源浪费这一问题,提出一种硬件流表hash冲突解决方法,在hash桶法的基础上,固定单链表的长度,利用OVS

【技术实现步骤摘要】
一种硬件流表hash冲突解决方法及系统


[0001]本专利技术涉及云计算领域,尤其是涉及一种在智能网卡OVS

DPDK卸载中,解决硬件流表hash冲突的方法。。

技术介绍

[0002]智能网卡OVS

DPDK卸载方案中,OVS会通过DPDK提供的RTE_FLOW接口将软件流表卸载到硬件,硬件一般都采用哈希表(以下简称hash表)存储软件卸载的流表。在硬件构建流表的时候,我们常常会碰到两条流表的关键字计算的哈希值相同,即hash冲突,hash冲突不可避免。硬件流表hash冲突会导致流表一直重复卸载,造成软硬件的资源浪费,如何解决hash冲突就是一个亟待解决的问题。
[0003]现有技术中解决方法一般有四种:分离链表法,开放定址法,rehash法,建立公共溢出区。
[0004]1)使用分离链表法(也叫hash桶法)解决hash冲突的原理:利用链表解决冲突。将hash值相同的元素归于同一个子集,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头节点存储在hash表中。
[0005]2)使用开放定址法解决hash冲突的原理:当关键字key的哈希地址p=f(key)出现冲突时,以p为基础,产生另一个哈希地址p1,若p1仍然冲突,再以p为基础,产生另一个哈希地址p2,一直到找出一个不冲突的哈希地址pi,将相应元素存入其中。
[0006]3)使用rehash解决hash冲突的原理:提供多个哈希函数,如果第一个哈希函数计算出来的key的哈希值冲突了,则使用第二个哈希函数计算key的哈希值,第二个也冲突了就使用第三个,以此类推。
[0007]4)使用建立公共溢出区解决hash冲突的原理:将哈希表分为基本表和溢出表两部分,溢出表可以是另一块顺序表,也可以是另一块芯片(如TCAM),凡是和基本表发生冲突的元素,一律填入溢出表。
[0008]然而,上述解决hash冲突的四种方法,在智能网卡流表卸载场景中,都存在一定的缺陷:
[0009]1)Hash桶法需要遍历单链表才能找到地址,在链表长度较深时,查找带来的性能损耗无法接受。
[0010]2)开放地址法要求填装因子α较小,在智能网卡几百万到几千万的流表规模下,占用的内存空间很大。
[0011]3)Rehash需要多次计算,在hash冲突发生较频繁的时候,计算时间无法接受。
[0012]4)使用公共溢出区则是要增加额外的内存或者芯片,带来的功耗和成本压力不小。
[0013]由此可见,本领域亟需一种能够克服上述缺陷的能够解决hash冲突的方案。

技术实现思路

[0014]本专利技术的目的在于提供一种硬件流表hash冲突解决方法和系统,以解决上述
技术介绍
中在智能网卡流表卸载场景中解决hash冲突时存在的缺陷。
[0015]第一方面,本专利技术提供一种硬件流表hash冲突解决方法,其特征在于,所述方法由以下步骤构成:
[0016]S100,硬件收到第一报文,对所述第一报文进行解析,提取所述第一报文的key并计算其hash值,根据所述hash值找到对应hash桶;
[0017]S200,逐个比较所述hash桶中单链表的每个元素的key和报文的key是否匹配;
[0018]S300,如果key不匹配,直接跳过比较下一个key,如果key匹配,则按照对应的动作action执行对应操作。
[0019]S400,如果匹配至所述单链表结束仍未匹配成功,则判断所述单链表节点个数是否为预设值,如果是则构造第二报文,并将所述第二报文的reason字段赋值为hash桶满,并发送所述第二报文至OVS

DPDK软件模块。
[0020]第二方面,一种硬件流表hash冲突解决系统,所述系统包含硬件和OVS

DPDK软件模块,其特征在于:
[0021]硬件收到第一报文,对所述第一报文进行解析,提取所述第一报文的key并计算其hash值,根据所述hash值找到对应hash桶;
[0022]逐个比较所述hash桶中单链表的每个元素的key和第一报文的key是否匹配;如果key不匹配,直接跳过比较下一个key,如果key匹配,则按照key对应的动作act i on执行对应操作。
[0023]如果匹配至所述单链表结束仍未匹配成功,则判断所述单链表节点个数是否为预设值,如果是则构造第二报文,并将所述第二报文的reason字段赋值为hash桶满,并发送所述第二报文至OVS

DPDK软件模块。
[0024]本专利技术在hash桶法的基础上,固定单链表的长度,硬件在流表mi ss和流表卸载两种情况中,检测到对应的桶满,则给软件上报一个特殊的原因
‑‑‑‑
hash桶满,软件收到这个原因后,不会再卸载这个f l ow,即利用OVS

DPDK软件和硬件的报文通信机制,让OVS不重复卸载hash冲突且桶满的流表,软件兜底转发,保证了丢包率,增加了硬件的效率。
附图说明
[0025]为了更清楚地说明本专利技术或现有技术中的技术方案,下面将对本专利技术或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0026]图1硬件流表的哈希表结构;
[0027]图2硬件流表mi ss报文上送流程图;
[0028]图3单条流表卸载流程图。
具体实施方式
[0029]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例
中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0030]在本专利技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本专利技术。在本专利技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
[0031]应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0032]取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种硬件流表hash冲突解决方法,其特征在于,所述方法由以下步骤构成:S100,硬件收到第一报文,对所述第一报文进行解析,提取所述第一报文的key并计算其hash值,根据所述hash值找到对应hash桶;S200,逐个比较所述hash桶中单链表的每个元素的key和报文的key是否匹配;S300,如果key不匹配,直接跳过比较下一个key,如果key匹配,则按照对应的动作action执行对应操作。S400,如果匹配至所述单链表结束仍未匹配成功,则判断所述单链表节点个数是否为预设值,如果是则构造第二报文,并将所述第二报文的reason字段赋值为hash桶满,并发送所述第二报文至OVS

DPDK软件模块。2.一种如权利要求1所述的硬件流表hash冲突解决方法,其特征在于,所述发送所述第二报文至OVS

DPDK软件模块,还包括:OVS

DPDK收到所述第二报文后判断reason字段是否为hash桶满,如果是则将本地缓存中对应流表的标记更新为不可卸载,该流表对应的报文由软件进行转发。3.一种如权利要求2所述的硬件流表hash冲突解决方法,其特征在于,所述硬件收到第一报文,包括:所述第一报文为一条流的首包业务报文。4.一种如权利要求3所述的硬件流表hash冲突解决方法,其特征在于,所述如果是则构造第二报文,包括,第二报文为硬件流表miss报文,OVS

DPDK收到所述硬件流表miss报文后转发报文并将流表插入本地缓存中;所述判断所述单链表节点个数是否为预设值,还包括,如果判断结果为否,则直接向OVS

DPDK上报硬件流表miss报文。5.一种如权利要求3所述的硬件流表hash冲突解决方法,其特征在于,所述OVS

DPDK收到所述第二报文后判断reason字段是否为hash桶满,包括,如果为否则将将本...

【专利技术属性】
技术研发人员:杨一帆邹明文旭刘珂李易吴绍华
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1