CN111541617B - 一种用于高速大规模并发数据流的数据流表处理方法及装置 - Google Patents

一种用于高速大规模并发数据流的数据流表处理方法及装置 Download PDF

Info

Publication number
CN111541617B
CN111541617B CN202010305885.1A CN202010305885A CN111541617B CN 111541617 B CN111541617 B CN 111541617B CN 202010305885 A CN202010305885 A CN 202010305885A CN 111541617 B CN111541617 B CN 111541617B
Authority
CN
China
Prior art keywords
fingerprint
data stream
bucket
record
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010305885.1A
Other languages
English (en)
Other versions
CN111541617A (zh
Inventor
张进
杨盾
裴学武
江逸茗
卜佑军
马海龙
伊鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Network Communication and Security Zijinshan Laboratory
Original Assignee
Network Communication and Security Zijinshan Laboratory
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Network Communication and Security Zijinshan Laboratory filed Critical Network Communication and Security Zijinshan Laboratory
Priority to CN202010305885.1A priority Critical patent/CN111541617B/zh
Publication of CN111541617A publication Critical patent/CN111541617A/zh
Priority to US17/996,378 priority patent/US20230231808A1/en
Priority to PCT/CN2020/124355 priority patent/WO2021208403A1/zh
Application granted granted Critical
Publication of CN111541617B publication Critical patent/CN111541617B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/54Organization of routing tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/742Route cache; Operation thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种用于高速大规模并发数据流的数据流表处理方法及装置,涉及网络通信技术领域,能够避免在高速网络中由于数据流表操作时间的不确定,降低报文处理时延,以及缓减丢包的问题。本发明包括:根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹;检测指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶;从目标桶的底部单元向顶部单元依次查询空单元,当查询到目标桶中的空单元时,将待插入数据流的数据流指纹写入查询到的空单元,并将待插入数据流的流记录写入与候选桶对应的记录桶。本发明适用于高速大规模并发数据流的场景。

Description

一种用于高速大规模并发数据流的数据流表处理方法及装置
技术领域
本发明涉及网络通信技术领域,属于高速大规模并发数据流的流表设计与实现,尤其提供一种用于高速大规模并发数据流的数据流表处理方法及装置。
背景技术
目前网络通信技术方案中所使用的数据流表,其主要作用是存储网络中每条数据流的状态信息,是实现报文转发、流量分类、网络入侵检测、网络流量与用户行为分析、网络地址转换、流量计费等网络功能所需的基本组件之一,数据流表的处理效率对于上述网络功能实际性能有着非常重要的影响。
当前,随着云计算和网络功能虚拟化(NFV)技术的快速发展,基于通用服务器平台,利用软件实现高性能的网络功能成为业界关注的热点之一。随着网络链路速率的飞速提升,网络中并发数据流的数量日益增大,每个报文所允许的处理时间日趋缩短。而目前所采用得经典的哈希表方式来实现大规模数据流表,会带来如下两个问题:首先,经典哈希表需要采用较低的负载率来降低冲突概率,空间效率低,当数据流表规模庞大时,存储空间浪费严重;其次,经典哈希表采用开放定址或链表的方式来处理哈希冲突,最坏条件下的查表时间可能较长,从而造成系统性能颠簸,在高速网络环境中容易导致丢包。
因此,在目前的改进方案中,也通过高性能的网络报文处理软件采用空间效率更高、查表性能更为确定的哈希算法,如业界广泛采用的开源报文处理软件库DPDK,就采用cuckoo哈希表来实现数据流表。虽然cuckoo哈希表虽然具有较高的空间效率和确定的更新性能,然而,在插入新的流记录时,可能需要移动表中已有的多个记录,从而需要较长的插入时间,尤其是在处理海量的并发数据流的场景中,在高速网络中由于数据流表操作时间的不确定,导致报文处理时延增大、甚至造成丢包的问题。
发明内容
本发明的实施例提供一种用于高速大规模并发数据流的数据流表处理方法及装置,能够避免在高速网络中由于数据流表操作时间的不确定,降低报文处理时延,以及缓减丢包的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本申请实施例提供一种用于高速大规模并发数据流的数据流表处理方法,包括:
根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹,其中,所述指纹表与所述记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同;
检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶;
从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
在一种可能的设计中,还包括:若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
在一种可能的设计中,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成;在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
在一种可能的设计中,指纹表的桶中的基本单元为数据流指纹;每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号;根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。
在一种可能的设计中,还包括查找过程:计算得到待查找数据流的桶的地址和数据流指纹;利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识;若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从所述溢出表中查找与计算得到的数据流指纹匹配的数据流标识。
再一方面,本申请实施例提供一种用于高速大规模并发数据流的数据流表处理装置,包括:
数据流插入模块,用于根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹,其中,所述指纹表与所述记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同;
处理模块,用于检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶;从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
在一种可能的设计中,所述处理模块,还用于包括:若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
在一种可能的设计中,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成;在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
在一种可能的设计中,指纹表的桶中的基本单元为数据流指纹;每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号;根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。
在一种可能的设计中,还包括:查找模块,用于计算得到待查找数据流的桶的地址和数据流指纹;利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识;若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从所述溢出表中查找与计算得到的数据流指纹匹配的数据流标识。
本发明实施例提供的用于高速大规模并发数据流的数据流表处理方法及装置,将数据流表分为指纹表、记录表和溢出表三部分。指纹表和记录表基于d-left哈希表进行设计,各自包含两个块,每块包含若干个桶,每个桶存放多个基本单元,指纹表和记录表的基本单元一一对应。指纹表存储的基本单元是数据流指纹,记录表存放的基本单元是完整的数据流纪录。溢出表是经典的单函数哈希表,其中存放无法插入到记录表中的数据流记录。流表的数据结构设计充分利用缓存对齐技术,获得较高的缓存利用率。设计了桶内置换机制,将访问频度高的流记录放置在记录表各个桶的桶底,在读取流指纹的同时,可以将桶底记录同时读入缓存,从而获得较高的性能。本发明不仅具有较高的空间效率,能够支持海量的并发数据流,同时还避免了在高速网络中由于数据流表操作时间的不确定,导致报文处理时延增大、甚至造成丢包的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的数据流表的逻辑组织结构的示意图;
图2为本申请实施例提供的数据流表的物理存放结构的示意图;
图3为本申请实施例提供的IPv6数据流表的逻辑组织结构的示意图;
图4为本申请实施例提供的方法流程的示意图。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明作进一步详细描述。下文中将详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
本发明实施例中所提及的数据流表的作用是存储网络中每条数据流的状态信息,其每条表项实际为一条数据流记录,例如:用<Flow_ID,State,Meter,Metadata>四元组表示,其中,Flow_ID为数据流标识(通常用五元组表示),State为数据流状态,Meter是流量计数器,Metadata是用于表征表项具体格式的元数据。对数据流表的一般操作是:每到达一个数据包,首先对此数据包进行解析,从其首部字段中提取出流标识(Flow_ID);然后,以流标识为查表关键字,查找数据流表,得到该流标识对应的流记录;接着,根据流记录中的元数据(Metadata),对流记录进行解析,得到流状态(State)和流量计数器(Meter);最后,更新流量计数器,可能也更新流状态。
目前在对数据流的处理场景中,也会使用数据流表,比如现有的采用cuckoo哈希表来实现数据流表的方案,本发明所提供的实施例即是对这类应用数据流表处理数据流的场景的改进,具体改进思路在于对数据流表的结构,以及对数据流表的写入、查找、更新和删除等处理过程的改进。本实施例的方案可以应用于大部分类似的数据流表处理场景,不论是云端、服务端、网络收发端、还是其他称呼的硬件环境下,只要其符合数据流的通常处理过程,存在处理数据流表的设备和场景条件,都可以通过本申请实施例的设计思路进行改进,不做限定。
本发明实施例提供一种用于高速大规模并发数据流的数据流表处理方法,如图4示,包括:
S1、根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹。
其中,所述指纹表与所述记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同。具体的,在本实施例中数据流插入过程中:需要确定候选桶。即提取待插入数据流的数据流标识,假设数据流标识表示为flow_id,分别通过h1和h2,计算指纹表的两个块中候选桶的地址,其中,h1和h2都指的是计算中所使用的哈希函数,指纹表的两个块中候选桶的地址假设分别为i和j,其中i为块1的桶地址,j为块2的桶地址:
i=h1(flow_id)
j=h2(flow_id)
由于指纹表和记录表中的单元是一一对应的关系,因此,记录表中候选桶的地址也是i和j。
还需要计算数据数据流指纹。即通过某种哈希函数(例如CRC-32),根据flow_id,计算32比特的数据流指纹,假设为ff;合法的数据流指纹需大于0,空指纹单元用0表示。
需要说明的是,一次完整的插入过程需要依次访问指纹表和记录表,其中可选的插入桶位置称为“候选桶”。因为指纹表和记录表的各个单元是一一对应的,因此,确定了指纹表中候选桶的位置,也就能够确定记录表中候选桶的位置。
S2、检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶。
其中,确定目标桶的过程包括:查看指纹表候选桶FBi和FBj中的非空单元数,如果FBi和FBj均已满,则将流记录插入到溢出表,插入过程结束。否则,选择其中空闲单元较多的一个桶作为目标桶;如果两者空闲单元数相等,优先选择块1中的桶作为目标桶。不妨假设最终被选择的目标桶为FBi
需要说明的是,如上述所描述的,合法的数据流指纹需大于0,空指纹单元用0表示,即空闲单元的多寡可以通过表示出的0值来统计,而空闲单元较多的一个桶可以理解为具有的0值最多的桶,也可以是具有的0值数量多于一定门限值(比如具有5个以上的0值,即表示这个桶中的空闲单元数量多于5个)。
S3、从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
其中,确定插入位置的过程可以了解为:目标桶FBi包含8个单元,底部单元为FBi[0],顶部单元为FBi[7]。从FBi[0]开始向后搜索,寻找第一个空单元(空单元的值为0),不妨假设为FBi[k]。写入目标单元的过程可以了解为:将待插入记录的数据流指纹写入FBi[k],将待插入的流记录写入对应的记录桶RBi[k],至此插入过程结束。
进一步的,还包括:若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
本实施例所提供的方案,主要面向高速网络大规模并发流应用场景。数据流表采用d-left哈希表构造,并结合桶内置换和cache对齐技术,提高流表性能。本实施例中,数据流表可以支持流记录的插入、查找、更新和删除操作。并且,该流表可以同时支持IPv4和IPv6。本实施例提出的数据流表具有较高的空间效率和确定的更新性能;同时,本发明提出的数据流表在插入新记录时,无需移动表中已有记录,具有确定的插入性能。
举例来说,一个完整的插入过程包括:
以在数据流表中插入新的数据流记录<Flow_ID,State,Meter,Metadata>的过程为例:
1)计算候选桶地址。通过散列函数h1和h2,分别计算得到Flow_ID在两个块中的桶地址,假设为i和j,其中i为块1的候选桶地址,j为块2的候选桶地址。
2)计算数据流指纹。通过散列函数f,计算Flow_ID的32比特流指纹,假设为ff;合法的流指纹需大于0,空指纹单元用0表示。
3)确定目标桶。查看指纹表候选桶FBi和FBj中的非空单元数,如果FBi和FBj均已满,则将流记录插入到溢出表,插入过程结束。否则,选择其中空闲单元较多的一个桶作为目标桶;如果两者空闲单元数相等,优先选择块1中的桶作为目标桶。不妨假设最终被选择的目标桶为FBi
4)确定插入位置。目标桶FBi包含8个单元,底部单元为FBi[0],顶部单元为FBi[7]。从FBi[0]开始向后搜索,寻找第一个空单元(空单元的值为0),不妨假设为FBi[k]。
5)写入目标单元。将待插入记录的数据流指纹写入FBi[k],将待插入的流记录写入对应的记录桶RBi[k],即
FBi[k]←ff
RBi[k]←<Flow_ID,State,Meter,Metadata>
插入过程结束。
在本实施例中,还提供一种对数据流表的改进方案,其中,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成。数据流表从逻辑结构上由数据流指纹表(以下简称指纹表)、数据流记录表(以下简称记录表)和溢出表三部分组成。在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
具体的,数据流表从逻辑上分为指纹表、记录表和溢出表三个组成部分。指纹表和记录表均采用d-left哈希表实现,且d=2,即分为两个块,称为块1和块2。指纹表和记录表的每个块均由若干个桶组成,每个桶可以存放若干个基本单元,数量不超过桶的深度。指纹表和记录表的桶深相等,两者的基本单元一一对应。例如:如图1所述。指纹表和记录表中的单元是一一对应的。每个表又分为两个块,每块由多个桶(Bucket)组成,各个桶的深度均为8。
进一步的,指纹表的桶中的基本单元为数据流指纹。每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号。根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。具体的,指纹表中的桶存放的基本单元是数据流指纹,每条数据流指纹的长度为32比特。每条数据流具有唯一的数据流标识,通常以报文首部的<源IP地址,目的IP地址,协议号,源端口号,目的端口号>字段所构成的五元组来表示。数据流指纹通过对数据流标识进行哈希计算获得。本发明对于具体的哈希计算方法没有限定,例如,可以采用32位的循环冗余校验算法(CRC-32)计算数据流指纹,计算过程的输入是数据流标识,输出是32位的数据流指纹。记录表中的桶存放的基本单元是数据流记录,用<Flow_ID,State,Meter,Metadata>四元组表示,其中,Flow_ID为数据流标识,State为数据流状态,Meter是该条数据流的流量计数器,Metadata是用于表征表项具体格式的元数据。IPv4流表的记录为32字节,IPv6流表的记录为64字节,如图3所示。溢出表采用经典的单函数哈希表实现,通过开放定址处理哈希冲突。溢出表中存放的是无法插入到记录表中的数据流记录。例如:
如图1所述。指纹表的各个桶存放的基本单元是数据流指纹(Fingerprint),数据流指纹由数据流标识经过哈希计算得到,每条数据流指纹的长度为32比特。记录表的各个桶存放的基本单元是数据流记录(Record)。如上文所述,流记录用<Flow_ID,State,Meter,Metadata>四元组表示,其中,数据流标识(Flow_ID)是查表关键字,数据流标识通常是由<源IP,目的IP,协议号,源端口号,目的端口号>五元组构成。每个流记录的大小固定为32字节,其中流标识占据13字节,其他字段占据19字节。溢出表是经典的单函数哈希表,采用开放定址或者链表处理哈希冲突,其中存储的基本单元和记录表一样,也是数据流记录。当数据流表中插入新的记录时,首先,采用哈希函数h1和h2对数据流标识进行散列计算,分别得到新记录在两个块中的桶地址(称为候选桶地址);然后,从两个候选桶中选择空闲单元较多的一个桶(称为目标桶),将待插入数据流的流指纹写入指纹表的目标桶,将待插入的流记录写入记录表的目标桶。记录表中的单元和指纹表中的单元是一一对应的。如果两个候选桶都已经满了,那么就将流记录直接插入到溢出表中。
在实际应用中,数据流表在内存中的物理存放结构如图2所示。指纹表桶和记录表桶在内存中交替存放。当前,主流的服务器处理器的缓存线(Cache Line)的大小通常为64字节,所以,整个数据流表在存放时,需要进行64字节对齐,以提高cache效率。在进行内存对齐后,一次内存读取便可以获得目标指纹桶中的全部单元,以及相应记录桶中的桶底单元(图2中红色网格线显示的记录)。本文提出的数据流表通过“桶内置换”机制,将各个桶内访问频度最高的记录放置在桶底,这样一次内存读取,可以同时将整个目标指纹桶以及相应的记录桶的桶底单元一并读入cache,进一步提高了cache效率。桶内置换机制的实现细节将在下文详细描述。溢出表在内存中单独存放,并且同样也需要进行缓存对齐。
本实施例中,将数据流表分为指纹表、记录表和溢出表三部分。指纹表和记录表基于d-left哈希表进行设计,各自包含两个块,每块包含若干个桶,每个桶存放多个基本单元,指纹表和记录表的基本单元一一对应。指纹表存储的基本单元是数据流指纹,记录表存放的基本单元是完整的数据流纪录。溢出表是经典的单函数哈希表,其中存放无法插入到记录表中的数据流记录。流表的数据结构设计充分利用缓存对齐技术,获得较高的缓存利用率。设计了桶内置换机制,将访问频度高的流记录放置在记录表各个桶的桶底,在读取流指纹的同时,可以将桶底记录同时读入缓存,从而获得较高的性能。本发明不仅具有较高的空间效率,能够支持海量的并发数据流,同时还避免了在高速网络中由于数据流表操作时间的不确定,导致报文处理时延增大、甚至造成丢包的问题。
基于本实施例中所提供的数据流表,还提供进一步的查找、更新、删除等过程。其中:
查找过程,包括:
计算得到待查找数据流的桶的地址和数据流指纹。利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识。若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从所述溢出表中查找与计算得到的数据流指纹匹配的数据流标识。例如:
查找操作的目的是根据数据流的Flow_ID,在数据流表中查找其对应的流记录。查找过程的描述如下:
1.1)计算桶地址。通过散列函数h1和h2,分别计算得到Flow_ID在两个块中的桶地址,假设为i和j,其中i为块1的候选桶地址,j为块2的候选桶地址。
1.2)计算数据流指纹。通过散列函数f,计算flow_id的32比特流指纹,假设为ff。
1.3)搜索流标识。逐个搜索指纹表的两个候选桶FBi和FBj的各个单元,若FBx[y](x=i或j,y=0…7)等于ff,则从记录桶的对应单元RBx[y]中读取数据流标识,记作RBx[y].flow_id。若RBx[y].flow_id==flow_id,则查找成功,查找过程结束;否则,继续查看下一个指纹表候选桶单元,重复本步骤,直至两个候选桶的各个单元都搜索完毕。
1.4)如果两个候选桶FBi和FBj中的所有桶单元的内容都不等于ff,则查找溢出表,若找到流标识匹配的记录,则查找成功,否则查找失败。查找过程结束。
再例如,更新与桶内置换过程包括:
更新操作的目的是根据数据流的Flow_ID,在数据流表中查找其对应的流记录,并对流记录的State和Meter字段进行更新。更新过程的描述如下:
2.1)根据Flow_ID,查找对应的流记录;若查找失败,则返回失败,更新过程结束。
2.2)更新字段。更新目标流记录(假设为RBi[k])的State和Meter字段。
2.3)桶内置换。如果RBi[k]为非桶底单元(即,k>0),则比较RBi[k]的Meter和RBi[k]所在桶的桶底记录RBi[0]Meter的大小。如果RBi[k].Meter>RBi[0].Meter,或者RBi[0]为空,则将RBi[k]和RBi[0]的内容互换,同时将FBi[k]和FBi[0]的内容互换,即:
temp←RBi[0]
RBi[0]←RBi[k]
RBi[k]←temp
temp←FBi[0]
FBi[0]←FBi[k]
FBi[k]←temp
2.4)返回成功,更新过程结束。
再例如,删除过程包括:
删除操作的目的是根据数据流的Flow_ID,在数据流表中查找其对应的流记录,并将流记录清零。删除过程的描述如下:
3.1)根据Flow_ID,查找对应的流记录;若查找失败,则返回失败,删除过程结束。
3.2)将流记录清零。将目标流记录(假设为RBi[k])清零,即
FBi[k]←0
RBi[k]←<0,0,0,0>
3.3)返回成功,删除过程结束。
通过测试数据的参考,来说明本实施的实际效果。在实际的数据流表的操作过程,通常存在以下两类异常,分别是:
异常类型一:桶溢出异常。桶溢出异常指的是向指纹表插入新的数据流指纹时,发现两个候选桶都已满,导致流指纹无法插入指纹表,相应的,流记录也无法插入记录表。
异常类型二:流指纹冲突异常。在查找过程中,发现指纹表的两个候选桶中,存在多个和流指纹和被查找流指纹相同。
首先分析桶溢出异常发生的概率。假设数据流表需要容纳N条表项,记录表(或者指纹表)中包含M个单元,则为了保证较低的桶溢出概率,M应当适当大于N。确定M的具体取值,需要获知准确的桶溢出概率。文献[3][4]给出了一种通过解微分方程计算d-left哈希表桶溢出概率的方法,表1给出了当d-left哈希表的哈希函数数目等于2、桶深为8、桶中的平均记录数目(k)分别等于1~7的情况下,桶中记录数目(x)的分布概率以及桶溢出概率。由于桶的深度为8,所以,桶中的平均记录数目(k)和M、N的关系是:k=8*N/M。
表1桶中记录数目的分布概率及桶溢出概率的计算结果
Figure BDA0002455765830000151
Figure BDA0002455765830000161
由表1可见,当桶深为8、桶中的平均记录个数为6时,桶溢出的概率为3.17e-6,此溢出概率足够小,从而溢出表OT中的记录数目和N相比可以忽略不计。与此同时,数据流表可以实现6/8=75%的空间利用率。假设数据流表需要容纳一亿条表项,即N=108,在桶深为8、桶中平均记录数目为6时,所需的内存大小为:
(N*8/6)*(4+32)=4.8*109Bytes
即,所需的内存大小约为4.8GB。此时,溢出表OT中记录数目的期望为:
3.17e-6*N/6=52.8
可见,OT表中的记录数目足够少,因此在计算总的内存开销时,基本可以忽略OT的影响。
接下来分析数据流指纹冲突异常发生的概率。每条数据流指纹长度为32比特,全0的指纹表示空,所以,搜索2个指纹桶,发生指纹冲突的概率为:
Figure BDA0002455765830000162
可见,发生指纹冲突的概率极低,本实施例在实际应用中基本可以忽略指纹冲突带来的影响。
对于如图3所示的IPv6流表而言,桶深为16时、桶中的平均记录数目为14时,桶溢出异常发生的概率为2.39e-06,此时数据流表的空间利用率为14/16=87.5%,比IPv4流表75%的空间利用率更高。由于桶的深度扩大了一倍,因此,数据流指纹冲突异常发生的概率为IPv4流表的两倍,即7.46*10-9,依然低到可以忽略。
本发明实施例还提供一种用于高速大规模并发数据流的数据流表处理装置,其特征在于,包括:
数据流插入模块,用于根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹,其中,所述指纹表与所述记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同。
处理模块,用于检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶。从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
其中,所述处理模块,还用于包括:若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
具体的,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成。在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
指纹表的桶中的基本单元为数据流指纹。每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号。根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。
进一步的,还包括:查找模块,用于计算得到待查找数据流的桶的地址和数据流指纹。利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识。若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从所述溢出表中查找与计算得到的数据流指纹匹配的数据流标识。
结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(RandomAccessMemory,RAM)、闪存、只读存储器(ReadOnlyMemory,ROM)、可擦除可编程只读存储器(ErasableProgrammableROM,EPROM)、电可擦可编程只读存储器(ElectricallyEPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。

Claims (10)

1.一种用于高速大规模并发数据流的数据流表处理方法,其特征在于,包括:
根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹,其中,所述指纹表与记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成;
检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶;
从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
2.根据权利要求1所述的方法,其特征在于,还包括:
若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
3.根据权利要求1或2所述的方法,其特征在于,
在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
4.根据权利要求3所述的方法,其特征在于,指纹表的桶中的基本单元为数据流指纹;
每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号;
根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。
5.根据权利要求1所述的方法,其特征在于,查找过程,包括:
计算得到待查找数据流的桶的地址和数据流指纹;
利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识;
若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从溢出表中查找与计算得到的数据流指纹匹配的数据流标识。
6.一种用于高速大规模并发数据流的数据流表处理装置,其特征在于,包括:
数据流插入模块,用于根据待插入数据流的数据流标识,获取指纹表中的候选桶的地址和数据流指纹,其中,所述指纹表与记录表中的单元一一对应,所述指纹表中的候选桶的地址与所述记录表中的候选桶的地址相同,每个数据流的数据流表由指纹表、记录表和溢出表三部分组成;
处理模块,用于检测所述指纹表的候选桶是否存在非空单元,若存在非空单元,则选择存在空闲单元的一个候选桶作为目标桶;从所述目标桶的底部单元向顶部单元依次查询空单元,当查询到所述目标桶中的空单元时,将所述待插入数据流的数据流指纹写入查询到的空单元,并将所述待插入数据流的流记录写入与所述候选桶对应的记录桶。
7.根据权利要求6所述的装置,其特征在于,所述处理模块,还用于包括:
若不存在非空单元,则将所述待插入数据流的流记录插入到溢出表,并结束插入过程。
8.根据权利要求6或7所述的装置,其特征在于,
在每个数据流表中,指纹表和记录表均采用d-left哈希表,各自都为两个块,指纹表和记录表的每个块均由至少2个桶组成,每个桶用于存放基本单元,每个桶中的基本单元的数量不超过所在桶的深度,指纹表和记录表的桶深相等。
9.根据权利要求8所述的装置,其特征在于,指纹表的桶中的基本单元为数据流指纹;
每条数据流的数据流标识的字段内容包括:源IP地址、目的IP地址、协议号、源端口号和目的端口号;
根据待插入数据流的数据流标识,获取指纹表数据流指纹,包括:将所述数据流标识输入循环冗余校验算法,输出所述数据流指纹。
10.根据权利要求6所述的装置,其特征在于,还包括:
查找模块,用于计算得到待查找数据流的桶的地址和数据流指纹;利用计算得到桶的地址,从所述指纹表中确定桶中的各个单元,并从确定到的各个单元中查找与计算得到的数据流指纹匹配的数据流标识;若从所述指纹表的候选桶中查找不到与计算得到的数据流指纹匹配的数据流标识,则继续从溢出表中查找与计算得到的数据流指纹匹配的数据流标识。
CN202010305885.1A 2020-04-17 2020-04-17 一种用于高速大规模并发数据流的数据流表处理方法及装置 Active CN111541617B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202010305885.1A CN111541617B (zh) 2020-04-17 2020-04-17 一种用于高速大规模并发数据流的数据流表处理方法及装置
US17/996,378 US20230231808A1 (en) 2020-04-17 2020-10-28 Data flow table, method and device for processing data flow table, and storage medium
PCT/CN2020/124355 WO2021208403A1 (zh) 2020-04-17 2020-10-28 数据流表及其处理方法、装置、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010305885.1A CN111541617B (zh) 2020-04-17 2020-04-17 一种用于高速大规模并发数据流的数据流表处理方法及装置

Publications (2)

Publication Number Publication Date
CN111541617A CN111541617A (zh) 2020-08-14
CN111541617B true CN111541617B (zh) 2021-11-02

Family

ID=71976853

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010305885.1A Active CN111541617B (zh) 2020-04-17 2020-04-17 一种用于高速大规模并发数据流的数据流表处理方法及装置

Country Status (3)

Country Link
US (1) US20230231808A1 (zh)
CN (1) CN111541617B (zh)
WO (1) WO2021208403A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111541617B (zh) * 2020-04-17 2021-11-02 网络通信与安全紫金山实验室 一种用于高速大规模并发数据流的数据流表处理方法及装置
CN116991855B (zh) * 2023-09-27 2024-01-12 深圳大普微电子股份有限公司 哈希表处理方法、装置、设备、介质、控制器及固态硬盘

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101540723A (zh) * 2009-04-20 2009-09-23 杭州华三通信技术有限公司 一种流表查找方法和装置
US8000244B1 (en) * 2007-08-03 2011-08-16 Hewlett-Packard Development Company, L.P. Shared rate limiters using floating buckets
CN102200906A (zh) * 2011-05-25 2011-09-28 上海理工大学 大规模并发数据流处理系统及其处理方法
CN102833134A (zh) * 2012-09-04 2012-12-19 中国人民解放军理工大学 负载自适应的网络数据流流量测量方法
CN110019250A (zh) * 2019-03-06 2019-07-16 清华大学 基于哈希函数的网络测量方法和计算机可读存储介质
CN110768856A (zh) * 2018-07-27 2020-02-07 华为技术有限公司 网络流测量的方法、网络测量设备以及控制面设备
CN110808910A (zh) * 2019-10-29 2020-02-18 长沙理工大学 一种支持QoS的OpenFlow流表节能存储架构及其应用

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8848537B2 (en) * 2010-03-22 2014-09-30 Freescale Semiconductor, Inc. Token bucket management apparatus and method of managing a token bucket
CN104753726B (zh) * 2013-12-25 2018-04-20 任子行网络技术股份有限公司 一种串行数据流的审计控制方法及系统
US10198291B2 (en) * 2017-03-07 2019-02-05 International Business Machines Corporation Runtime piggybacking of concurrent jobs in task-parallel machine learning programs
CN108337172B (zh) * 2018-01-30 2020-09-29 长沙理工大学 大规模OpenFlow流表加速查找方法
CN109358987B (zh) * 2018-10-26 2019-09-24 黄淮学院 一种基于两级数据去重的备份集群
CN111541617B (zh) * 2020-04-17 2021-11-02 网络通信与安全紫金山实验室 一种用于高速大规模并发数据流的数据流表处理方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8000244B1 (en) * 2007-08-03 2011-08-16 Hewlett-Packard Development Company, L.P. Shared rate limiters using floating buckets
CN101540723A (zh) * 2009-04-20 2009-09-23 杭州华三通信技术有限公司 一种流表查找方法和装置
CN102200906A (zh) * 2011-05-25 2011-09-28 上海理工大学 大规模并发数据流处理系统及其处理方法
CN102833134A (zh) * 2012-09-04 2012-12-19 中国人民解放军理工大学 负载自适应的网络数据流流量测量方法
CN110768856A (zh) * 2018-07-27 2020-02-07 华为技术有限公司 网络流测量的方法、网络测量设备以及控制面设备
CN110019250A (zh) * 2019-03-06 2019-07-16 清华大学 基于哈希函数的网络测量方法和计算机可读存储介质
CN110808910A (zh) * 2019-10-29 2020-02-18 长沙理工大学 一种支持QoS的OpenFlow流表节能存储架构及其应用

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Large-scale distributed storage for highly concurrent Mapreduce applications;Diana Moise;Gabriel Antoniu;Luc Bougé;《2010 IEEE International Symposium on Parallel & Distributed Processing, Workshops and Phd Forum (IPDPSW)》;20100524;全文 *
针对高速数据流的大规模数据实时处理方法;亓开元;赵卓峰;房俊;马强;《计算机学报》;20120315;全文 *

Also Published As

Publication number Publication date
WO2021208403A1 (zh) 2021-10-21
CN111541617A (zh) 2020-08-14
US20230231808A1 (en) 2023-07-20

Similar Documents

Publication Publication Date Title
US8255398B2 (en) Compression of sorted value indexes using common prefixes
US9871727B2 (en) Routing lookup method and device and method for constructing B-tree structure
CN106874348B (zh) 文件存储和索引方法、装置及读取文件的方法
CN108205577B (zh) 一种数组构建、数组查询的方法、装置及电子设备
CN111541617B (zh) 一种用于高速大规模并发数据流的数据流表处理方法及装置
CN107832343B (zh) 一种基于位图的mbf数据索引结构对数据快速检索的方法
JP4995125B2 (ja) 固定長データの検索方法
CN111352931A (zh) 一种哈希冲突的处理方法、装置及计算机可读存储介质
CN111832065A (zh) 使用电路实现的软件和用于密钥-值存储的方法
US9292549B2 (en) Method and system for index serialization
Liu et al. Succinct filters for sets of unknown sizes
CN107798063B (zh) 快照处理方法和快照处理装置
CN110096458B (zh) 基于神经网络的命名数据网内容存储池数据检索方法
CN117435912A (zh) 基于网络数据包属性值长短特征的数据包索引与检索方法
JP5448428B2 (ja) データ管理システム及びデータ管理方法及びデータ管理プログラム
CN102984071B (zh) 分段地址路由的路由表组织方法及查找路由的方法
CN110109616B (zh) 基于神经网络的命名数据网内容存储池数据删除方法
CN101004741A (zh) 一种改进的哈希方法及其应用
CN110321346B (zh) 一种字符串散列表实现方法和系统
CN107943415A (zh) 基于fat文件系统的查找空闲簇的方法和系统
CN110196938B (zh) 基于神经网络的命名数据网内容存储池数据插入方法
CN118034612B (zh) 一种数据处理方法、装置和存储介质
CN111817724B (zh) 一种数据压缩电路
CN111131197B (zh) 一种过滤策略管理系统及其方法
US20230385240A1 (en) Optimizations for data deduplication operations

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant