CN108353038B - 支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的机制 - Google Patents
支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的机制 Download PDFInfo
- Publication number
- CN108353038B CN108353038B CN201680064921.1A CN201680064921A CN108353038B CN 108353038 B CN108353038 B CN 108353038B CN 201680064921 A CN201680064921 A CN 201680064921A CN 108353038 B CN108353038 B CN 108353038B
- Authority
- CN
- China
- Prior art keywords
- buckets
- key data
- updated
- bucket
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9084—Reactions to storage capacity overflow
- H04L49/9089—Reactions to storage capacity overflow replacing packets in a storage arrangement, e.g. pushout
- H04L49/9094—Arrangements for simultaneous transmit and receive, e.g. simultaneous reading/writing from/to the storage element
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/38—Flow based routing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/54—Organization of routing tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的方法和装置。在具有多个核心的主机平台的存储器中实现具有映射到相应散列桶的行的流表,散列桶具有多个条目槽,其中每个桶与版本计数器相关联。多个写入器线程和读取器线程在核心上运行,其中写入器提供对流表数据的更新。与***新的键数据相结合地对哪些桶将被更改做出确定,并且在做出任何更改之前获取对这些桶的访问权限。例如,在采用布谷鸟散列化的流表下,获取对沿完整布谷鸟路径的桶的访问权限。一旦获得访问权限,写入器被使得能够更新适用桶中的数据以实现新的键数据的输入,同时防止其他写入器线程更改这些桶中的任一个桶,但可以并发地***或修改其他桶中的键数据。
Description
技术领域
本公开总体上涉及计算机网络领域,并且更具体地涉及支持针对分组流数据的多写入器和多读取器并发的方法和装置。
背景技术
访问计算机网络已成为当今计算机使用的无处不在的一部分。无论是访问企业环境中的局域网(LAN)以访问共享网络资源,还是经由LAN或其他接入点访问互联网,似乎用户总是登录到经由计算机网络访问的至少一个服务。此外,基于云的服务的迅速扩张造成计算机网络的进一步使用,并且预计这些服务将变得越来越普遍。
各种类型的设备(包括路由器、交换机、网桥、网关和接入点)有助于联网。大型网络基础设施典型地包括使用电信级网络元件,包括由诸如Cisco Systems、JuniperNetworks、Alcatel Lucent、IBM以及Hewlett-Packard之类的公司制造的交换机和路由器。这样的电信交换机非常复杂,在非常高的带宽下工作,并且提供高级路由功能以及支持不同的服务质量(QoS)级别。专用网络(例如,局域网(LAN))是商业和家庭用户最常见地使用的。许多商业网络采用基于硬件和/或基于软件的防火墙等也是常见的。
为了促进网络与访问这种网络的计算设备之间的通信,网络典型地包括一个或多个网络设备(例如,网络交换机、网络路由器等)以基于存储在流查找表中的网络流将通信(即,网络分组)从一个计算设备路由到另一计算设备。传统上,网络分组处理(例如,分组交换)已经在网络设备的专用网络处理器上执行。
近年来,计算机***的虚拟化发展迅速,特别是在服务器部署和数据中心方面。在常规方法下,服务器直接在诸如CPU、RAM、存储设备(例如,硬盘)、网络控制器、I/O端口等的物理硬件资源上运行操作***的单个实例。在一个使用虚拟机(VM)的虚拟化方法下,采用物理硬件资源来支持虚拟资源的对应实例,使得多个VM可以在服务器的物理硬件资源上运行,其中每个虚拟机包括其自己的CPU分配、存储器分配、存储设备、网络控制器、I/O端口等。然后相同或不同操作***的多个实例在多个VM上运行。此外,通过使用虚拟机管理器(VMM)或“管理程序”,可以在服务器运行时动态地分配虚拟资源,使得VM实例能够被添加、关闭或改变用途,而不要求关闭服务器。这为服务器利用提供了更大的灵活性,并且更好地使用服务器处理资源,特别是对于多核心处理器和/或多处理器服务器。
软件定义联网(SDN)和网络功能虚拟化(NFV)的部署在过去几年也出现了快速增长。在SDN下,针对将业务转发到选定的目的地的底层***(数据平面),将关于业务在何处发送做出决定的***(控制平面)解耦。SDN概念可以用于促进网络虚拟化,使得服务提供商能够经由软件应用和API(应用程序接口)管理其网络服务的各个方面。在NFV之下,通过将网络功能虚拟化为软件应用,网络服务提供商可以获得网络配置的灵活性,实现显著的益处,包括可用带宽的优化、成本节省以及新服务的更快上市时间。此外,SDN对基于软件的网络分组处理的支持导致网络基础设施支持网络分组处理在具有通用处理器的网络设备上执行,从而提高可伸缩性、可配置性和灵活性。
典型地,网络分组流识别库使用对其执行网络流查找的散列表(即,流查找表)。然而,在散列化过程期间,可能发生散列冲突。已经开发了不同的技术来解决散列冲突,包括多级散列化和链式的分桶化的散列表。一种这样的技术(布谷鸟散列化(cuckoo-hash))已经成为存储器高效、高性能散列化方案,用于在使用网络分组输入/输出(I/O)引擎(例如,数据平面开发套件(DPDK))的数据平面库和网络接口控制器驱动程序进行流查找表查找期间解决散列冲突,以用于快速网络分组处理(例如,流查找表查找、软件路由器/交换机功能等)。
在当今的高性能SDN环境中,支持流表的读取-写入并发是必要的。换言之,当通用处理器的核心更新流查找表时,通用处理器的另一核心应该能够并行执行流查找,而不需要锁定流查找表。尽管最近引入了用于支持布谷鸟散列表的单写入器多读取器并发的技术,但它们不支持并发的写入访问。这会导致高工作负载环境的性能下降。
发明内容
本公开的一个方面涉及一种用于支持针对分组流数据的多写入器和多读取器并发的方法,包括:在包括多个处理器核心的主机平台的存储器中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;采用在所述多个核心上执行的多个线程来提供对所述流表中的数据的并发地进行更新,每个线程包括写入器;将新的键数据***到所述流表中,对所述新的键数据的***要求对多个桶中的键数据进行更新;以及实现访问机制,所述访问机制保证在所述新的键数据正被***到所述流表中的同时仅一个写入器能够更新所述多个桶中的任一个桶;其中,在所述一个写入器正在更新对新的键数据进行所述***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述一个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
本公开的另一个方面涉及一种或多种非暂时性机器可读介质,其上存储有指令,所述指令被配置为在包括可操作地耦合到***存储器的多个处理器核心的主机平台上执行,其中,所述指令被配置为在执行时用于:在所述***存储器的一部分中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;启动多个线程,每个线程包括写入器或读取器,所述多个线程包括多个写入器和多个读取器中的每一个,每个写入器被配置为更新所述流表中的数据并且每个读取器被配置为读取所述流表中的数据;经由所述多个写入器将新的键数据***到所述流表中,对所述新的键数据的***要求对多个桶中的键数据进行更新;以及使得在新的键数据正被***到所述流表中的同时,仅单个写入器能够更新对所述新的键数据进行给定***所要求的所述多个桶中的任一个桶;其中,在所述单个写入器正在更新对新的键数据进行所述给定***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述单个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
本公开的另一个方面涉及一种主机平台,包括:第一处理器,其具有多个处理器核心;***存储器,其可操作地耦合到所述第一处理器;多个网络接口控制器,每个网络接口控制器具有一个或多个网络端口;以及至少一个存储设备,其中存储有指令,所述指令被配置为在所述多个处理器核心上执行,其中,所述指令的执行使得所述主机平台能够用于,使用布谷鸟散列化在所述***存储器的一部分中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含用于存储键数据的一个或多个条目槽;将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;启动多个线程,每个线程包括写入器或读取器,所述多个线程包括多个写入器和多个读取器中的每一个,每个写入器被配置为更新所述流表中的数据并且每个读取器被配置为读取所述流表中的数据;经由所述多个写入器将新的键数据***到所述流表中,其中,针对新的键数据的***的至少一部分,沿布谷鸟路径的多个桶中的键数据被更新;以及使得在新的键数据正被***到所述流表中的同时,仅单个写入器能够针对所述新的键数据的给定***来更新沿给定的布谷鸟路径的所述多个桶中的任一个桶,其中,在所述单个写入器正在更新对新的键数据进行所述给定***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述单个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
附图说明
当结合附图考虑时,本发明的上述方面和伴随的优点中的许多优点将变得更容易理解,因为通过参考以下具体实施方式,这些方面和优点变得更好理解,其中除非另有说明,否则相同的附图标记贯穿各个视图指代相同的部件:
图1是示出其中多个网络设备经由各种链路互连的常规计算机网络的网络图;
图2是示出包括吊舱(pod)、机架、托盘和滑动件的数据中心物理层级的示意性框图;
图3是示出在Linux服务器中采用基于软件的路由器的示例性网络的示意图;
图4是示出网络设备的一个实施例的选定组件的框图;
图5是示出针对网络设备的一个实施例实现的选定模块的框图;
图7是示出体现为两路(散列)函数的四路布谷鸟散列表(四路关联查找表)的示意图;
图8是示出根据一个实施例的用于更新布谷鸟散列表桶中的条目同时支持多个并发的写入和读取的操作和逻辑的流程图;
图9是示出根据一个实施例的用于将新键***布谷鸟散列表中同时支持多个并发的写入和读取的操作和逻辑的流程图;
图10a和图10b是示出向布谷鸟散列表添加新键条目的示意图,其中图10a示出了新键条目被添加之前布谷鸟散列表的状况,而图10b示出了新键条目被添加之后布谷鸟散列表的状况;
图11是示出使用两个单端口NIC和两个工作者线程的简化实现方式的示意图;以及
图12是可以在其上实现本发明的实施例的方面的NUMA平台架构的示意图。
具体实施方式
本文描述了支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的方法和装置的实施例。在下面的说明书中,阐述了许多具体细节以提供对本发明的实施例的透彻理解。然而,相关领域的技术人员将认识到,可以在没有具体细节中的一个或多个的情况下或者利用其他方法、组件、材料等来实践本发明。在其他实例中,公知的结构、材料或操作未示出或详细描述以避免模糊本发明的方面。
贯穿本说明书对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,贯穿本说明书各处出现的短语“在一个实施例中”或“在实施例中”不一定都指代同一实施例。此外,特定特征、结构或特性可以以任何合适的方式在一个或多个实施例中组合。
为了清楚起见,本文的附图中的单独的组件也可以通过其在附图中的标签来引用,而不是通过特定的附图标记。另外,可以用后缀为“(typ)”(表示“典型的”)的附图标记来示出涉及特定类型的组件(与特定组件相对)的附图标记。应理解,这些组件的配置将典型地是可能存在但是为了简单和清楚而未在附图中示出的类似组件或者没有用单独的附图标记来标记的其他类似组件。相反,“(typ)”不应被解释为表示典型地用于其公开的功能、实现、目的等的组件、元件等。
图1描绘了采用经由链路104彼此通信地耦合的多个网络设备102(标记为1-36)的常规计算机网络架构100。源计算机106经由互联网服务提供商(ISP)网络108耦合到交换机14。在网络的另一侧,包括电子邮件服务器的目的地计算机110经由电子邮件服务提供商(ESP)网络112连接到交换机20。
网络设备1-35中的每个包括路由或转发表,其用于基于典型地包括目的地地址的各种标准将分组路由/转发到下一站(hop)。(注意,具有这种类型的功能的交换机也可以被称为路由器;更一般地,这样的交换机/路由被认为是网络元件。)在各种路由协议下,例如(路由信息协议)RIP和开放最短路径优先(OSPF),这两者都在互联网协议(IP)上分层,数据被划分成多个分组,这些分组沿源端点与目的地端点(例如,源计算机106和目的地计算机110描绘的)之间的路径进行路由。一般地,给定分组遍历的路径可能在某种程度上任意,这是互联网如此鲁棒的原因的一部分。由于端点之间的分组可能沿不同的路径行进,因此当网络交换机停机或脱机时,其他网络设备的路由表更新,以沿不包括该交换机的路径来路由分组。
图1进一步示出了包括网络设备14、15、22、23、16、17、18和19之间的站的示例性路由路径。当然,后续分组可以沿不同路线路由,这取决于在源计算机106与目的地计算机110之间传输的业务,以及各种网络设备处理的实时网络操作状况和业务。
为了改进网络性能,采用了分组分类和基于流的转发/路由。在基于流的方案下,作为在一对端点之间传输的数据的流的一部分的分组被分类为相同的流并且沿相同的路径进行路由(至少对于路径的采用支持基于流的转发/路由的网络设备的部分)。这减轻了更多任意路由情况下的若干问题,例如,分组无序到达。
图1的网络架构100是大型计算机网络的说明,或者更精确地,是由连接网络的较大分段的适用网络设备进行连接的子网的集合。历史上,用于该目的的网络设备包括由诸如Cisco、Juniper、Alcatel-Lucent以及其他公司之类的公司制造的电信(telco)交换机。这些电信交换机典型地被配置为具有配置有专用硬件的多个卡的机架。随着更复杂的路由和流管理技术的引入,在这些***上运行的软件变得越来越重要。
近年来,“基于云的”服务、高性能计算(HPC)以及采用数据中心等的其他活动的实现方式已经出现广泛采用。在典型的数据中心安装下,安装在服务器机箱和服务器机架中的大量服务器使用网络链路(例如,以太网)和各种交换机制(例如,交换机刀片/模块和“机架顶部”(ToR)交换机)通信地互连。在某些安装中,附加链路(例如,InfiniBand或光纤信道)可以用于存储和其他目的。
数据中心通常采用计算、网络和存储共享资源的物理层级来支持扩展工作负载要求。管理这种计算、联网和存储共享资源的实际控制平面是以太网,并且可管理性的网络协议是基于TCP/IP的。每个共享资源典型地具有管理控制器,以提供可管理性接入点,并且经由IPv4或IPv6地址进行寻址。数据中心通常实现VLAN(虚拟局域网)以将控制平面业务与数据平面业务分开。
图2示出了数据中心200的一部分,数据中心200中的示例性物理层级包括数量为L的吊舱202,数量为M的机架204,机架204中的每个包括用于数量为N的托盘206的槽。每个托盘206进而可以包括多个滑动件208。为了便于解释,吊舱202、机架204和托盘206中的每个标记有对应的标识符,例如,吊舱1、机架2、托盘1B等。
在每个机架204的顶部描绘了相应的TOR交换机210,其也由TOR交换机编号进行标记。一般地,TOR交换机210表示TOR交换机以及支持机架204之间的切换的任何其他交换设施两者。常规实践是将这些交换机称为TOR交换机,而不管它们是否物理地位于机架的顶部(虽然它们一般位于机架的顶部)。
每个吊舱202还包括吊舱交换机212,吊舱的TOR交换机210耦合到该吊舱交换机212。进而,吊舱交换机212耦合到数据中心(DC)交换机214。数据中心交换机可以位于数据中心交换机层级的顶部,或者可以存在未示出的一个或多个附加级别。为了易于解释,本文描述的层级是使用物理LAN的物理六边形。实际上,使用底层物理LAN交换设施部署虚拟LAN是很常见的。
数据中心200还包括被配置为分配和管理IP地址的DHCP(动态主机控制协议)服务器216。为了清楚起见,吊舱1描绘了直接连接到DC交换机214的DHCP服务器216。一般地,DHCP服务器可以由独立服务器托管,或者可以托管在吊舱中的通过层级中的一个或多个交换层连接到DC交换机的一个吊舱中的计算节点中的一个计算节点上。在其他配置下,相应的DHCP服务器可以为每个吊舱或一组吊舱提供DHCP功能。作为另一种选择,多个DHCP服务器可以以分布式方式进行操作以跨越多个吊舱实现域或子域的DHCP操作。
为了与数据中心中的其他计算节点和资源主机进行通信,根据用于数据中心网络的通信协议(注意数据中心的不同部分可以采用不同的网络协议),每个计算或存储主机(本文中统称为计算节点和存储节点)需要具有唯一的地址。在本文的实施例中,网络协议是以太网,并且所使用的网络层协议是IP(互联网协议)。如上面讨论的,数据中心中的IP业务典型地在传输层采用传输控制协议(TCP)来确认使用广泛使用的TCP/IP协议传送的数据的递送。
如上面讨论的,近年来,虚拟化和SDN的使用已经出现了显著的增长。在虚拟化的数据中心下,每个计算节点可以支持多个虚拟计算节点,实质地增加可用计算节点的数量,这要求对应增加交换/路由设施。除物理交换机资源外,SDN环境还采用基于软件的虚拟交换机。
作为基于软件的路由的示例性使用,当今的Linux发行版带有内置的路由功能,使得Linux盒(即,实现Linux发行版的计算机或服务器)能够作为基于软件的路由器进行操作。图1示出了采用Linux服务器100作为支持在三个子网104、106和108之间路由分组的软件路由器102的网络配置的示例。虽然为了说明的目的示为单独的组件,但软件路由器102物理上在Linux服务器300内实现,如下面进一步详细描述的。如同常规的基于硬件的路由器一样,Linux路由器302采用路由表,该路由表用于使用公知的协议和路由技术来确定要通过哪个输出端口路由接收到的分组。在安装在Linux服务器300中的一个或多个NIC的输入端口处接收来自子网304、306和308的分组,并将其缓冲到路由表驻留的操作***(OS)。在对每个分组进行处理之后,将每个分组发送到适当的NIC输出端口以将分组路由到正确的目的地子网,该正确的目的地子网是经由软件路由器302实现的基于软件的分组路由方案确定的。
一般地,用于路由/转发给定分组的输入和输出端口可以位于相同的NIC或不同的NIC上(如果采用多个NIC)。例如,较新的以太网NIC支持多达8个端口,而诸如Linux服务器300的服务器可以配置有一个或多个NIC,这取决于网络复杂度以及促进通过软件路由器302的期望路由路径所要求的端口的数量。例如,如图3描绘的,通过沿路由器与子网中的边缘节点之间的单个链路来路由业务,可以将软件路由器配置为针对给定子网的路由器,或者路由器可以经由到单个边缘节点或多个边缘节点的多个链路连接到子网。
前述网络架构的网络设备和基于软件的交换元件各自采用类似的转发技术。各自包括多个网络端口,通过该网络端口在其处接收并且从其发送业务(例如,作为UDP分组和TCP分组流)。转发操作的目标是识别给定分组将被发送出去的网络端口。为了识别该网络端口,网络设备或基于软件的交换机对流查找表(例如,将散列化的流条目键映射到网络端口的散列表)执行基于散列的查找操作,以确定该分组的出站端口。为此,查找操作对与网络分组有关的信息(例如,目的地IP地址、目的地介质访问控制(MAC)地址、五元组流识别等)执行散列化并且使用结果来检查流查找表。
流查找表包括匹配字段,该匹配字段包含与网络分组的参数相对应的特定值或者指示流条目未包括在特定流的参数集中的值。每个散列表行或“桶”可以包括一个或多个键/值对,其中键识别某个数据项(例如,网络分组流标识符)并且值提供数据(例如,与网络分组流标识符相对应的流数据)在另一位置(例如,另一表)或网络端口中的位置。例如,如果散列表是四路关联表,则一个桶可以支持四个键/值对条目。另外,每个键可以映射到多于一个桶。例如,可以提供散列函数的阵列,使得可以基于哪个散列函数被应用于键来将不同的桶映射到键。
在一种方法下,为了支持流查找表的读取/写入并发,网络设备或基于软件的交换机将版本计数器与流查找表中的一个或多个散列表条目或桶进行关联,其在每次相关联的桶被修改时递增。与要求对版本计数器与每个查找操作进行状态比较的传统并发支持方法不同,使用原子地写入和/或读取的加载/存储指令(例如,流送单指令多数据(SIMD)扩展2(SSE2)加载/存储指令)可以确保与找到的键相关联的值是有效的。因此,只有当在键对应的桶中未找到键时,才要求执行版本计数器状态比较,从而减少与对每个查找执行比较相关联的开销。
一般地,本文描述的网络设备和基于软件的交换机中的每个可以体现为能够管理通信并且执行本文描述的功能的任何类型的计算或计算机设备,包括但不限于通用计算设备、网络装置(例如,物理的或虚拟的)、web装置、路由器、交换机、多处理器***、服务器(例如,独立式、机架安装式、刀片式等)、分布式计算***或其他类型的基于处理器的***。在一些实施例中,例如,在SDN和/或网络功能虚拟化(NFV)架构中,网络设备或基于软件的交换机中的一个或多个可以运行一个或多个虚拟机(VM)以在软件中实现交换/路由/转发功能。
在图4中示出了示例性网络设备400的高级别架构。网络设备400包括处理器402、输入/输出(I/O)子***404、存储器406、数据存储设备408以及通信电路410。如本领域技术人员将认识到的,在其他实施例中,网络设备400可以包括替代或附加组件,例如,在服务器、路由器、交换机或其他网络设备中常见地找到的组件。另外,在一些实施例中,说明性组件中的一个或多个可以并入另一组件中,或以其他方式形成另一组件的一部分。例如,在一些实施例中,存储器406或其部分可以并入一个或多个处理器402中。
一般地,处理器402可以体现为能够执行本文描述的功能的任何类型的处理器。例如,处理器402可以体现为单核心处理器或多核心处理器、多个处理器、数字信号处理器、微控制器、图形处理单元(GPU)、通用GPU(GPGPU)、加速处理单元(APU)、现场可编程门阵列(FPGA)或其他处理器或处理/控制电路。存储器406可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在操作中,存储器406可以存储在网络设备400的操作期间使用的各种数据和软件,例如,操作***、应用、程序、库和驱动程序。存储器406经由嵌入式存储器控制器等(未示出)通信地耦合到处理器402。存储器406还可以由通信电路410经由I/O子***404进行存取,I/O子***404可以体现为促进与处理器402、存储器406以及网络设备400的其他组件的输入/输出操作的电路和/或组件。例如,I/O子***404可以体现为或者以其他方式包括存储器控制器中心、输入/输出控制中心、集成传感器中心、固件设备、通信链路(即,点对点链路、总线链路、线、电缆、光导、印刷电路板迹线等)和/或促进输入/输出操作的其他组件和子***。在一些实施例中,I/O子***404可以形成片上***(SoC)的一部分并且与处理器402、存储器406以及网络设备400的其他组件一起并入单个集成电路芯片。
说明性网络设备400包括可以体现为管芯上高速缓存或处理器上高速缓存的高速缓冲存储器412。在一些实施例中,高速缓冲存储器412可以体现为处理器402可以比存储器406更快地存取的任何类型的高速缓冲存储器。例如,在一些实施例中,高速缓冲存储器412的全部或一部分可以是管芯外高速缓存,但驻留在与处理器402相同的SoC上。
在操作期间,如下面将进一步详细描述的,网络流信息被写入到流查找表414中,该流查找表414将映射信息提供给转发表416,转发表416可能太大而不能存储在高速缓冲存储器412中。网络流信息可以包括诸如与特定网络流相对应的流标识符和流元组的信息(例如,源IP地址、源端口号、目的地IP地址、目的地端口号以及协议)。应该意识到,网络流信息可以包括与特定网络流相对应的任何其他类型的信息或信息的组合。在一些实施例中,诸如SDN控制器的、与网络设备400连接的网络控制器(未示出)可以定义流(即,计算该流的路由)并且提供所定义的流以用于沿由流识别的传输路径进入每个网络设备的流查找表414。
尽管说明性流查找表414存储在高速缓冲存储器412中,但是在一些实施例中,流查找表414的至少一部分可以存储在网络设备400的存储器406(即,主存储器)中。由于与必须执行对存储器406中的转发表416中的网络流信息的查找相关联的时延,可以将键/值对存储在流查找表414(例如,散列表或散列查找表)中的、将输入值(例如,与接收到的网络分组有关的数据)映射到转发表414的转发表条目的条目中。
数据存储设备408可以体现为被配置用于短期或长期存储数据的任何类型的设备或多个设备,例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或者其他数据存储设备。在一些实施例中,数据存储设备408可以用于存储一个或多个可信执行环境的内容。当由数据存储设备408存储时,可信执行环境的内容可以被加密以防止未授权的软件进行访问。
通信电路410可以体现为能够实现通过安装网络设备400的网络之间的网络链路进行的通信的任何通信电路、设备或其集合。通信电路410可以被配置为使用任何一种或多种通信技术(例如,有线或无线通信)和相关联的协议(例如,以太网、InfiniBand、WiMAX等)来实现这样的通信。说明性通信电路410另外包括网络接口卡(NIC)418。一般地,NIC 418可以连接采用(多个)相同协议与任何其他网络设备或端点设备进行通信的网络设备400。NIC 418可以体现为可以由网络设备400使用的一个或多个附加板、子卡、网络接口卡、控制器芯片、芯片组或其他设备。
在操作期间,网络设备400建立执行环境500。在说明性执行环境500中,网络设备400包括网络通信模块502和流查找表管理模块504。说明性执行环境500另外包括流查找表数据506,其可以包括网络流相关的信息。执行环境500的各种模块可以体现为硬件、固件、软件或其组合。例如,执行环境500的各种模块、逻辑和其他组件可以形成处理器402或网络设备400的其他硬件组件的一部分或以其他方式由处理器402或网络设备400的其他硬件组件建立。因此,在一些实施例中,执行环境500的模块中的任何一个或多个模块可以体现为电子设备的电路或集合(例如,网络通信电路、流查找表管理电路等)。另外或可替代地,在一些实施例中,说明性模块中的一个或多个可以形成另一模块的一部分,和/或说明性模块和/或子模块中的一个或多个可以体现为单独的或独立的模块。
网络通信模块502被配置为促进网络设备400与网络中的其他设备之间的网络通信。例如,网络通信模块502被配置为接收并处理由网络设备400接收的网络分组并且准备并发送来自网络设备400的网络分组。因此,网络通信模块502的功能中的至少一部分功能可以由通信电路410来执行,并且更具体地由NIC 418来执行。另外,网络通信模块502可以通过解析网络分组的至少一部分(例如,分组报头)来处理接收到的网络分组,以确定接收到的网络分组的网络流信息(例如,5元组流识别、源IP/MAC/端口、目的地IP/MAC/端口等)和/或通过利用更新后的网络流信息对网络分组进行更新来准备网络分组以供传输。
流查找表管理模块504被配置为管理流查找表(例如,图4中的流查找表414)的流查找表数据506。如上面描述的,流查找表414包括多个桶,每个桶包括一个或多个键/值对和对应的版本计数器。流查找表管理模块504包括流查找表读取模块508和流查找表写入模块510,以支持并发地从流查找表读取和写入流查找表。
流查找表读取模块508被配置为对要从流查找表数据506读取的流查找表执行读取操作。流查找表读取模块508可以被配置为对流查找表数据执行查找,其实施例在图7、图10a和图10b中示出。在一些实施例中,流查找表读取模块508可以被配置为并行地执行多个读取操作,而不需要任何锁定或互斥。如先前描述的,可以基于流查找表的结构(例如,流查找表的路关联的路编号)将版本计数器与每个散列表桶进行关联。与要求比较读取操作前和读取操作后的版本计数器的传统读取/写入冲突检测方法不同,流查找表读取模块508在读取/查找操作期间仅在读取操作之后如果在流查找表中的预期位置或桶中未找到键/值对中的键时执行版本计数器比较。
流查找表写入模块510被配置为对要写入流查找表414的流查找表数据执行写入操作。流查找表写入模块510还可以被配置为,当将键/值对更新或***到流查找表数据506中时,执行移位过程,如下面的图10a和图10b所示。每次流查找表写入模块访问桶以进行修改时,并且针对流查找表写入模块何时对桶进行修改,流查找表写入模块510使版本计数器递增。
在一些实施例中,可以通过基于网络设备400的处理器402的架构使用固有加载和存储指令来减少与版本计数器检查和比较相关联的开销。例如,在架构(IA)实施例中,IA固有指令可以包括读取键/值对的“mm_加载”和写入键/值对的“mm_存储”。另外,为了支持原子操作,可以基于流查找表的条目的大小将键/值对存储在单个高速缓存对齐的数据结构中(即,键和值两者存储在相同的数据结构中)。例如,如果流查找表数据506中的条目的大小等于16字节,则单个高速缓存对齐的数据结构可以具有小于或等于16字节的大小。因此,流查找表写入模块510可以在单个操作中将键/值对移位,而不是针对键进行一个写入操作并且针对值进行另一写入操作。因此,如果在流查找表中找到(即,由流查找表读取模块508读取)键/值对,则可以假定与找到的键相关联的值是有效的。换言之,如果在流查找表中找到键/值对,则可以假定流查找表没有处于更新过程中。
如上面讨论的,虚拟化在数据中心中的使用实质地增加了计算节点的数量。此外,非常大的数据中心可能将成千上万的设备互连——以便在这些设备之间转发,非常大的转发表是必要的。构建快速以太网交换机的一种常见方法是使用与专用高速存储器(例如,TCAM)耦合的定制ASIC来存储转发表数据。然而,这些存储器昂贵、耗电量大而且大小非常有限。例如,中等距离Mellanox SX1016 64端口10GbE交换机仅支持48K第2层转发条目。相比之下,商用硬件的基于软件的交换机可以可负担地将较大的表存储在SRAM(CPU高速缓存)或DRAM中。
为了更好地利用运行基于x86的处理器的商用服务器和类似平台的架构,公司开发了数据平面开发套件(或DPDK),其是针对设计用于x86平台上的高速分组处理的NIC驱动器进行优化的一组库。DPDK将通常是操作***(OS)内核的一部分的设备驱动程序放置在用户空间,以允许零复制分组处理,而无需修改OS内核。为了提高效率,DPDK将批量分组交给处理线程以一起进行处理。
图6中示出了DPDK架构600的说明。如所示出的,DPDK架构600包括用户空间602、内核空间604和硬件606。如上面陈述的,DPDK库608在用户空间602而不是内核空间604中实现。DPDK库包括NIC驱动器610、存储器池管理器612、缓冲器管理器614、队列管理器616、环管理器618和流分类620。这些用户空间组件经由环境抽象层622与硬件606中的硬件组件相接合。在图6中,所示出的硬件组件包括经由端口626耦合到网络的多个NIC 624。NIC 624还被示为经由PCIe互连628耦合到环境抽象层622;PCIe使用NIC上的存储器映射IO(MMIO)来支持DMA(直接存储器存取)读取和写入,使得分组能够在用户空间602中的缓冲器与NIC624之间传送,而无需处理器干预。
存储器池管理器612负责分配存储器中的对象的池。池在巨大的页存储器空间中创建,并且使用环来存储空闲对象。还提供了对齐助手,以确保填充对象以在所有DRAM通道上均匀散布对象。缓冲器管理器614使操作***花费在对缓冲器进行分配和取消分配上的时间减少显著的量。DPDK预先分配存储在存储器池中的固定大小的缓冲器。队列管理器616实现安全无锁队列而不是使用自旋锁定,这允许不同的软件组件处理分组同时避免不必要的等待时间。
流分类620提供了以下高效机制:其包含流送SIMD扩展(SSE)以产生基于元组信息的散列,使得可以快速地将分组放入流中以供处理,从而大大提高吞吐量。NIC驱动器610包括针对1GbE和10GbE以太网控制器的轮询模式驱动器,其被设计为在没有异步、基于中断的信令机制的情况下工作,这大大地加速了分组管线。
在操作期间,应用630和632作为分组消费者和生产者来操作,并且示为由DPDK架构支持的各种类型的应用。另外,应用630和632可以示为NFV装置等。
如上面讨论的,流表采用散列化方案的使用来存储和取回基于散列的键-值对。然而,常规的基于散列的查找表典型地是存储器效率低下的,这在尝试实现大规模或使查找表适合快速、昂贵的SRAM时变得重要。例如,要求额外的空间来避免散列表中的冲突,当两个不同的键产生相同的散列结果时会导致冲突。另外,为了避免锁定开销,同时允许从转发表中读取多个线程,使用诸如读取-复制更新(Read-Copy Update)之类的指针互换方法来更新表,这要求存储表的两个完整副本而不是一个副本。
一种解决这个问题的方法是使用称为布谷鸟散列化的散列表方案。在布谷鸟散列化下,利用第一散列函数对键进行散列,第一散列函数识别其中可以存储键的第一候选行(桶)以及相关联的值。每个桶具有其可以保留的多个条目。只要对于给定桶存在可用条目,新的键就会被添加到该桶。然而,如果由于利用第一散列函数对键进行散列化而产生的桶是满的,则使用第二散列函数,并且将该键-值对存储在与第二散列函数的结果相对应的行处。在一些状况下,这两个桶都是满的,在这种情况下,现有条目中的一个被逐出并且通过对键进行重新散列化来重新定位以识别其要重新定位到的桶。如果有必要,该键重新定位过程可以级联多次。
对布谷鸟散列表的读取访问如下进行(暂时无需考虑并发访问)。第一散列将应用于键,识别其中存储有键的第一候选桶。对桶中的条目进行搜索以经由匹配的键来定位正确的条目。如果未找到匹配,则应用第二散列函数来识别第二候选桶,保证该键被存储在第一候选桶和第二候选桶中的一个桶中的条目中。
图7示出了体现为两路(散列)函数的四路关联查找表的示例性布谷鸟散列表700,其中每个行或桶702包括用于存储键/值对706的四个条目704,其中每个条目包括键708及其相关联的值710。可选地,值可以是指向适用值经由其进行存储的另一表或数据结构的指针。另外,每个桶702被映射到对应的版本计数器712。为了减少版本计数器的数量,每个版本计数器经由条纹化映射到多个桶。(尽管在该示例中示出了两个桶,但是更一般地,给定版本计数器可以映射到l-n个桶。)另外,虽然在说明性实施例中示出了四路集合关联散列表,但是应当意识到,可以使用替代集合关联散列表。
在现有的单写入器/多读取器并发方案下,为了确保读取器看到关于并发写入器的有效数据,读取器使用版本计数器来检测在其访问桶时所做的任何更改。无论何时写入器修改桶,写入器使版本计数器递增;每个读取器抓拍并比较在读取对应的桶之前和之后的版本号。这样,读取器检测到来自版本计数器更改的读取-写入冲突。
为了以无锁方式支持多个并发写入器,本文的实施例的基本方面是保证仅一个写入器可以在任何给定时刻获取对某个关键部分(桶)的更新权限。在一个实施例中,这部分地通过使用在一些处理器上可用的比较并互换(CAS)指令来实现。例如,对于架构(IA)处理器,对应的CAS指令称为比较并交换指令(CMPXCHG)。CAS以自动方式(具有锁定前缀)执行比较和互换,以保证值更新是基于最新版本的。CAS将存储器位置的内容与给定值进行比较,并且仅它们匹配时,才将该存储器位置的内容修改为给定的新值。该操作的原子性保证新值是基于最新近的信息计算的;如果在此期间该值已被另一线程更新,则指令将返回“失败”。
当写入器线程想要进行更新时,它首先读取对应桶的版本计数器(V_old),如果其为奇数,则指示更新正在进行,读取器将再次读取版本计数器直到其为偶数为止。当V_old是偶数时,写入器执行CAS(*(版本计数器),V_old,V_old+1)。这将当前版本计数器值与V_old进行比较,并且如果它们匹配,则版本计数器值更新为V_old+1并返回成功。这保证仅该写入器获取对此部分的更新权限,并且版本计数器增加1成为奇数,因此其他读取器和写入器知道正在进行更新。对不同的关键部分进行操作的读取器和其他写入器可以并行地执行其操作,而不受此更新的影响。如果CAS返回“失败”,则指示另一写入器线程获取了更新权限。该写入器线程将从读取当前的version_counter重新开始。
在下面的示例中,描述并说明了使用布谷鸟散列表的实现方式。然而,这不是限制性的,因为这些技术也可以适用于常规的单函数散列表,只要每个关键部分(一个或多个桶)与版本计数器相关联即可。其也适用于其中值与键分开存储的数据结构;其中键是指向值的指针。
图8示出了根据一个实施例的示出用于写入器线程的更新过程的操作和逻辑的流程图800。该过程开始于开始框800,其中对桶b的更新开始。在框804中,读取桶b的版本计数器V-old。在判定框806中,对V_old是否为奇数做出确定。如果是奇数(回答是),则逻辑循环回到框804。如果V_old是偶数,则对判定框806的回答为否,并且逻辑前进到框808,其中使用指向版本计数器的指针(*version_counter)、V_old和V_old+l作为输入参数来执行CMPXCHG指令。
在判定框810中,对CMPXCHG指令是否成功做出确定。如果不成功(否),则逻辑循环回到框804。如果是,则逻辑前进到框812,其中桶b中的对应条目值被更新。然后在框814中,与桶b相对应的版本计数器值增加1。
布谷鸟散列化键***过程比更新现有值更复杂,因为***过程可能由于潜在地长布谷鸟路径而涉及多个关键部分(桶)。在现有方法下,在找到布谷鸟路径之后,每个移位(重新定位)操作的两个桶被“锁定”(通过将对应的版本计数器增加1)以移动该键;因此,在任何给定时间,仅这两个桶不可供读取器用于查找。
为了支持针对键***情况的多写入器/多读取器,在执行之前对布谷鸟路径中涉及的所有关键部分获取更新权限。这是为了防止多个写入器可能具有用于其代表性布谷鸟路径的重叠部分的情形。如果写入器未能获得至少一个关键部分的更新权限(V_old在特定次数的尝试之后总是奇数或CAS返回“失败”),则指示过程中存在冲突更新,该写入器的更新过程将回滚。回滚过程是指回滚通过成功的CAS操作被设置为奇数的那些桶的版本计数器,然后等待随机时间间隔并再次尝试。等待随机间隔用于避免当若干线程可能尝试对相同部分获取更新权限因此它们总是冲突时进行实时锁定。
图9示出了根据一个实施例的示出用于执行支持多个并发写入器的布谷鸟散列表***的操作和逻辑的流程图900。键***过程开始于开始框902,随后是框904,其中确定用于***和任何适用键重新定位的布谷鸟路径。注意,框904的操作是确定要用于键***而不是执行***本身的布谷鸟路径的预期操作。为了更好地理解这需要什么,在图10a和图10b中示出了与示例键***过程相结合的布谷鸟路径。
在图10a和图10b中,散列表1000被描绘为具有选定的桶1002、1004和1006,每个桶与相应的版本计数器1008、1010和1012相关联。在键***过程的开始处,桶1002中的四个条目包括键'r'、'n'和'j',其中一个保持空条目槽1013。桶1004的四个条目包括键'a'、'f'、'c'和'g',而桶1006的四个条目包括键'b'、'k'、'y'和'l'。如上面讨论的,条目704中的每个可以包括键-值对;为了简单和说明的目的,在图10a和图10b中仅示出了键。同样如上面讨论的,给定条目可以包括指向包含值或键-值对的另一表或数据结构的指针。另外,为了说明的目的,键被描绘成单个字符;在实践中,键典型地可以是与适用散列化函数的结果相对应的数值。另外,布谷鸟散列表1000中的其他条目704的大部分也将包含现有的键(或键-值对);为了简单和清晰起见,条目示为空白。
在图10a所示的时间帧之前,将键'y'***到桶1006的第三条目槽1014中。通过对键'y'使用第一散列函数来确定桶1006,如hash1(y)所描绘的。桶1006的第三条目槽1014可用(或以其他方式经由对现有键的重新定位而变得可用),并且因此键'y'及其相关联的值(未示出)成功***到条目槽1014中。
移动到图10b,现在假设希望将键'x'***到布谷鸟散列表1000中。如前所述,对键'x'执行第一散列函数,如hash1(x)所描绘的。如所示出的,该第一散列函数的结果指向与桶1004相对应的行。然而,桶1004中的条目槽中的每个是满的,所以对于键'x'没有可用的条目槽,这对应于“未命中”。因此,对键'x'执行第二散列函数,如hash2(x)所描绘的。该散列函数结果指向与桶1006相对应的行,其同样是满的。
在这种实例中,尽管第二散列函数的结果是未命中,但键'x'需要***到桶1006中的条目槽中的一个中。在该示例中,选择条目槽1014,注意各种方案可以用于选择要逐出并重新定位哪个当前条目。由于条目槽1014当前被键'y'占用,因此需要重新定位该键以便为键'x'留出空间。
重新定位操作通过对键'y'执行第二散列函数来实现,如hash2(y)所描绘的。这次得到的行对应于具有空槽1013的桶1002。因此,键'y'(或其键-值对,如果适用)从条目槽1014重新定位到条目槽1013。如果桶1002也是满的,则以与针对键'y'所示的类似的方式,其现有条目中的一个被逐出并重新定位到由第一散列函数和第二散列函数中的一个散列函数的结果识别的桶。该重新定位过程将以迭代的方式继续,直到找到空槽为止。此时,键***过程完成。
返回框904,布谷鸟路径是***新键所需的完整路径,其在图10a和图10b所示的示例中分别对应于将桶b1、b2...bn识别为桶1002、1004和1006。所识别的桶还与相应的版本计数器1008、1010和1012相关联,并且具有布谷鸟路径长度n=3。
在框906中,整数计数器i被设置为1。在判定框908中,对是否i>n(在框904中确定的路径长度)做出确定。如果答案为否,则逻辑前进到框914,其中读取桶bi的版本计数器V_old。在判定框916中,对V_old是否为奇数做出确定。如果答案为否,则逻辑前进到框918,其中使用输入参数来执行CMPXCHG指令,输入参数包括指向针对bi的version_counter的指针以及V_old和V_old+1。
在判定框920中,对CPMXCHG指令的执行是否返回成功结果做出确定。如果是,则在框922中使i递增,并且逻辑返回到判定框908以评估布谷鸟路径中的下一个桶。一旦处理了沿布谷鸟路径的桶中的每个桶,则对判定框908的回答为是,并且逻辑将前进到指示已经获得所有更新权限的框910并且更新对应的桶b1、b2...bn。然后在框912中通过使针对桶b1、b2...bn的所有版本计数器递增l来完成***过程。
返回判定框916,如果V_old是偶数,则答案为是,并且逻辑前进到判定框924,其中对尝试的次数是否超过阈值做出确定。尝试次数的阈值是这样的参数:其可以被配置为防止当两个路径各自获取其路径的一部分并且现在正在争用公共桶时进行死锁。阈值的值的大小可以基于布谷鸟路径的平均长度来设置,以确保1)重试过程平均而言足够有耐心来等待潜在的正在进行的***操作完成;2)如果存在死锁,其不会等待太久。如果对判定框924的回答为否,则逻辑返回框914。
如果尝试的次数已经超过阈值,则对判定框924的回答为是,并且逻辑前进到框926,其中与布谷鸟时钟中的桶b1、b2...bn相关联的所有版本计数器被回滚,随后是随机等待间隔。这实现了前述回滚操作。如图9进一步所示,如果CMPXCHG未成功执行,则对判定框920的回答为否,这导致逻辑同样前进到框926以实现回滚操作。在随机等待间隔完成时,逻辑返回框906。
一般地,没有极大程度地加载的表(例如,占用率<80%)的布谷鸟路径相对短,只包含几个桶。注意,在实际的实现方式中,新键***的频率将远低于读取的频率。进一步注意,由于每个版本计数器仅负责散列表的非常小的范围,因此在正常情况下,争用不应该太高,并且锁定前缀的开销应该是可管理的。
在一个实施例中,分组处理管线具有三个阶段。在第一阶段,NIC从网络接收分组,并且使用直接存储器存取(DMA)将分组推入接收(RX)队列。为了将分组处理的负载均匀散布到所有CPU核心上,NIC使用接收侧缩放(RSS)。RSS是硬件特征,其基于分组报头中选定字段的散列将分组指引到不同的RX队列;这确保流内的所有分组由同一队列处理,以防止重新排序。
在传入分组被放入对应的RX队列之后,一组用户空间工作者线程从其被分配的RX队列中读取分组(例如,以循环方式),并且从每个分组中提取目的地MAC地址(DMAC)。接下来,在返回每个DMAC的输出端口的并发多读取器、多写入器布谷鸟散列表中查找DMAC。然后工作者线程将分组分发到与对应输出端口相关联的发送(TX)队列。
在第三阶段,NIC在TX队列中发送分组。对于非统一存储器架构(NUMA)架构平台,为了避免争用和同步开销,以及高效地使用NUMA域间带宽,在与该核心相同的NUMA域中的每个NIC上针对每个CPU核心(对应于一个工作者线程)创建RX队列。
图11示出了具有两个单端口NIC 1100(NIC 1)和1102(NIC 2)以及两个工作者线程1104(线程1)和1106(线程2)的简化实现方式配置。每个端口将其传入分组分成两个RX队列1108,每个线程一个RX队列。两个工作者线程从与其关联的两个RX队列中取回分组并执行DMAC查找。然后,工作者线程基于从DMAC查找返回的输出端口将分组推入TX队列1110。
为了高效,DPDK管理分组队列以确保分组无需在接收路径上复制(在初始DMA之后)。使用该设置,必须出现的唯一分组复制发生在将分组从RX队列复制到出站TX队列时。
示例性NUMA平台
如上面讨论的,在一个实施例中,可以在采用NUMA架构的平台上实现本文所描述的技术的方面。图12示出了采用两个NUMA节点1202a和1202b(也标记为'A'和'B')的NUMA多处理器平台架构1200的一个实施例。为了简单和方便,本文中对节点的引用可以对其字母标签而不是其附图标记进行。另外,对跨节点公共的组件的引用对基本附图标记做出,而字母'a'、'b'被添加到附图的附图标记中以在特定节点上识别该组件。例如,节点A和B中的每个包括处理器1204,处理器1204对于节点A的处理器被标记为1204a并且对于节点B的处理器被标记为1204b。
除了处理器1204之外,每个节点包括***存储器1206和多个NIC 1208。每个处理器1204包括核心部分,核心部分包括多个处理器核心1210,每个处理器核心1210包括本地1级(L1)和2级(L2)高速缓存。处理器的其余部分被称为非核心,并且包括用于在通信中连接处理器的各种功能框的各种互连电路和接口。为了简单起见,该互连电路被描绘为互连1212;然而,应理解,互连1212可以代表一个或多个互连结构,例如,总线和单通道或多通道串行点对点或网状互连结构(包括互连层级)。
非核心电路的一部分被配置为处理诸如NIC的设备的存储器控制和PCIe接口。在图12中的处理器非核心中描绘的对应示例性功能框包括PCIe接口(I/F)1214、PCIe根复合体(RC)1215、最后一级高速缓存(LL高速缓存)1216、存储器控制器(MC)1217以及插槽到插槽链路接口(S-to-SI/F)1218。除了这些示出的框之外,每个处理器1204可以包括为了清楚起见未示出的许多其他功能框。
处理器1204中的每个经由插槽可操作地耦合到称为主板1220的印刷电路板,或者以其他方式经由直接耦合技术(例如,倒装芯片接合)耦合到主板。在任何一种情况下,通常的实践是将处理器本身称为插槽,并且因此将术语插槽到插槽链路和接口用于耦合通信中的处理器节点。主板1220包括电连线(例如,迹线和通孔)以促进与图12中所描绘的各种互连的物理结构相对应的电连接。这些互连包括PCIe接口1214与NIC 1208之间的PCIe互连1222、1224和225,以及耦合在插槽到插槽接口1218a和1218b之间的插槽到插槽链路1226。在一个实施例中,插槽到插槽接口1218a和1218b采用QuickPath互联协议和连线结构、Keiser技术接口或UltraPath互连(UPI)中的一个。
在NUMA架构下,处理器(和处理器核心)被使得能够存取跨平台分布的不同存储器资源。可以认为存储器资源是本地存储器资源(例如,与处理器或核心相同的节点上的存储器资源)或非本地存储器资源(例如,其他节点上的存储器资源)。例如,在节点1202a的观点下,***存储器1206a包括本地存储器资源,而***存储器1206b包括非本地存储器资源。在另一种类型的NUMA架构(这里未描绘)下,非本地存储器资源还可以在处理器之间共享,而不与特定处理器或节点相关联。由于对于给定节点,本地存储器资源可操作地耦合到处理器,而非本地存储器资源不是如此,因此对本地存储器资源的存取相对于非本地存储器资源是不相同的(例如,存取是不统一的)。此外,优选的是在可用时采用本地存储器资源。
在平台架构1200下,在一个节点中的处理器核心上运行的软件可以被分配名义上与另一节点相关联的***存储器中的存储器地址空间。因此,在一些实施例中,用于平台的存储器资源的一部分的地址空间可以作为单个全局池来管理,该池中的每个存储器地址位置具有唯一的地址。另外,可以认为地址空间的一部分是采用本地寻址的本地地址空间(例如,分配给操作***的地址空间),而另一部分可以使用全局寻址来进行寻址。使用全局池使得流表数据能够跨NUMA节点共享并且在NUMA节点之间分布。
本文描述的主题的另外的方面在以下按编号的条款中陈述:
1、一种用于支持针对分组流数据的多写入器和多读取器并发的方法,包括:
在包括多个处理器核心的主机平台的存储器中实现流表,流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
采用在多个核心上执行的多个线程来提供对流表中的数据的更新,每个线程包括写入器;
将新的键数据***到流表中,对新的键数据的***要求对多个桶中的键数据进行更新;以及
实现访问机制,该访问机制保证在新的键数据正被***到流表中的同时仅一个写入器能够更新多个桶中的任一个桶。
2、条款1的方法,还包括:
识别包括将与***新的键数据相结合地被更新的键数据的多个桶;
在更新多个桶中的任一个桶之前,获取对多个桶中的每个桶的更新权限;以及
更新多个桶中的每个桶中的键数据,以实现对新的键数据的***。
3、条款2的方法,其中,获取对所识别的桶中的每个桶的更新权限包括使用比较并互换(CAS)指令。
4、条款3的方法,其中,CAS指令包括比较并交换指令(CMPXCHG)指令。
5、前述条款中任一项的方法,其中,流表是其中每个桶具有多个条目槽的布谷鸟散列表,方法还包括确定完整布谷鸟路径,完整布谷鸟路径用于***新的键数据,以识别包括将与***新的键数据相结合地被更新的键数据的多个桶。
6、前述条款中任一项的方法,还包括:
针对具有将经由对新的键数据进行的***而被更新的键数据的多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果当前数据不是正在被更新,则更新与该桶相关联的版本计数器的计数,以指示该桶中的当前数据处于被更新的过程中。
7、条款6的方法,还包括:
确定桶中的至少一个桶的当前数据不是正在被更新;
使与桶中的不是正在被更新的至少一个桶相关联的版本计数器递增;
随后确定桶中的一个桶中的当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与桶中的不是正在被更新的至少一个桶相关联的、被递增的每个版本计数器。
8、条款7的方法,其中,操作与获取对多个桶中的每个桶的更新权限的失败尝试相关联,该方法还包括:
在版本计数器被回滚之后等待随机时间间隔;以及
重新尝试获取对多个桶中的每个桶的更新权限。
9、条款6的方法,其中,更新版本计数器的计数包括使当前计数器值递增,该方法还包括:
确定对多个桶中的每个桶的更新权限被获取;
更新多个桶中的每个桶中的键数据,并且与对每个桶进行的更新相关联地使与该桶相关联的版本计数器递增。
10、前述条款中任一项的方法,其中,主机平台包括具有非统一存储器存取(NUMA)架构的多插槽式平台。
11、条款1的方法,还包括:
识别与多个桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在新的键数据正被***到流表中的同时仅一个写入器能够更新使用所识别的版本计数器的任一个桶。
12、条款1的方法,还包括:
识别与具有包含要修改的现有键数据的条目的桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在现有键数据正被修改的同时仅一个写入器能够更新共享所识别的相同版本计数器的任一个桶。
13、一种或多种非暂时性机器可读介质,其上存储有指令,指令被配置为在包括可操作地耦合到***存储器的多个处理器核心的主机平台上执行,其中,指令被配置为在执行时用于:
在***存储器的一部分中实现流表,流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
启动多个线程,每个线程包括写入器或读取器,每个写入器被配置为更新流表中的数据并且每个读取器被配置为读取流表中的数据;
经由多个写入器将新的键数据***到流表中,对新的键数据的***要求对多个桶中的键数据进行更新;以及
使得在新的键数据正被***到流表中的同时,仅单个写入器能够更新对新的键数据进行给定***所要求的多个桶中的任一个桶。
14、条款13的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
识别包括将与***新的键数据相结合地被更新的键数据的多个桶;
在更新多个桶中的任一个桶之前,获取对多个桶中的每个桶的更新权限;以及
更新多个桶中的每个桶中的键数据,以实现对新的键数据的***。
15、条款14的一种或多种非暂时性机器可读介质,其中,获取对所识别的桶中的每个桶的更新权限包括使用比较并互换(CAS)指令。
16、条款15的一种或多种非暂时性机器可读介质,其中,CAS指令包括比较并交换指令(CMPXCHG)指令。
17、条款13-16中任一项的一种或多种非暂时性机器可读介质,其中,流表是其中每个桶具有多个条目槽的布谷鸟散列表,其中,指令还被配置为在执行时用于确定完整布谷鸟路径,完整布谷鸟路径用于***新的键数据,以识别包括将与***新的键数据相结合地被更新的键数据的多个桶。
18、条款13-17中任一项的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
针对具有将经由对新的键数据进行的***而被更新的键数据的多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果当前数据不是正在被更新,则更新与该桶相关联的版本计数器的计数,以指示该桶中的当前数据处于被更新的过程中。
19、条款18的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
确定桶中的至少一个桶的当前数据不是正在被更新;
使与桶中的不是正在被更新的至少一个桶相关联的版本计数器递增;
随后确定桶中的一个桶中的当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与桶中的不是正在被更新的至少一个桶相关联的、被递增的每个版本计数器。
20、条款19的一种或多种非暂时性机器可读介质,其中,操作与获取对多个桶中的每个桶的更新权限的失败尝试相关联,其中,指令还被配置为在执行时用于:
在版本计数器被回滚之后等待随机时间间隔;以及
重新尝试获取对多个桶中的每个桶的更新权限。
21、条款18的一种或多种非暂时性机器可读介质,其中,更新版本计数器的计数包括使当前计数器值递增,其中,指令还被配置为在执行时用于:
确定对多个桶中的每个桶的更新权限被获取;
更新多个桶中的每个桶中的键数据,并且与对每个桶进行的更新相关联地使与该桶相关联的版本计数器递增。
22、条款13-16中任一项的一种或多种非暂时性机器可读介质,其中,主机平台包括具有非统一存储器存取(NUMA)架构的多插槽式平台。
23、条款13-22中任一项的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
识别与多个桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在新的键数据正被***到流表中的同时仅一个写入器能够更新使用所识别的版本计数器的任一个桶。
24、条款13-23中任一项的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
识别与具有包含要修改的现有键数据的条目的桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在现有键数据正被修改的同时仅一个写入器能够更新共享所识别的相同版本计数器的任一个桶。
25、一种主机平台,包括:
第一处理器,其具有多个处理器核心;
***存储器,其可操作地耦合到第一处理器;
多个网络接口控制器,每个网络接口控制器具有一个或多个网络端口;以及
至少一个存储设备,其中存储有指令,指令被配置为在多个处理器核心上执行,其中,指令的执行使得主机平台能够用于,
使用布谷鸟散列化在***存储器的一部分中实现流表,流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含用于存储键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
启动多个线程,每个线程包括写入器或读取器,每个写入器被配置为更新流表中的数据并且每个读取器被配置为读取流表中的数据;
经由多个写入器将新的键数据***到流表中,其中,针对新的键数据的***的至少一部分,沿布谷鸟路径的多个桶中的键数据被更新;以及
使得在新的键数据正被***到流表中的同时,仅单个写入器能够针对新的键数据的给定***来更新沿给定的布谷鸟路径的多个桶中的任一个桶,
其中,多个写入器被使得能够当前执行对新的键数据的***。
26、条款25的主机平台,其中,指令还被配置为在执行时通过以下操作来促进对新的键数据的***:
针对新的键数据识别沿布谷鸟路径的多个桶,其中,第一桶是经由第一散列函数和第二散列函数中的一个被识别的;
在更新多个桶中的任一个桶之前,获取对沿布谷鸟路径的多个桶中的每个桶的更新权限;以及
更新沿布谷鸟路径的多个桶中的每个桶中的键数据,以实现对新的键数据的***。
27、条款26的主机平台,其中,指令还被配置为在执行时用于:
针对沿布谷鸟路径的多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果当前数据不是正在被更新,则使与该桶相关联的版本计数器的计数递增,以指示该桶中的当前数据处于被更新的过程中。
28、条款27的主机平台,其中,指令还被配置为在执行时用于:
确定桶中的至少一个桶的当前数据不是正在被更新;
使与桶中的不是正在被更新的至少一个桶相关联的版本计数器递增;
随后确定桶中的一个桶中的当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与桶中的不是正在被更新的至少一个桶相关联的、被递增的每个版本计数器。
29、条款28的主机平台,其中,操作与获取对多个桶中的每个桶的更新权限的失败尝试相关联,其中,指令还被配置为在执行时用于:
在版本计数器被回滚之后等待随机时间间隔;以及
重新尝试获取对多个桶中的每个桶的更新权限。
30、条款27的主机平台,其中,更新版本计数器的计数包括使当前计数器值递增,其中,指令还被配置为在执行时用于:
确定对多个桶中的每个桶的更新权限被获取;
更新多个桶中的每个桶中的键数据,并且与对每个桶进行的更新相关联地使与该桶相关联的版本计数器递增。
31、条款25-30中任一项的主机平台,其中指令还被配置为在执行时用于:
识别与多个桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在新的键数据正被***到流表中的同时仅一个写入器能够更新使用所识别的版本计数器的任一个桶。
32、条款25-31中任一项的一种或多种非暂时性机器可读介质,其中,指令还被配置为在执行时用于:
识别与具有包含要修改的现有键数据的条目的桶相关联的版本计数器;以及
实现访问机制,该访问机制保证在现有键数据正被修改的同时仅一个写入器能够更新共享所识别的相同版本计数器的任一个桶。
33、条款25-32中任一项的主机平台,其中,***存储器包括***存储器的第一部分,主机平台还包括:
第二处理器,其具有多个处理器核心,第二处理器经由处理器到处理器互连耦合到第一处理器;
***存储器的第二部分;其可操作地耦合到第二处理器,
其中,主机平台采用使得第一处理器和第二处理器中的每个能够存取存储器的第一部分和第二部分中的每个的非统一存储器存取(NUMA)架构,并且其中,流表的相应部分被存储在***存储器的第一部分和第二部分中。
虽然已经参考特定实现方式描述了一些实施例,但是根据一些实施例的其他实现方式是可能的。另外,附图中示出的和/或本文描述的元件或其他特征的布置和/或顺序不一定以所示出和描述的特定方式进行布置。根据一些实施例的许多其他布置是可能的。
在附图中所示的每个***中,元件在一些情况下可以各自具有相同的附图标记或不同的附图标记,以表明所表示的元件可以是不同的和/或相似的。然而,元件可能足够灵活以具有不同的实现方式并且与本文所示出或描述的***中的一些或全部一起起作用。附图中所示的各种元件可以相同或不同的。哪一个被称为第一元件并且哪一个被称为第二元件是任意的。
在说明书和权利要求书中,可以使用术语“耦合”和“连接”以及它们的派生词。应该理解,这些术语不旨在作为彼此的同义词。而是,在特定实施例中,“连接”可以用于指示两个或更多个元件彼此直接物理或电接触。“耦合”可以表示两个或更多个元件直接物理或电接触。然而,“耦合”也可以表示两个或更多个元件彼此不直接接触,但仍然彼此协作或交互。
实施例是发明的实现方式或示例。说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的引用意味着结合实施例描述的特定特征、结构或特性包括在至少一些实施例中,但是不一定是本发明的所有实施例。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定全部指代相同的实施例。
并非本文中描述和示出的所有组件、特征、结构、特性等都需要包括在特定实施例或多个实施例中。例如,如果说明书陈述了“可以”、“可能”、“能够”或“可”包括组件、特征、结构或特性,则不一定要求包括该特定组件、特征、结构或特性。如果说明书或权利要求书涉及“一”或“一个”元件,则并不意味着只有一个元件。如果说明书或权利要求涉及“附加”元件,则不排除存在多于一个附加元件。
如上面讨论的,可以通过对应的软件和/或固件组件和应用(例如,由嵌入式处理器等执行的软件和/或固件)来促进本文的实施例的各个方面。因此,本发明的实施例可以用作或支持在某种形式的处理器、处理核心或嵌入式逻辑上执行的软件程序、软件模块、固件和/或分布式软件,在处理器或核心上运行的虚拟机,或以其他方式在计算机可读或机器可读的非暂时性存储介质上或其内实施或实现。计算机可读或机器可读的非暂时性存储介质包括用于以机器(例如,计算机)可读形式存储或传输信息的任何机制。例如,计算机可读或机器可读的非暂时性存储介质包括以可由计算机或计算机器(例如,计算设备、电子***等)存取的形式提供(即,存储和/或传输)信息的任何机制,例如,可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储器设备等)。内容可以是直接可执行的(“对象”或“可执行”形式)源代码或差分代码(“增量”或“补丁”代码)。计算机可读或机器可读的非暂时性存储介质还可以包括可以从其下载内容的存储装置或数据库。计算机可读或机器可读的非暂时性存储介质还可以包括在销售或交付时具有存储在其上的内容的设备或产品。因此,交付存储有内容的设备或提供用于通过通信介质下载的内容可以理解为提供包括具有本文描述的这种内容的计算机可读或机器可读的非暂时性存储介质的制品。
本文描述的以上称为过程、服务器或工具的各种组件可以是用于执行所描述的功能的手段。由本文描述的各种组件执行的操作和功能可以通过在处理元件上运行的软件、经由嵌入式硬件等或者硬件和软件的任何组合来实现。这些组件可以被实现为软件模块、硬件模块、专用硬件(例如,专用硬件、ASIC、DSP等)、嵌入式控制器、硬连线电路、硬件逻辑等。软件内容(例如,数据、指令、配置信息等)可以经由包括计算机可读或机器可读的非暂时性存储介质的制品来提供,该计算机可读或机器可读的非暂时性存储介质提供表示可以被执行的指令的内容。内容可以导致计算机执行本文描述的各种功能/操作。
如本文使用的,通过术语“……中的至少一个”连接的项目列表可以表示所列术语的任何组合。例如,短语“A、B或C中的至少一个”可以表示A;B;C;A和B;A和C;B和C;或A、B和C。
包括在摘要中描述的内容的本发明的所示实施例的以上描述不旨在是穷举性的或将本发明限制于所公开的精确形式。虽然本文为了说明的目的描述了本发明的具体实施例和示例,但是如相关领域技术人员将认识到的,在本发明的范围内的各种等同修改是可能的。
根据上面的具体实施方式可以对本发明进行这些修改。所附权利要求中使用的术语不应被解释为将本发明限制于说明书和附图中公开的具体实施例。相反,本发明的范围完全由所附权利要求确定,这些权利要求应根据已制定的权利要求释义的原则来解释。
Claims (25)
1.一种用于支持针对分组流数据的多写入器和多读取器并发的方法,包括:
在包括多个处理器核心的主机平台的存储器中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
采用在所述多个核心上执行的多个线程来对所述流表中的数据并发地进行更新,每个线程包括写入器;
将新的键数据***到所述流表中,对所述新的键数据的***要求对多个桶中的键数据进行更新;以及
实现访问机制,所述访问机制保证在所述新的键数据正被***到所述流表中的同时仅一个写入器能够更新所述多个桶中的任一个桶;
其中,在所述一个写入器正在更新对新的键数据进行所述***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述一个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
2.根据权利要求1所述的方法,还包括:
识别包括将与***所述新的键数据相结合地被更新的键数据的多个桶;
在更新所述多个桶中的任一个桶之前,获取对所述多个桶中的每个桶的更新权限;以及
更新所述多个桶中的每个桶中的键数据,以实现对所述新的键数据的***。
3.根据权利要求2所述的方法,其中,获取对所识别的桶中的每个桶的更新权限包括使用比较并互换(CAS)指令。
4.根据权利要求3所述的方法,其中,所述CAS指令包括比较并交换指令(CMPXCHG)指令。
5.根据前述权利要求中任一项所述的方法,其中,所述流表是其中每个桶具有多个条目槽的布谷鸟散列表,所述方法还包括确定完整布谷鸟路径,所述完整布谷鸟路径用于***所述新的键数据,以识别包括将与***所述新的键数据相结合地被更新的键数据的所述多个桶。
6.根据权利要求1-4中任一项所述的方法,还包括:
针对具有将经由对所述新的键数据进行的***而被更新的键数据的所述多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果所述当前数据不是正在被更新,则更新与该桶相关联的版本计数器的计数,以指示该桶中的所述当前数据处于被更新的过程中。
7.根据权利要求6所述的方法,还包括:
确定所述桶中的至少一个桶的所述当前数据不是正在被更新;
使与所述桶中的不是正在被更新的所述至少一个桶相关联的版本计数器递增;
随后确定所述桶中的一个桶中的所述当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与所述桶中的不是正在被更新的所述至少一个桶相关联的、被递增的每个版本计数器。
8.根据权利要求7所述的方法,其中,操作与失败的用于获取对所述多个桶中的每个桶的更新权限的尝试相关联,所述方法还包括:
在版本计数器被回滚之后等待随机时间间隔;以及
重新尝试获取对所述多个桶中的每个桶的更新权限。
9.根据权利要求6所述的方法,其中,更新版本计数器的计数包括使当前计数器值递增,所述方法还包括:
确定对所述多个桶中的每个桶的更新权限被获取;
更新所述多个桶中的每个桶中的键数据,并且与对每个桶进行的所述更新相关联地使与该桶相关联的版本计数器递增。
10.根据权利要求1-4中任一项所述的方法,其中,所述主机平台包括具有非统一存储器存取(NUMA)架构的多插槽式平台。
11.一种或多种非暂时性机器可读介质,其上存储有指令,所述指令被配置为在包括可操作地耦合到***存储器的多个处理器核心的主机平台上执行,其中,所述指令被配置为在执行时用于:
在所述***存储器的一部分中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含其中存储有键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
启动多个线程,每个线程包括写入器或读取器,所述多个线程包括多个写入器和多个读取器中的每一个,每个写入器被配置为更新所述流表中的数据并且每个读取器被配置为读取所述流表中的数据;
经由所述多个写入器将新的键数据***到所述流表中,对所述新的键数据的***要求对多个桶中的键数据进行更新;以及
使得在新的键数据正被***到所述流表中的同时,仅单个写入器能够更新对所述新的键数据进行给定***所要求的所述多个桶中的任一个桶;
其中,在所述单个写入器正在更新对新的键数据进行所述给定***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述单个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
12.根据权利要求11所述的一种或多种非暂时性机器可读介质,其中,所述指令还被配置为在执行时用于:
识别包括将与***所述新的键数据相结合地被更新的键数据的多个桶;
在更新所述多个桶中的任一个桶之前,获取对所述多个桶中的每个桶的更新权限;以及
更新所述多个桶中的每个桶中的键数据,以实现对所述新的键数据的***。
13.根据权利要求12所述的一种或多种非暂时性机器可读介质,其中,获取对所识别的桶中的每个桶的更新权限包括使用比较并互换(CAS)指令。
14.根据权利要求13所述的一种或多种非暂时性机器可读介质,其中,所述CAS指令包括比较并交换指令(CMPXCHG)指令。
15.根据权利要求11-14中任一项所述的一种或多种非暂时性机器可读介质,其中,所述流表是其中每个桶具有多个条目槽的布谷鸟散列表,其中,所述指令还被配置为在执行时用于确定完整布谷鸟路径,所述完整布谷鸟路径用于***所述新的键数据,以识别包括将与***所述新的键数据相结合地被更新的键数据的所述多个桶。
16.根据权利要求11-14中任一项所述的一种或多种非暂时性机器可读介质,其中,所述指令还被配置为在执行时用于:
针对具有将经由对所述新的键数据进行的***而被更新的键数据的所述多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果所述当前数据不是正在被更新,则更新与该桶相关联的版本计数器的计数,以指示该桶中的所述当前数据处于被更新的过程中。
17.根据权利要求16所述的一种或多种非暂时性机器可读介质,其中,所述指令还被配置为在执行时用于:
确定所述桶中的至少一个桶的所述当前数据不是正在被更新;
使与所述桶中的不是正在被更新的所述至少一个桶相关联的版本计数器递增;
随后确定所述桶中的一个桶中的所述当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与所述桶中的不是正在被更新的所述至少一个桶相关联的、被递增的每个版本计数器。
18.根据权利要求17所述的一种或多种非暂时性机器可读介质,其中,操作与失败的用于获取对所述多个桶中的每个桶的更新权限的尝试相关联,其中,所述指令还被配置为在执行时用于:
在版本计数器被回滚之后等待随机时间间隔;以及
重新尝试获取对所述多个桶中的每个桶的更新权限。
19.根据权利要求16所述的一种或多种非暂时性机器可读介质,其中,更新版本计数器的计数包括使当前计数器值递增,其中,所述指令还被配置为在执行时用于:
确定对所述多个桶中的每个桶的更新权限被获取;
更新所述多个桶中的每个桶中的键数据,并且与对每个桶进行的所述更新相关联地使与该桶相关联的版本计数器递增。
20.根据权利要求11至14中任一项所述的一种或多种非暂时性机器可读介质,其中,所述主机平台包括具有非统一存储器存取(NUMA)架构的多插槽式平台。
21.一种主机平台,包括:
第一处理器,其具有多个处理器核心;
***存储器,其可操作地耦合到所述第一处理器;
多个网络接口控制器,每个网络接口控制器具有一个或多个网络端口;以及
至少一个存储设备,其中存储有指令,所述指令被配置为在所述多个处理器核心上执行,其中,所述指令的执行使得所述主机平台能够用于,
使用布谷鸟散列化在所述***存储器的一部分中实现流表,所述流表包括多个行,每个行映射到相应的散列桶,每个散列桶包含用于存储键数据的一个或多个条目槽;
将每个桶与版本计数器进行关联,其中,给定的版本计数器能够与一个或多个桶相关联;
启动多个线程,每个线程包括写入器或读取器,所述多个线程包括多个写入器和多个读取器中的每一个,每个写入器被配置为更新所述流表中的数据并且每个读取器被配置为读取所述流表中的数据;
经由所述多个写入器将新的键数据***到所述流表中,其中,针对新的键数据的***的至少一部分,沿布谷鸟路径的多个桶中的键数据被更新;以及
使得在新的键数据正被***到所述流表中的同时,仅单个写入器能够针对所述新的键数据的给定***来更新沿给定的布谷鸟路径的所述多个桶中的任一个桶,
其中,在所述单个写入器正在更新对新的键数据进行所述给定***所要求的所述多个桶的同时,一个或多个其他写入器被使得能够通过更新不在由所述单个写入器正在更新的所述多个桶之中的一个或多个桶来并发地在所述流表中***新的键数据。
22.根据权利要求21所述的主机平台,其中,所述指令还被配置为在执行时通过以下操作来促进对新的键数据的***:
针对所述新的键数据识别沿布谷鸟路径的多个桶,其中,第一桶是经由第一散列函数和第二散列函数中的一个被识别的;
在更新所述多个桶中的任一个桶之前,获取对沿所述布谷鸟路径的所述多个桶中的每个桶的更新权限;以及
更新沿所述布谷鸟路径的所述多个桶中的每个桶中的键数据,以实现对所述新的键数据的***。
23.根据权利要求22所述的主机平台,其中,所述指令还被配置为在执行时用于:
针对沿所述布谷鸟路径的所述多个桶中的每个桶,
确定该桶中的当前数据是否正在被更新;以及
如果所述当前数据不是正在被更新,则使与该桶相关联的版本计数器的计数递增,以指示该桶中的所述当前数据处于被更新的过程中。
24.根据权利要求23所述的主机平台,其中,所述指令还被配置为在执行时用于:
确定所述桶中的至少一个桶的所述当前数据不是正在被更新;
使与所述桶中的不是正在被更新的所述至少一个桶相关联的版本计数器递增;
随后确定所述桶中的一个桶中的所述当前数据正在被更新;并且响应于此;
回滚版本计数器中的、与所述桶中的不是正在被更新的所述至少一个桶相关联的、被递增的每个版本计数器。
25.根据权利要求21-24中任一项所述的主机平台,其中,所述***存储器包括***存储器的第一部分,所述主机平台还包括:
第二处理器,其具有多个处理器核心,所述第二处理器经由处理器到处理器互连耦合到所述第一处理器;
***存储器的第二部分;其可操作地耦合到所述第二处理器,
其中,所述主机平台采用使得所述第一处理器和所述第二处理器中的每个能够存取存储器的所述第一部分和所述第二部分中的每个的非统一存储器存取(NUMA)架构,并且其中,所述流表的相应部分被存储在***存储器的所述第一部分和所述第二部分中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/960,993 | 2015-12-07 | ||
US14/960,993 US10218647B2 (en) | 2015-12-07 | 2015-12-07 | Mechanism to support multiple-writer/multiple-reader concurrency for software flow/packet classification on general purpose multi-core systems |
PCT/US2016/060783 WO2017099916A1 (en) | 2015-12-07 | 2016-11-07 | Mechanism to support multiple-writer/multiple-reader concurrency for software flow/packet classification on general purpose multi-core systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108353038A CN108353038A (zh) | 2018-07-31 |
CN108353038B true CN108353038B (zh) | 2022-06-07 |
Family
ID=58798794
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680064921.1A Active CN108353038B (zh) | 2015-12-07 | 2016-11-07 | 支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的机制 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10218647B2 (zh) |
CN (1) | CN108353038B (zh) |
WO (1) | WO2017099916A1 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10778721B1 (en) | 2016-02-26 | 2020-09-15 | Arista Networks, Inc. | Hash-based ACL lookup offload |
US10248693B2 (en) * | 2016-04-27 | 2019-04-02 | Sap Se | Multi-layered row mapping data structure in a database system |
US10103992B1 (en) * | 2016-06-27 | 2018-10-16 | Amazon Technologies, Inc. | Network traffic load balancing using rotating hash |
US9992094B1 (en) | 2016-06-27 | 2018-06-05 | Amazon Technologies, Inc. | Adaptive forwarding tables |
US10462059B2 (en) | 2016-10-19 | 2019-10-29 | Intel Corporation | Hash table entries insertion method and apparatus using virtual buckets |
CN108123901B (zh) * | 2016-11-30 | 2020-12-29 | 新华三技术有限公司 | 一种报文传输方法和装置 |
US10708272B1 (en) * | 2017-02-10 | 2020-07-07 | Arista Networks, Inc. | Optimized hash-based ACL lookup offload |
US11093284B2 (en) * | 2017-05-12 | 2021-08-17 | Xilinx, Inc. | Data processing system |
US11146508B2 (en) * | 2017-05-12 | 2021-10-12 | Xilinx, Inc. | Data processing system |
US10671430B2 (en) * | 2017-06-04 | 2020-06-02 | Apple Inc. | Execution priority management for inter-process communication |
US11119835B2 (en) | 2017-08-30 | 2021-09-14 | Intel Corporation | Technologies for providing efficient reprovisioning in an accelerator device |
US20190044809A1 (en) * | 2017-08-30 | 2019-02-07 | Intel Corporation | Technologies for managing a flexible host interface of a network interface controller |
US10530711B2 (en) * | 2017-11-09 | 2020-01-07 | Nicira, Inc. | Extensible virtual switch datapath |
US11329925B2 (en) * | 2018-09-28 | 2022-05-10 | Intel Corporation | Technologies for low-latency network packet transmission |
CN109857463B (zh) * | 2019-01-30 | 2020-12-01 | 上海兆芯集成电路有限公司 | 加速压缩方法以及加速压缩装置 |
US11347799B2 (en) * | 2019-08-02 | 2022-05-31 | EMC IP Holding Company LLC | Space accounting for data storage usage |
US11997170B2 (en) * | 2021-07-21 | 2024-05-28 | VMware LLC | Automated migration of monolithic applications to container platforms |
CN113595822B (zh) * | 2021-07-26 | 2024-03-22 | 北京恒光信息技术股份有限公司 | 一种数据包管理方法、***和装置 |
US11895005B1 (en) * | 2022-12-02 | 2024-02-06 | Arista Networks, Inc. | Network devices with hardware accelerated table updates |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6724721B1 (en) * | 1999-05-07 | 2004-04-20 | Cisco Technology, Inc. | Approximated per-flow rate limiting |
CN103874980A (zh) * | 2011-08-16 | 2014-06-18 | 净睿存储股份有限公司 | 存储***中的映射 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7987306B2 (en) * | 2005-04-04 | 2011-07-26 | Oracle America, Inc. | Hiding system latencies in a throughput networking system |
CN101346692B (zh) * | 2005-12-29 | 2011-05-04 | 英特尔公司 | 多处理器***中的高性能队列实现 |
US8468526B2 (en) * | 2006-06-30 | 2013-06-18 | Intel Corporation | Concurrent thread execution using user-level asynchronous signaling |
US9419903B2 (en) | 2012-11-08 | 2016-08-16 | Texas Instruments Incorporated | Structure for implementing openflow all group buckets using egress flow table entries |
US9495114B2 (en) * | 2013-05-10 | 2016-11-15 | Arista Networks, Inc. | System and method for reading and writing data with a shared memory hash table |
US9336258B2 (en) * | 2013-10-25 | 2016-05-10 | International Business Machines Corporation | Reducing database locking contention using multi-version data record concurrency control |
US9996402B2 (en) * | 2014-04-07 | 2018-06-12 | Oracle International Corporation | System and method for implementing scalable adaptive reader-writer locks |
-
2015
- 2015-12-07 US US14/960,993 patent/US10218647B2/en not_active Expired - Fee Related
-
2016
- 2016-11-07 WO PCT/US2016/060783 patent/WO2017099916A1/en active Application Filing
- 2016-11-07 CN CN201680064921.1A patent/CN108353038B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6724721B1 (en) * | 1999-05-07 | 2004-04-20 | Cisco Technology, Inc. | Approximated per-flow rate limiting |
CN103874980A (zh) * | 2011-08-16 | 2014-06-18 | 净睿存储股份有限公司 | 存储***中的映射 |
Non-Patent Citations (1)
Title |
---|
Scalable, High Performance Ethernet Forwarding with CUCKOOSWITCH;Dong Zhou et al;《PROCEEDINGS OF THE 2013 ACM INTERNATIONAL CONFERENCE ON EMERGING NETWORKING EXPERIMENTS AND TECHNOLOGIES (CONEXT "13)》;20131212;第97-108页 * |
Also Published As
Publication number | Publication date |
---|---|
WO2017099916A1 (en) | 2017-06-15 |
US10218647B2 (en) | 2019-02-26 |
CN108353038A (zh) | 2018-07-31 |
US20170163575A1 (en) | 2017-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108353038B (zh) | 支持针对通用多核心***上的软件流/分组分类的多写入器/多读取器并发的机制 | |
EP3057272B1 (en) | Technologies for concurrency of cuckoo hashing flow lookup | |
US11102117B2 (en) | In NIC flow switching | |
JP6016984B2 (ja) | ソフトウェア確定ネットワークにおける仮想マシンと仮想化コンテナを用いたローカルサービスチェーン | |
US8543754B2 (en) | Low latency precedence ordering in a PCI express multiple root I/O virtualization environment | |
US9450780B2 (en) | Packet processing approach to improve performance and energy efficiency for software routers | |
US9210083B2 (en) | Sliced routing table management with replication | |
US10911358B1 (en) | Packet processing cache | |
US9148387B2 (en) | Hardware hash table virtualization in multi-packet processor networking systems | |
US20200136971A1 (en) | Hash-table lookup with controlled latency | |
US20190370216A1 (en) | Remote memory access using memory mapped addressing among multiple compute nodes | |
US9086900B2 (en) | Data flow affinity for heterogenous virtual machines | |
US10228869B1 (en) | Controlling shared resources and context data | |
US8862834B2 (en) | Shared memory translation facility | |
US12039359B1 (en) | System and method for isolating work within a virtualized scheduler using tag-spaces | |
US10284501B2 (en) | Technologies for multi-core wireless network data transmission | |
US11899969B1 (en) | Re-order buffer for in-order execution of dependent write transactions | |
CN118337740A (zh) | 一种免费arp的发送方法、装置、设备及存储介质 |
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 |