CN1879368A - 利用有序的加锁机制来维护诸如分组之类的项目的次序 - Google Patents
利用有序的加锁机制来维护诸如分组之类的项目的次序 Download PDFInfo
- Publication number
- CN1879368A CN1879368A CNA2004800334721A CN200480033472A CN1879368A CN 1879368 A CN1879368 A CN 1879368A CN A2004800334721 A CNA2004800334721 A CN A2004800334721A CN 200480033472 A CN200480033472 A CN 200480033472A CN 1879368 A CN1879368 A CN 1879368A
- Authority
- CN
- China
- Prior art keywords
- lock
- request
- grouping
- locking
- locks
- 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.)
- Granted
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- 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/02—Topology update or discovery
- H04L45/10—Routing in connection-oriented networks, e.g. X.25 or ATM
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2416—Real-time traffic
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/624—Altering the ordering of packets in an individual queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99938—Concurrency, e.g. lock management in shared database
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Storage Device Security (AREA)
- Communication Control (AREA)
Abstract
可以利用有序锁来维持项目次序。这些项目可以对应于任何事物,但是利用有序锁来维持分组次序可能尤其有用。一种实现方式利用锁请求、接受和释放协议(图5B)。一种实现方式将指令与加锁请求相关联,由于指令的关联隐含了对锁的接受请求(或者可以被明确地请求)(526),所以使得在获取到锁后加锁机制执行关联的指令或者致使关联的指令被执行。在一些应用中,不要求保留整个分组序列的排序,而是仅要求保留整个分组序列的某些子序列之间的排序,这可以通过将初始根有序锁(维持整个项目流的次序)转换为各种其他锁(每个维持不同项目子流的次序)来实现。
Description
技术领域
本发明的一个实施例涉及通信和计算机系统,尤其是路由器、分组交换系统、以及其他设备;更具体地说,一个实施例涉及利用有序加锁机制来维护项目的次序,这可能包括在有序加锁机制之间转换。
背景技术
通信工业正快速改变,以适应新兴技术和日益增加的客户需求。客户对新应用和现有应用的更高性能的需求正驱动通信网络和系统提供商采用具有更快速度和更大容量(例如,更宽带宽)的网络和系统。在试图实现这些目标时,许多通信供应商采用的常用方法是使用分组交换技术。越来越多地公共和专用通信网络利用各种分组技术(例如,因特网协议(IP))被构建和扩展。
诸如交换机或路由器之类的网络设备一般基于一个或多个标准接收、处理、以及转发或丢弃分组,所述标准包括分组使用的协议的类型、分组的地址(例如,源,目的地,群组)、所要求的服务类型或质量。另外,一般还对分组执行一种或多种安全操作。但是在可以执行这些操作前,一般必须对分组执行分组分类操作。
这些操作消耗时间和资源,所以加速它们的性能的一种方法是使用多个处理器并且并行处理分组。然而,属于一个分组流的某些分组可能需要按照接收顺序从分组处理器转发甚至处理。此外,维护分组的原始次序与以下需求冲突:在分组被处理完时尽可能快地从处理器撤回分组,以便腾空资源以处理更多的分组。需要这样一种方法,该方法只保持流的关键顺序,例如但不限于未在不相关的分组之间强加任意和非最优顺序的顺序。
发明内容
本发明公开了用于利用有序加锁机制来维持项目次序的方法、设备、数据结构、计算机可读介质、机制和装置等,该维持可以包括在有序加锁机制之间转换。这些项目可以对应于任何事物,包括但不限于分组、数据项、进程、线程等。
实施例采用的锁的数目可以变化,并且一般符合应用的需求。锁可以用来维持项目流的强排序。另外,锁可以用来引起对项目的排序。例如,锁可以被转换到多种不同的锁,这允许相同的顺序在不同的锁内仍被保持,同时允许不同锁的项目以任意顺序被处理,例如但不限于被并行处理。类似地,多个锁可以被转换成单个锁,这导致在不同锁中的先前的项目之间排序(例如,一般具有加锁请求被处理的排序)。
另外,某些实施例可以提供加锁机制来执行原子操作,这些原子操作内在或明确地与加锁项目相关联。这种原子动作的示例包括但不限于锁转换、序列号生成和/或检查、存储器操作、数据操纵操作等。在一个实施例中,与要执行的原子操作相对应的一组指令或者指令的命令队列、或者其他指示被关联有加锁项目。通过允许加锁机制执行或者致使执行这操作,一般可以减少关键的等待时间,这是由于这些操作一般可以流水线化在本地执行,而不是分布式执行。例如,在一个实施例中,这种操作由加锁机制或者与加锁机制相关联的处理元件执行,因此,一般可以减小或消除在执行操作之前加锁机制和锁请求者之间的通信延迟。
一个实施例标识多个项目中的特定项目,并且在响应中生成对有序锁的加锁请求。该有序锁配置为按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列。一条或多条指令被关联到该特定标识符,并且在该特定标识符到达加锁队列的头部时,执行这一条或多条指令。
一个实施例重复标识特定分组,并且在响应中生成对有序锁的加锁请求,其中该有序锁按照所请求的顺序维护与加锁请求相对应的标识符的加锁队列。与分组相对应的接受请求被传输到该有序锁。该有序锁从加锁队列的头部重复移除特定标识符,并且如果先前生成了对应的接受请求则准予与该特定标识符相对应的加锁接受请求,或者等待直到生成与该特定标识符相对应的加锁接受请求,然后准予与该特定标识符相对应的加锁接受请求。
附图说明
所附权利要求书具体阐明了本发明的特征。结合附图从下面的具体实施方式中,可以最好地理解本发明及其优点,在附图中:
图1A是采用一个实施例的示例性系统的框图;
图1B是在一个实施例中使用的系统或其组件的框图,所述组件包括但不限于例如分组处理器、锁机制、锁管理器、分配器、收集器或资源。
图2A~2C图示了在一个实施例中使用的有序锁;
图3A~3D图示了在一个实施例中使用的有序锁;
图4A~4D图示了在一个实施例中使用的锁转换的概念;
图5A~5D是图示了用于利用有序锁来维护分组次序的无限多个实施例中的一些实施例的流程图;
图6A是使用有序锁来维护分组次序的示例性系统的框图;以及
图6B是图示了使用有序锁来维护分组次序的使用有序锁处理的过程的流程图。
具体实施方式
本发明公开了这样的方法、设备、数据结构、计算机可读介质、机制和装置等,其用于使用有序加锁机制来维护项目的次序,该维护可以包括在有序加锁机制之间转换。这些项目可以是任意项目,包括但不限于分组,并且在这种情形中,使用有序锁来维护分组的次序的操作尤其可用于路由器、分组交换系统和其他设备。
这里描述的实施例包括各种元素和限制,并且没有一种元素或限制被设想为是关键元素或限制。权利要求中的每一个整体上单独地叙述本发明的一个方面。此外,所述的某些实施例可以包括但不限于系统、网络、集成电路芯片、嵌入式处理器、ASIC、方法和包含指令的计算机可读介质等。一个或多个系统、设备、组件等可以包括一个或多个实施例,实施例可以包括由相同或不同的系统、设备、组件等执行的权利要求的某些元素或限制。下文所述实施例体现在本发明范围和精神内的各个方面和配置,同时附图图示了示例性的非限制配置。
这里所使用的术语“分组”指信息或数据的所有类型的分组或者任意其他单位,包括但不限于固定长度的信元和可变长度的分组,并且每个都可以或者不可以划分为更小的分组或信元。这里所使用的术语“分组”也既指分组自身又指分组指示,例如但不限于分组的全部或一部分或者分组头部、数据结构值、指针或索引、或者分组的任意其他部分或直接或间接标识、或者与其相关联的信息。例如,路由器常常对分组的一个或多个字段进行操作,尤其是头部,所以分组的主体通常被存储在独立的存储器中,而分组的头部被操纵,并且基于对分组(即,在本示例中为分组头部)进行处理的结果,转发或丢弃整个分组。另外,这些分组可以包含一种或多种类型的信息,包括但不限于声音、数据、视频和音频信息。术语“项目”在这里总地用来指分组或任意其他信息或数据的单位或片断、设备、组件、元件或任意其他实体。短语“处理分组”和“分组处理”一般指基于分组内容(例如,分组头部或其他字段)执行某些步骤或动作,并且这些步骤或动作可以或者可以不包括修改、存储、丢弃、和/或转发分组和/或关联数据。
术语“系统”在这里总地用来描述任意数量的组件、元件、子系统、设备、分组交换元件、分组交换机、路由器、网络、计算机和/或通信设备或机制、或者它们的组件的组合。术语“计算机”在这里总地用来描述任意数量的计算机,包括但不限于个人计算机、嵌入式处理元件和系统、控制逻辑、ASIC、芯片、工作站、主机等。术语“处理元件”在这里总地用来描述任意类型的处理机制或设备,例如处理器、ASIC、现场可编程门阵列、计算机等。术语“设备”在这里总地用来描述任意类型的机制,包括计算机或系统或者它们的组件。术语“任务”和“进程”在这里总地用来描述任意类型的正运行的程序,包括但不限于计算机进程、任务、线程、执行的应用、操作系统、用户进程、设备驱动、源代码、机器或其他语言等,并且可以是交互式和/或非交互式、本地执行和/或远程执行的、前台和/或后台执行的、在用户和/或操作系统地址空间中执行的、库和/或独立应用的子例程,并且不限于任意特定存储器分区技术。在包括但不限于任意框图、流程图和消息序列图的图中示出的步骤、连接和对信号及信息的处理可以按照相同的或不同的串行或并行顺序执行,并且/或者可以由不同的组件和/或进程、线程等执行,并且/或者可以通过不同的连接,并且可以与保持在本发明的范围和精神内的其他实施例中的其他功能组合。此外,术语“标识”在这里总地用来描述任意方式或机制,用于直接或间接确认某些内容,其可以包括但不限于接收、从存储器提取、确定、定义、计算、生成等。
此外,术语“网络”和“通信机制”在这里总地用来描述一种或多种网络、通信介质或通信系统,包括但不限于因特网,专用或公共电话、蜂窝、无线、卫星、线缆、局域、城域和/或广域网,线缆、电连接、总线等,以及消息传递、进程间通信、共享存储器等内部通信机制。术语“消息”在这里总地用来描述信息片断,其可以是可以不是但是一般是经由任意类型的一个或多个通信机制传输的。
术语“存储机制”包括任意类型的存储器、存储设备或其他机制,用于保存任意格式的指令或数据。“计算机可读介质”是一个可扩展的术语,包括任意存储器、存储设备、存储机制、以及其他存储和信令机制,包括接口和设备,例如网络接口卡和其中的缓冲器、以及任意通信设备和接收和发送的信号,以及计算机化的系统可以解释、接收和/或发送的其他当前和正在开发的技术。术语“存储器”包括任意随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电路、以及/或者其他存储器组件或元件。术语“存储设备”包括任意固态存储介质、盘驱动、盘、连网的服务、带驱动、以及其他存储设备。存储器和存储设备可以存储由处理元件和/或控制逻辑执行的计算机可执行指令,以及由处理元件和/或控制逻辑操纵的数据。术语“数据结构”是一个可扩展的术语,指任意数据元素、变量、数据结构、数据库,以及/或者一种或多种有组织的方案,这些方案可以被用于到数据来帮助解释数据或者对数据执行操作,例如但不限于存储器位置或器件、集合、队列、树、堆、列表、链接列表、数组、表、指针等。数据结构一般保存在存储机制中,术语“指针”和“链接”在这里总地用来标识某些机制,该机制用于引用或标识另一个元素、组件、或者其他实体,并且这些可以包括但不限于引用存储器或其他存储机制或者其中的位置、数据结构中的索引、值等。术语“关联存储器”是一个可扩展的术语,并且指任意类型已知或将来会开发出来的关联存储器,包括但不限于二进制和三进制内容可寻址存储器、散列表、TRIE和其他数据结构等。另外,术语“关联存储器单元”可以包括但不限于一个和多个关联存储器器件或者它们的一部分,包括但不限于条目集合、区域、段、库、页、块等。
术语“一个实施例”在这里用来指一个特定的实施例,其中每次引用“一个实施例”可以指不同的实施例,并且在这里描述关联的特征、元素和/或限制时重复使用该术语,这并不是要建立每个并且所有实施例都必须包括的关联的特征、元素和/或限制的累积集合,尽管一个实施例一般可能包括所有这些特征、元素和/或限制。另外,短语“用于xxx的装置”一般包括包含用于执行xxx的计算机可执行指令的计算机可读介质。
另外,术语“第一”、“第二”等在这里一般用来标示不同的单元(例如,第一元素、第二元素)。在这里使用这些术语并不一定隐含着诸如一个单元或事件在另一个之前发生或到来这里的排序,而是提供一种机制来区分特定单元。另外,使用单数名词是非限制性的,利用单数名词一般包括一个或多个特定事物,而不是刚好一个(例如,使用词“存储器”一般指一个或多个存储器,而不用必须指定“存储器或多个存储器”、或“一个或多个存储器”、或“至少一个存储器”等)。此外,短语“基于x”和“响应于x”用来指示项目x的最小集合,从该集合导出或引致某些内容,其中“x”是可扩展的,并且不一定描述对其执行了该操作的项目的完整列表等。另外,短语“耦合到”用来指示两个元件或设备直接的直接或间接连接的某些级别,其中一个或多个耦合设备修改或不修改被耦合的信号或被传输的信息。术语“子集”用来指示一个集合的全部或少于全部元素的群组。术语“子树”用来指示树的全部或一部分。此外,术语“或”在这里用来标识选择联合(conjunctive)项目中的一个或多个,包括全部。
一个实施例标识特定的项目,并且在响应中生成对有序锁的加锁请求。有序锁被配置为按照请求的顺序维护与加锁请求相对应的标识符的加锁队列。一条或多条指令与特定的标识符相关联,并且在特定的标识符到达加锁队列的头部时,执行这一条或多条指令。
在一个实施例中,在加锁请求后执行的操作中,指令被与特定的标识符相关联。在一个实施例中,在与第二加锁请求相应的另一个标识符被添加到加锁队列后执行的操作中,指令被与特定标识符相关联。在一个实施例中,当对特定项目执行加锁请求时,加锁队列包含与其他项目相对应的多个其他标识符。在一个实施例中,一条或多条指令包括锁转换指令,用于将特定项目与第二有序锁相关联。在一个实施例中,特定项目是分组。在一个实施例中,一条或多条指令包括分组收集指令。在一个实施例中,特定分组的一个或多个字段被处理来标识第二有序锁,并且一条或多条指令包括锁转换指令,用于将该特定项目与第二有序锁相关联。
一个实施例重复标识出特定的分组,并且在响应中生成对有序锁的加锁请求,其中该有序锁按照请求的顺序维护与加锁请求相对应的标识符的加锁队列。与分组相对应的接受请求被传输到有序锁。有序锁从加锁队列的头部重复移除特定标识符,并且如果先前已产生了对应的接受请求,则向特定标识符授予加锁接受请求,或者等待直到生成与该特定标识符相对应的加锁接受请求,然后授予与该特定标识符相对应的加锁接受请求。
在一个实施例中,加锁请求是非阻塞性的,并且接受请求是阻塞性的。在一个实施例中,响应于授予与分组相对应的加锁接受请求,产生对特定第二锁的第二加锁请求,该第二加锁请求与该分组相对应,并且该特定第二锁基于该分组的内容标识出。
一个实施例包括多个分组处理器、有序锁管理器和分配器。有序锁管理器配置为接收锁请求,接收与锁请求相对应的指令请求,并且在前一个锁请求被释放后按照接收到锁请求的顺序处理与锁请求相对应的指令。分配器配置为接收分组,向有序锁管理器请求与分组相对应的加锁请求,并且将分组分配到一个或多个处理器。所述一个或多个处理器中的至少一个配置为将与分组相对应的一组指令传输到有序锁管理器。
在一个实施例中,该组指令包括分组收集指令。在一个实施例中,该组指令包括用于执行锁释放的指令。在一个实施例中,该组指令包括转换指令,用于执行第二加锁请求。
一个实施例包括一个或多个加锁机制、多个分组处理器、以及分组分配器。这一个和多个加锁机制操作多个有序锁,包括根有序锁和多个第二有序锁,每个有序锁包括用于存储加锁项目的队列。每个加锁机制配置为接收加锁请求,将对加锁请求的指示放置到有序锁的对应队列中,并且接收加锁接受和加锁释放并对它们作出反应。分组分配器配置为接收分组,对每个分组作出根有序加锁请求,并且将每个分组分配给分组处理器。每个分组处理器配置为接收特定分组,接受与对特定分组的根有序加锁请求相对应的根有序锁,处理该分组来标识第二锁,作出与该第二锁相对应的加锁请求,并且释放该根有序锁。在一个实施例中,每个分组处理器配置为在接受根有序锁后并且释放该根有序锁之前作出与第二锁相对应的锁请求,其中所述根有序锁与对特定分组的根有序加锁请求相对应。
图1A是采用一个实施例的示例性系统的框图。图中示出一个分组交换系统,该交换系统具有由分组交换构架103互连的分组处理器101~102和104~105。在一个实施例中,分组处理器101~102和104~105中的一个或多个使用有序加锁机制来维护所需分组次序。
图1B是在一个实施例中使用的系统或其组件120的框图,所述组件例如但不限于分组处理器、锁机制、锁管理器、分配器、收集器或者资源。在一个实施例中,系统或组件120执行与这里示出或描述的流程图之一相对应的一个或多个过程。
在一个实施例中,组件120包括处理元件121、存储器122、存储设备123和接口124,它们一般经由一个或多个通信机制129(出于说明目的被示作总线)耦合,其中接口124用于接收和发送分组、项目和/或其他信息。组件120的各种实施例可以包括更多或更少的元件。组件120的操作一般由处理元件121利用存储器122和存储设备123控制,来执行一个或多个调度任务或进程。存储器122是一种计算机可读介质,并且一般包括随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储器组件。存储器122一般存储将由处理元件121执行的计算机可执行指令,和/或由处理元件121操纵用来实现根据本发明的功能的数据。存储设备123是另一类计算机可读介质,并且一般包括固态存储介质、盘驱动、盘、联网的服务、带驱动和其他存储设备。存储设备123一般存储将由处理元件121执行的计算机可执行指令,和/或由处理元件121操纵用来实现根据本发明的功能的数据。
项目的次序可以利用有序锁来维护。这些项目可以与任何内容相对应,但是利用有序锁来维护分组的次序可能尤其有用。一个实施例利用加锁请求、接受和释放协议。一个实施例将指令与加锁请求相关联,以使在获得锁后,加锁机制执行关联的指令或者使关联的指令被执行,这是由于对指令的关联隐含了对锁的接受请求(或者可被明确地请求)。在一些应用中,不要求保留分组的全部次序的排序,而是仅保留项目的全部次序的某些子次序之间的排序,这可以通过将最初的根有序锁(维护整个项目流的次序)转换为多种其他的锁(每种维护不同的项目子流的次序)来实现。
加锁机制的一个实施例利用以下基本的可扩展操作:
·request(lock_id)-上下文请求锁,“上下文”一般指状态和资源,包括与正被处理的分组或其他实体相关联的处理器引擎、线程等。如果所请求的锁可用(即,没有其他上下文拥有它),则lock_grant被发送给发出请求的上下文。但是,如果该锁由另一个上下文拥有,则新请求被排入队列,直到该请求移动到队列的开头,并且lock_grant被发送。这是一个非阻塞操作,即,在该请求之后但是在接受之前的任何代码都不是临界区(critical section)的一部分,并且可以在接收到lock_grant之前被执行。
·accept(lock_id)-这是一个阻塞操作,该操作使发出请求的上下文阻塞,直到其获得所需锁(即,已接收到lock_grant)。在该接受之后但是在释放之前执行的任何代码都是该锁的临界区。
·release(lock_id)-这是释放锁,并使该锁对其他请求上下文可用的操作。
图2A~2C图示了在一个实施例中使用的有序锁200。转到图2A,锁机制201执行加锁操作,并且可以以无数种方式实现,并且但不限于处理元件和存储器、离散逻辑、定制ASIC等。在一个实施例中,有序锁200利用一个或多个加锁队列202(或者任何其他机制来维护接收到的顺序请求),一般所支持的每个锁对应于一个加锁队列。在一个实施例中,有序锁200仅服务单个锁,因此不需要锁ID来标识特定的锁(例如,根锁,第二锁等)。在一个实施例中。有序锁200服务多个锁,特定的有序锁一般由锁ID(例如,唯一的值等)或者经由其他机制标识。锁请求队列202可以以无数种方式实现,例如,在不同的存储器、移位寄存器、单个存储器中,并且每个队列元素利用链表或其他数据结构等标识。
图2B图示了在一个实施例中用于处理锁请求的锁机制过程。处理开始于处理框220。在处理框222中,如果确定出锁请求被接收到或者以其他方式被识别出,则在处理框224中,与所识别出的锁请求相对应的标识符被放置在与该请求相对应的锁请求队列的末尾(例如,如果加锁机制支持多于一个锁,则该锁由锁ID或者其他机制标识)。然后处理返回处理框222。这样,加锁机制维护了接收到加锁请求的顺序。
图2C图示了在一个实施例中用来处理由加锁机制支持的每个队列的锁项目/请求的过程。处理开始于处理框240。在处理框242中,判断队列中是否存在锁标识符,然后在处理框244中,识别出与在该队列的头部的锁请求相对应的指示。在过程框248中,如果确定出已接收到与该标识符相对应的接受请求,则在处理框252中,该接受请求被准予。然后该处理在处理框254处等待,直到接收到对应的释放请求,然后在处理框256中从队列的头部移除该指示,然后处理返回处理框242。否则,在处理框250中,如果确定出已接收到与标识符相对应的释放请求,则处理直接前进到处理框256。否则,处理返回处理框248。
加锁机制的一个实施例使用以下基本的可扩展操作:
·request(lock_id)-该上下文请求锁。如果所请求的锁可用(即,没有其他上下文拥有它),则lock_grant被发送给请求上下文。但是,如果该锁由另一个上下文拥有,则新请求被排入队列,直到该请求移动到队列的开头,才发送lock_grant。这是一个非阻塞操作,即,在该请求之后但是在接受之前的任何代码都不是临界区的一部分,并且可以在接收到lock_grant之前被执行。
·attach(operation+attributions,convert+dest_flow_id)-该attach操作实际上包括隐含的接受(即,到达队列的开头找到当前flow_id),然后跟随着do_action和/或转换到新的flow_id,最后释放当前的锁。实施例可以使用不同的attach操作。
图3A~3D图示了在一个实施例中使用的有序锁300。转到图3A,锁机制301执行加锁操作,并且可以以无数种方式实现,包括但不限于处理元件和存储器、离散逻辑、定制ASIC等。在一个实施例中,有序锁300使用一个或多个加锁队列302(或者任何其他机制来维护接收到的顺序请求),一般所支持的每个锁对应于一个加锁队列。在一个实施例中,有序锁300仅服务单个锁,因此不需要锁ID来标识特定的锁(例如,根锁,第二锁等)。在一个实施例中。有序锁300服务多个锁,特定的有序锁一般由锁ID(例如,唯一的值等)或者经由其他机制来标识。锁请求队列302可以以无数种方式实现,例如,在不同的存储器、移位寄存器、单个存储器中,并且每个队列元素利用链接列表或其他数据结构等标识。如图所示,指令305与接收到的锁请求相关联,例如,由(一个或多个)锁请求队列302中存储的锁标识符标识出的那些锁请求。可以利用无数种技术将这些指令与锁请求相关联,并且这些指令可以存储在队列302中或者在一个或多个其他数据结构中。
图3B图示了在一个实施例中用于处理锁请求的锁机制过程。处理开始于处理框320。在处理框322中,如果确定出锁请求被接收到或者以其他方式被识别出,则在处理框324中,与所识别出的锁请求相对应的标识符被放置在与该请求相对应的锁请求队列的末尾(例如,如果加锁机制支持多于一个锁,则该锁是由锁ID或者其他机制标识出的)。然后处理返回处理框322。这样,加锁机制维护接收到加锁请求的顺序。
图3C图示了在一个实施例中用来由加锁机制处理指令请求的过程。处理开始于处理框340。在处理框342中,如果确定出指令请求被识别出(例如,接收到等),则在处理框344中,这些指令被关联到锁请求(例如,加锁机制中的锁标识符,或者经由任何其他机制)。
图3D图示了在一个实施例中用来处理由加锁机制支持的每个队列的锁项目/请求的过程。处理开始于处理框360。在处理框362中,如果确定出在队列中存在锁标识符,则在处理框364中,识别出与在该队列的头部的锁请求相对应的指示。在已识别出与该标识符相对应的指令(例如,现在或先前接收到或者以其他方式标识出的)之前,处理都停留在366。在已识别出对应的指令后,在处理框368中,这些指令由加锁机制和/或其他处理机制执行。
这些指令可以是阻塞性的(例如,在前进到下一条指令或其他操作之前该锁必须完成)或者非阻塞性的(例如,发起操作和前进到其他指令或操作)。在一个实施例中,所执行的(一条或多条)指令可以包括发起操作然后阻塞,直到该操作完成。在一个实施例中,所执行的(一条或多条)指令可以包括发起操作但是直到该操作完成都不阻塞。在一个实施例中,所执行的(一条或多条)指令可以包括发起操作并延迟发送确认指示到锁请求者,直到该操作完成,同时前进到队列中的其他锁项目。例如,可能发起从不同存储器位置和/或存储器收集分组的多个部分的操作,而确认操作可能被延迟,直到对存储器的一次或多次访问已完成以使(一个或多个)存储器位置可以被覆写。
在处理框370中,确认消息被发送到请求者,该确认消息被立即发送或延迟发送直到某些其他操作完成,并且在这种确认被发送之前可能继续处理队列中的更多的加锁项目。然后处理返回到处理框362。从一个方面看,接收指令充当隐含的锁接受请求,或者甚至在一个实施例中,接受是与锁请求或其指示相关联的指令之一。
图4A~4D图示了在一个实施例中使用的锁转换的概念。注意,所使用的锁转换的数量和类型是可扩展的,并且可以随实施例而不同,以匹配应用的需求。锁可以被用来维护对项目流的强排序。另外,锁可以用来引起对项目的排序。例如,锁可以被转换到多种不同的锁,这允许相同的顺序在不同的锁内仍被保持,同时允许不同锁的项目以任意顺序被处理,例如但不限于被并行处理。类似地,多个锁可以被转换成单个锁,这导致在不同锁中的先前的项目之间排序(例如,一般具有加锁请求被处理的排序)。
例如,到达接口的分组可能每个都以它们被接收到的顺序向单个根锁作出加锁请求,或者向多个根锁之一作出加锁请求(例如,每个接收端口、协议类型、分组类型等一个加锁请求,或者它们的一些组合一个加锁请求)。这这维持了分组的顺序,因为这些锁按照作出请求的顺序被处理(例如,在一个实施例中是分组到达顺序)。这些锁然后可以基于所要求的对分组的处理或者分组中包括的某些值或者其他数据结构等而被转换为不同的锁。例如,某些分组流必须维持排序。通过将与该流的分组相对应的所有锁从根锁转换到相同的其他锁,可以维持该排序。类似地,第二锁(或者第n锁,其中,n是用于该事物的任意整数,因为可能的加锁转换数目是无限的)可以被转换到另一种锁,例如与输出接口或端口相对应的一个锁,从而可以维持原始排序(即使从其他锁转换到相同的锁也如此,因为该锁维持了每个流中的相对顺序)。
首先转到图4A,该图示出了有序锁转换400的一个示例。项目流401由有序锁402处理(为了简单标识为“根锁”)。当根锁402被特定标识符/项目获取时,如果其与项目流401内的流动(也称作子序列或子流)相关联,则与该流动相关联的有序锁404~406被标识出,并且对该第二有序锁404~406作出加锁请求。注意,有序锁404~406可以利用一个或多个有序锁机制实现,并且每个锁利用锁ID或其他机制隐含标识出或明确标识出。因此,由根有序锁404维护的初始流内的相关排序被传送到每个流动有序锁404~406,并且与项目相关联的锁从根有序锁402被“转换”到流动有序锁404~406中的一个或多个。
图4B示出了在一个实施例中由加锁机制使用的这种处理。处理开始于420,然后前进到处理框422,其中所获取的根锁中的锁(例如,在对应队列的开头或者其他排序机制处明确或隐含接受的指示)被标识出。注意,处理可能需要等待直到锁被获取。接下来,在处理框424中,作出与所请求的锁相对应的流动有序锁中的锁请求。然后处理返回处理框422。
类似地,如图4C所示,可以作出从多个流动锁444~446到另一个有序锁442(为了简单标识为“根锁”)的锁转换440,以产生项目流441。当多个流动锁444~446之一被特定的标识符/项目获取,并且期望转换操作转换到根锁442时,对该第二锁442作出加锁请求。注意,有序锁442~446可以利用一个或多个有序锁机制实现,并且每个锁利用锁ID或其他机制隐含标识出或明确标识出。
图4D图示了在一个实施例中由加锁机制使用的这种处理。该处理开始于处理框460,然后前进到处理框462,其中所获取的有序锁中的锁(例如,在对应队列的开头或者其他排序机制处明确或隐含接受的指示)被标识出。注意,处理可能需要等待直到锁被获取。接下来,在处理框464中,作出有序锁中的锁请求。然后处理返回处理框462。因此,在通过将多个流动有序锁转换到单个根流动有序锁从而执行该处理时,可以保持与这多个流动有序锁相对应的项目的原始顺序。
图5A~5D是图示了用于利用有序锁来维持分组次序的无数实施例中的一些的流程图。首先转到图5A,处理开始于处理框500,然后前进到处理框502,其中分组被接收到,并且作出对应的有序锁请求。接下来,在处理框504中,该分组被处理。在处理框506中,作出对该有序锁的接受请求。在处理框508中,当该锁被获取到后,分组被进一步处理、丢弃、发送等,然后该锁被释放。通过等待直到锁被获取,原始排序得到了保持。如处理框510所示,然后该流程图的处理完成。
图5B图示了在一个实施例中使用的用于利用有序加锁机制处理分组的过程。该处理开始于处理框520,然后前进到处理框522,其中分组被接收到,并且作出对应的有序锁请求。接下来,在处理框524中,与分组相关联的第二流动被标识出。例如,原始分组流可以是在接口上接收到的所有分组,并且特定的流动可以基于源地址、目的地地址、协议类型、服务质量需求、群组标识符和/或在分组中包含的或在分组外的任何其他信息而被标识出。在一个实施例中,所有项目属于第二流动,其可以包括不与另一个特定的流动相关联的默认的分组流动。在一个实施例中,仅某些项目属于第二流动,并且一般允许不属于第二流动的那些分组作为处理过的继续。
在处理框526中,作出对根有序锁的接受请求,然后一般继续处理分组。在处理框528中,在锁被获取后,作出对与标识出的第二流动相对应的第二有序锁的锁请求。在处理框530中,当对分组的处理结束后,作出对对应的第二有序锁的接受请求,然后在处理框532中,当获取了第二有序锁后,分组被进一步处理、丢弃、发送等,然后该锁被释放。如处理框534所示,该流程图的处理完成。
图5C的流程图的处理开始于处理框560,然后前进到处理框562,其中分组被接收到,并且作出对应的有序锁请求。接下来,在处理框524中,该分组被处理。在处理框566中,当对分组的处理完成后,一组一条或多条指令被关联到锁请求。注意,响应于这些指令要执行的原子操作是可扩展的,并且一般根据应用需要定义。例如,这些原子操作可以包括这样的操作:包括但不限于锁转换、序列号生成和/或检查、检错和/或校正、存储器操作、数据操纵操作、发起另一个操作等。在处理框568中,在获取到锁后,这些指令一般由锁机制或者其他机制执行来进一步处理、丢弃或收集/发送分组、转换根锁请求等,然后该锁被释放。通过在执行这些指令之前等待直到获取到锁,原始排序得到了保持。如处理框570所示,然后该流程图的处理完成。
图5D图示了在一个实施例中使用的用于利用有序加锁机制处理分组的过程。该处理开始于处理框580,然后前进到处理框582,其中分组被接收到,并且作出对应的根有序锁请求。接下来,在处理框584中,与分组相关联的第二流动被标识出。在处理框586中,当对分组的处理完成后,一组一条或多条指令被关联到锁请求,其中这些指令包括转换操作指令。在处理框588中,在获取到锁后,这些指令由锁机制或者其他机制执行,来将根锁转换到所标识出的第二锁。在处理框590中,当对分组的处理完成后,一组一条或多条指令被关联到第二锁请求。在处理框592中,在获取到锁后,这些指令一般由锁机制或者其他机制执行来进一步处理、丢弃或收集/发送分组、转换根锁请求等,然后该锁被释放。如处理框594所示,然后该流程图的处理完成。
图6A是利用有序锁来维持分组次序的示例性系统的框图。分组601由分组处理器600接收到,并且一般经由复用器602存储到分组存储器604中(同时分组处理器允许分组从组件624流出)。分配器606负责将分组分配给分组处理引擎610中的一个或多个,用于执行实际的分组处理。该处理可以利用缓存612、DRAM控制器614和外部存储器615、查找控制器616、关联存储器控制器618和关联存储器619,以及/或者一般经由耦合的资源网络608访问的其他组件。分配器606还通知锁管理器和重排序器620对分组的分配,并且作出根锁请求。分组处理引擎610执行锁请求、接受、释放、结合锁管理器和重排序器620将指令附加/关联到锁请求。在适当的时刻,收集机制622被通知应当例如基于与锁请求相关联的收集指令收集并发送分组。收集指令一般定义如何积累或收集已处理过的分组的多个部分以便形成处理过的分组,并且可以包括发送分组的语义。所收集到的分组被传输到缓冲、队列、调度器、存储器控制组件624,以如分组629所示发送处理过的分组。
现在结合图6B描述分组处理器600和/或其他分组处理器的一个实施例的操作。该操作的处理开始于处理框640,然后前进到处理框642,其中分组被接收到,并且被存储到分组存储器中,然后告知分配器该分组已到达及该分组的位置。在处理框644中,分配器标识出分配来处理该分组的分组处理引擎和可能的线程。在处理框646中,分配器向分组处理引擎通知该分配,并且作出与所接收到的分组所属的流相对应的根加锁请求,例如,在其上接收到该分组的接口。在一个实施例中,该流基于分组内容被标识出,但是其他实施例使分配器对分组执行的处理最小化。分配器还针对该分组代表所分配的分组处理引擎向所管理器作出加锁请求。在处理框648中,所分配的分组处理引擎从分组存储器提取该分组的相关部分(例如,头部、以及可能其他字段),然后处理该信息和/或其他信息来标识出该分组被关联到的第二流动/锁(如果有的话),然后继续处理该分组。
在处理框650中,如果确定出要执行转换操作,则在处理框652中,分组处理引擎将转换指令关联/附加到根锁请求,然后在获取到根锁后,例如对应的标识符到达根锁队列的开头,锁管理器执行(或者使另一个机制执行)指令来转换该锁,然后释放该根锁。
接下来,在处理框654中,当对分组的处理完成后,分组处理引擎将收集指令附加到第二或根锁请求(取决于是否执行了有序锁转换操作)。在获取到该锁后,锁管理器执行(或者使另一个机制执行)指令来收集分组的字段,以形成要发送的分组,然后转发该分组。如处理框534所示,然后该流程图的处理完成。
考虑到本发明的原理可以被应用到的许多可能的实施例,将意识到这里参考附图所述的实施例和它们的多个方面仅是说明性的,不应当理解为限制本发明的范围。例如,对于本领域技术人员将清楚,许多处理框的操作可以被重排序来在其他操作之前、之后或者基本并发执行。另外,在各种实施例中也可以使用许多不同形式的数据结构。这里所述的发明设想所有这种实施例,只要它们可以在所附权利要求及其等同物的范围内。
Claims (46)
1.一种用于维持排序的方法,所述方法包括:
识别多个项目中的特定项目,并且在响应中生成对与所述特定项目相对应的有序锁的加锁请求,其中所述有序锁被配置为按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列,并且将与所述加锁请求相对应的特定标识符放置到所述加锁队列的末尾;
将一条或多条指令关联到与所述加锁请求相对应的特定标识符;以及
识别出在所述加锁队列的头部的特定标识符,并且在响应中执行所述一条或多条指令。
2.如权利要求1所述的方法,其中,所述将一条或多条指令关联到所述特定标识符的步骤是在与第二加锁请求相对应的另一个标识符被添加到所述加锁队列之后被执行的。
3.如权利要求1所述的方法,其中,在所述生成对有序锁的加锁请求的步骤被执行时,所述加锁队列包含与其他项目相对应的多个其他标识符。
4.如权利要求1所述的方法,其中,所述一条或多条指令包括锁转换指令,用于将所述特定项目与第二有序锁相关联。
5.如权利要求1所述的方法,其中,所述多个项目中的每个项目包括分组。
6.如权利要求5所述的方法,其中,所述一条或多条指令包括分组收集指令。
7.如权利要求5所述的方法,包括对所述特定分组的一个或多个字段进行处理来识别第二有序锁;并且
其中所述一条或多条指令包括锁转换指令,用于将所述特定项目与所述第二有序锁相关联。
8.如权利要求1所述的方法,包括发送释放锁确认消息;其中所述一条或多条指令包括发起操作;并且其中所述发送释放锁确认消息的步骤是在所述操作的执行完成后被执行的。
9.如权利要求1所述的方法,包括发送释放锁确认消息;其中所述一条或多条指令包括发起操作;并且其中所述发送释放锁确认消息的操作是在所述操作的执行完成前被执行的。
10.一种用于维持分组排序的方法,所述方法包括:
重复识别多个分组中的特定分组,并且在响应中生成对与所述特定分组相对应的有序锁的加锁请求,其中所述有序锁按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列;
将与所述多个分组中的分组相对应的接受请求传输到所述有序锁;以及
从所述加锁队列的头部重复移除特定标识符,并且如果先前生成了对应的所述接受请求则准予与所述特定标识符相对应的加锁接受请求,或者等待直到生成与所述特定标识符相对应的加锁接受请求,然后准予与所述特定标识符相对应的加锁接受请求。
11.如权利要求10所述的方法,其中,所述加锁请求是非阻塞性的,并且所述接受请求是阻塞性的。
12.如权利要求10所述的方法,包括:响应于所述准予与分组相对应的加锁接受请求,而转发所述分组。
13.如权利要求10所述的方法,包括:响应于所述准予与分组相对应的加锁接受请求,对多个第二有序锁中的特定的第二锁作出与所述分组相对应的第二加锁请求,所述特定的第二锁基于所述分组的内容而被识别出。
14.如权利要求10所述的方法,其中,所述与多个分组中的第一分组相对应的加锁请求在与所述多个分组中的第二分组相对应的加锁请求之前生成,并且与所述第二分组相对应的接受请求在与所述第一分组相对应的接受请求之前作出,并且与所述第一分组相对应的接受请求在与所述第二分组相对应的接受请求之前被准予。
15.一种用于处理分组的装置,所述装置包括:
多个分组处理器;
有序锁管理器,其被配置为接收锁请求,接收与所述锁请求相对应的指令请求,并且按照接收到所述锁请求的顺序在接收到所述锁请求的顺序中的前一个锁请求被释放后,对与所述锁请求相对应的指令进行处理;以及
分配器,其耦合到所述多个分组处理器和所述有序锁管理器,其被配置为接收分组,向所述有序锁管理器作出与所述分组相对应的加锁请求,并且将所述分组分配给所述多个分组处理器中的一个或多个处理器;
其中所述一个或多个处理器中的至少一个处理器被配置为将与所述分组相对应的一组指令传输到所述有序锁管理器。
16.如权利要求15所述的装置,其中,所述一组指令包括分组收集指令。
17.如权利要求16所述的装置,其中,所述一组指令包括用于执行锁释放的指令。
18.如权利要求15所述的装置,其中,所述一组指令包括用于执行第二加锁请求的转换指令。
19.如权利要求15所述的装置,其中,所述一组指令包括用于执行锁释放请求的指令。
20.一种用于处理分组的装置,所述装置包括:
一个或多个加锁机制,用于操作多个有序锁,所述多个有序锁中的每个有序锁包括用于存储加锁项目的队列,所述一个或多个加锁机制中的每个加锁机制被配置为接收加锁请求,将对所述加锁请求的指示放置到所述多个有序锁的对应队列中,接收加锁接受和加锁释放并对所述加锁接受和加锁释放作出反应,所述多个有序锁包括根有序锁和第二有序锁;
多个分组处理器;
分组分配器,其被配置为接收分组,针对所述分组中的每个作出根有序加锁请求,以及将所述分组中的每个分配给所述多个分组处理器;
所述多个分组处理器中的每个分组处理器被配置为接收特定分组,接受与针对所述特定分组的根有序加锁请求相对应的根有序锁,处理所述分组来识别第二锁,作出与所述第二有序锁相对应的加锁请求,以及释放所述根有序锁。
21.如权利要求20所述的装置,其中,所述每个分组处理器被配置为,在所述接受与针对所述特定分组的根有序加锁请求相对应的根有序锁之后,但在所述释放根有序锁之前,执行所述作出与所述第二有序锁相对应的加锁请求的步骤。
22.一种用于维持排序的装置,所述装置包括:
用于识别多个项目中的特定项目,并且在响应中生成对与所述特定项目相对应的有序锁的加锁请求的装置,其中所述有序锁被配置为按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列、并且将与所述加锁请求相对应的特定标识符放置到所述加锁队列的末尾;
用于将一条或多条指令关联到与所述加锁请求相对应的特定标识符的装置;以及
用于识别在所述加锁队列的头部的特定标识符,并且在响应中执行所述一条或多条指令的装置。
23.如权利要求22所述的装置,其中,所述用于将一条或多条指令关联到与所述加锁请求相对应的特定标识符的装置包括:用于在与第二加锁请求相对应的另一个标识符被添加到所述加锁队列之后将一条或多条指令关联到所述特定标识符的装置。
24.如权利要求22所述的装置,其中,所述一条或多条指令包括锁转换指令,用于将所述特定项目与第二有序锁相关联。
25.如权利要求22所述的装置,其中,所述多个项目中的每个项目包括分组。
26.如权利要求25所述的装置,其中,所述一条或多条指令包括分组收集指令。
27.如权利要求25所述的装置,包括用于对所述特定分组的一个或多个字段进行处理来识别第二有序锁的装置;并且
其中所述一条或多条指令包括锁转换指令,用于将所述特定项目与所述第二有序锁相关联。
28.一种用于维持分组排序的装置,所述装置包括:
用于重复识别多个分组中的特定分组,并且在响应中生成对与所述特定分组相对应的有序锁的加锁请求的装置,其中所述有序锁按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列;
用于将与所述多个分组中的分组相对应的接受请求传输到所述有序锁的装置;以及
用于从所述加锁队列的头部重复移除特定标识符,并且如果先前生成了对应的所述接受请求则准予与所述特定标识符相对应的加锁接受请求,或者等待直到生成与所述特定标识符相对应的加锁接受请求,然后准予与所述特定标识符相对应的加锁接受请求的装置。
29.如权利要求28所述的装置,其中,所述加锁请求是非阻塞性的,并且所述接受请求是阻塞性的。
30.如权利要求28所述的装置,包括:用于响应于所述准予与分组相对应的加锁接受请求而转发所述分组的装置。
31.如权利要求28所述的装置,包括:用于响应于所述准予与分组相对应的加锁接受请求,对多个第二有序锁中的特定的第二锁作出与所述分组相对应的第二加锁请求的装置;以及用于基于所述分组的内容识别所述特定的第二锁的装置。
32.如权利要求28所述的装置,其中,与所述多个分组中的第一分组相对应的加锁请求在与所述多个分组中的第二分组相对应的加锁请求之前生成;并且与所述第二分组相对应的接受请求在与所述第一分组相对应的接受请求之前作出;并且与所述第一分组相对应的接受请求在与所述第二分组相对应的接受请求之前被准予。
33.一种包含计算机可执行指令的计算机可读介质,所述计算机可执行指令用于执行用于维持排序的步骤,所述步骤包括:
识别多个项目中的特定项目,并且在响应中生成对与所述特定项目相对应的有序锁的加锁请求,其中所述有序锁被配置为按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列,并且将与所述加锁请求相对应的特定标识符放置到所述加锁队列的末尾;
将一条或多条指令关联到与所述加锁请求相对应的特定标识符;以及
识别在所述加锁队列的头部的特定标识符,并且在响应中执行所述一条或多条指令。
34.如权利要求33所述的计算机可读介质,其中,所述将一条或多条指令关联到所述特定标识符在与第二加锁请求相对应的另一个标识符被添加到所述加锁队列之后被执行。
35.如权利要求33所述的计算机可读介质,其中,在所述生成对有序锁的加锁请求被执行时,所述加锁队列包含与其他项目相对应的多个其他标识符。
36.如权利要求33所述的计算机可读介质,其中,所述一条或多条指令包括锁转换指令,用于将所述特定项目与第二有序锁相关联。
37.如权利要求33所述的计算机可读介质,其中,所述多个项目中的每个项目包括分组。
38.如权利要求37所述的计算机可读介质,其中,所述一条或多条指令包括分组收集指令。
39.如权利要求37所述的计算机可读介质,其中,所述步骤包括对所述特定分组的一个或多个字段进行处理来标识出第二有序锁;并且
其中所述一条或多条指令包括锁转换指令,用于将所述特定项目与所述第二有序锁相关联。
40.一种包含计算机可执行指令的计算机可读介质,所述计算机可执行指令用于执行用于维持分组排序的步骤,所述步骤包括:
重复识别多个分组中的特定分组,并且在响应中生成对与所述特定分组相对应的有序锁的加锁请求,其中所述有序锁按照所请求的顺序维护与所述加锁请求相对应的标识符的加锁队列;
将与所述多个分组中的分组相对应的接受请求传输到所述有序锁;以及
从所述加锁队列的头部重复移除特定标识符,并且如果先前生成了对应的所述接受请求则准予与所述特定标识符相对应的加锁接受请求,或者等待直到生成与所述特定标识符相对应的加锁接受请求,然后准予与所述特定标识符相对应的加锁接受请求。
41.如权利要求40所述的计算机可读介质,其中,所述加锁请求是非阻塞性的,并且所述接受请求是阻塞性的。
42.如权利要求40所述的计算机可读介质,其中所述步骤包括:响应于所述授予与分组相对应的加锁接受请求,转发所述分组。
43.如权利要求40所述的计算机可读介质,其中所述步骤包括:响应于所述授予与分组相对应的加锁接受请求,对多个第二有序锁中的特定的第二锁作出与所述分组相对应的第二加锁请求,所述特定的第二锁基于所述分组的内容而被识别出。
44.如权利要求40所述的计算机可读介质,其中,与所述多个分组中的第一分组相对应的加锁请求在与所述多个分组中的第二分组相对应的加锁请求之前生成,并且与所述第二分组相对应的接受请求在与所述第一分组相对应的接受请求之前作出,并且与所述第一分组相对应的接受请求在与所述第二分组相对应的接受请求之前被准予。
45.如权利要求40所述的计算机可读介质,其中,所述一条或多条指令包括发起操作;并且其中所述步骤包括在对所述操作的执行完成后发送释放锁确认消息。
46.如权利要求40所述的计算机可读介质,其中,所述一条或多条指令包括发起操作;并且其中所述步骤包括在对所述操作的执行完成前发送释放锁确认消息。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/706,704 | 2003-11-12 | ||
US10/706,704 US7626987B2 (en) | 2003-11-12 | 2003-11-12 | Using ordered locking mechanisms to maintain sequences of items such as packets |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1879368A true CN1879368A (zh) | 2006-12-13 |
CN100547983C CN100547983C (zh) | 2009-10-07 |
Family
ID=34552599
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800334721A Expired - Fee Related CN100547983C (zh) | 2003-11-12 | 2004-09-30 | 利用有序的加锁机制来维护诸如分组之类的项目的次序 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7626987B2 (zh) |
EP (1) | EP1687944A4 (zh) |
CN (1) | CN100547983C (zh) |
AU (1) | AU2004310639B2 (zh) |
CA (1) | CA2543246C (zh) |
WO (1) | WO2005053199A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804240A (zh) * | 2018-04-25 | 2018-11-13 | 天津卓易云科技有限公司 | 一种队列数据的分发和处理算法 |
CN111324571A (zh) * | 2020-01-22 | 2020-06-23 | 中国银联股份有限公司 | 一种容器集群管理方法、装置及系统 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7362762B2 (en) * | 2003-11-12 | 2008-04-22 | Cisco Technology, Inc. | Distributed packet processing with ordered locks to maintain requisite packet orderings |
US7626987B2 (en) | 2003-11-12 | 2009-12-01 | Cisco Technology, Inc. | Using ordered locking mechanisms to maintain sequences of items such as packets |
US7551617B2 (en) | 2005-02-08 | 2009-06-23 | Cisco Technology, Inc. | Multi-threaded packet processing architecture with global packet memory, packet recirculation, and coprocessor |
US7739426B1 (en) | 2005-10-31 | 2010-06-15 | Cisco Technology, Inc. | Descriptor transfer logic |
JP4583312B2 (ja) * | 2006-01-30 | 2010-11-17 | 富士通株式会社 | 通信状況判定方法、通信状況判定システム及び判定装置 |
US8041929B2 (en) * | 2006-06-16 | 2011-10-18 | Cisco Technology, Inc. | Techniques for hardware-assisted multi-threaded processing |
US8010966B2 (en) * | 2006-09-27 | 2011-08-30 | Cisco Technology, Inc. | Multi-threaded processing using path locks |
US8179887B1 (en) * | 2008-02-01 | 2012-05-15 | Tellabs Operations, Inc. | Method and apparatus for improving performance of TDM sequencing for packet processing engines using a delay line |
US8139488B2 (en) * | 2008-05-30 | 2012-03-20 | Cisco Technology, Inc. | Cooperative flow locks distributed among multiple components |
US7990974B1 (en) | 2008-09-29 | 2011-08-02 | Sonicwall, Inc. | Packet processing on a multi-core processor |
US9141447B2 (en) * | 2010-12-15 | 2015-09-22 | Microsoft Technology Licensing, Llc | Conditional deferred queuing |
US9910893B2 (en) * | 2011-12-01 | 2018-03-06 | Oracle International Corporation | Failover and resume when using ordered sequences in a multi-instance database environment |
US9189295B2 (en) | 2011-12-01 | 2015-11-17 | Oracle International Corporation | Generating an ordered sequence in a database system using multiple interleaved caches |
US9141609B2 (en) | 2011-12-01 | 2015-09-22 | Oracle International Corporation | Reducing sequence cache latch contention in a database system |
US8934332B2 (en) | 2012-02-29 | 2015-01-13 | International Business Machines Corporation | Multi-threaded packet processing |
US9578130B1 (en) * | 2012-06-20 | 2017-02-21 | Amazon Technologies, Inc. | Asynchronous and idempotent distributed lock interfaces |
US9274826B2 (en) * | 2012-12-28 | 2016-03-01 | Futurewei Technologies, Inc. | Methods for task scheduling through locking and unlocking an ingress queue and a task queue |
US10719464B1 (en) * | 2019-05-01 | 2020-07-21 | Xilinx, Inc. | Lock circuit for competing kernels in a hardware accelerator |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5699500A (en) * | 1995-06-01 | 1997-12-16 | Ncr Corporation | Reliable datagram service provider for fast messaging in a clustered environment |
US5682537A (en) * | 1995-08-31 | 1997-10-28 | Unisys Corporation | Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system |
US6226687B1 (en) * | 1996-09-05 | 2001-05-01 | Nortel Networks Limited | Method and apparatus for maintaining an order of data packets |
JP3385523B2 (ja) * | 1997-08-13 | 2003-03-10 | アイシン・エィ・ダブリュ株式会社 | 自動変速機の油圧制御装置 |
US6170025B1 (en) * | 1997-08-29 | 2001-01-02 | Intel Corporation | Distributed computer system supporting remote interrupts and lock mechanism |
CA2222389A1 (en) * | 1997-11-27 | 1999-05-27 | Ibm Canada Limited-Ibm Canada Limitee | A mechanism for managing the locking and unlocking of objects in java |
US6161144A (en) * | 1998-01-23 | 2000-12-12 | Alcatel Internetworking (Pe), Inc. | Network switching device with concurrent key lookups |
US6163856A (en) * | 1998-05-29 | 2000-12-19 | Sun Microsystems, Inc. | Method and apparatus for file system disaster recovery |
US6405274B1 (en) | 1998-12-30 | 2002-06-11 | Oracle Corporation | Anticipatory lock mode conversions in a lock management system |
US6473849B1 (en) * | 1999-09-17 | 2002-10-29 | Advanced Micro Devices, Inc. | Implementing locks in a distributed processing system |
US6529983B1 (en) * | 1999-11-03 | 2003-03-04 | Cisco Technology, Inc. | Group and virtual locking mechanism for inter processor synchronization |
AU2001295863A1 (en) * | 2000-10-05 | 2002-04-15 | Wintegra Ltd. | Method system and apparatus for multiprocessing |
AU2002232481A1 (en) * | 2000-11-07 | 2002-05-21 | Fast-Chip, Inc. | Switch-based network processor |
US6920447B2 (en) * | 2001-02-15 | 2005-07-19 | Microsoft Corporation | Concurrent data recall in a hierarchical storage environment using plural queues |
US7313557B1 (en) * | 2002-03-15 | 2007-12-25 | Network Appliance, Inc. | Multi-protocol lock manager |
US7304999B2 (en) * | 2002-08-24 | 2007-12-04 | Cisco Technology Inc. | Methods and apparatus for processing packets including distributing packets across multiple packet processing engines and gathering the processed packets from the processing engines |
US6990560B2 (en) * | 2003-01-16 | 2006-01-24 | International Business Machines Corporation | Task synchronization mechanism and method |
US7398515B2 (en) * | 2003-07-16 | 2008-07-08 | International Business Machines Corporation | Buckets of commands in a multiprocessor-based verification environment |
US7362762B2 (en) * | 2003-11-12 | 2008-04-22 | Cisco Technology, Inc. | Distributed packet processing with ordered locks to maintain requisite packet orderings |
US7626987B2 (en) | 2003-11-12 | 2009-12-01 | Cisco Technology, Inc. | Using ordered locking mechanisms to maintain sequences of items such as packets |
US7627573B2 (en) * | 2004-03-27 | 2009-12-01 | Cisco Technology, Inc. | Bypassing native storage operations by communicating protected data within locking messages using a lock manager independent of the storage mechanism |
US7551617B2 (en) * | 2005-02-08 | 2009-06-23 | Cisco Technology, Inc. | Multi-threaded packet processing architecture with global packet memory, packet recirculation, and coprocessor |
US20070014240A1 (en) * | 2005-07-12 | 2007-01-18 | Alok Kumar | Using locks to coordinate processing of packets in a flow |
US7853951B2 (en) * | 2005-07-25 | 2010-12-14 | Intel Corporation | Lock sequencing to reorder and grant lock requests from multiple program threads |
US8065499B2 (en) * | 2006-02-22 | 2011-11-22 | Oracle America, Inc. | Methods and apparatus to implement parallel transactions |
-
2003
- 2003-11-12 US US10/706,704 patent/US7626987B2/en not_active Expired - Fee Related
-
2004
- 2004-09-30 AU AU2004310639A patent/AU2004310639B2/en not_active Expired - Fee Related
- 2004-09-30 WO PCT/US2004/032141 patent/WO2005053199A2/en active Application Filing
- 2004-09-30 CN CNB2004800334721A patent/CN100547983C/zh not_active Expired - Fee Related
- 2004-09-30 EP EP04789338A patent/EP1687944A4/en not_active Withdrawn
- 2004-09-30 CA CA2543246A patent/CA2543246C/en not_active Expired - Fee Related
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804240A (zh) * | 2018-04-25 | 2018-11-13 | 天津卓易云科技有限公司 | 一种队列数据的分发和处理算法 |
CN108804240B (zh) * | 2018-04-25 | 2021-11-19 | 天津卓盛云科技有限公司 | 一种队列数据的分发和处理算法 |
CN111324571A (zh) * | 2020-01-22 | 2020-06-23 | 中国银联股份有限公司 | 一种容器集群管理方法、装置及系统 |
WO2021147288A1 (zh) * | 2020-01-22 | 2021-07-29 | 中国银联股份有限公司 | 一种容器集群管理方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
AU2004310639B2 (en) | 2009-05-28 |
EP1687944A4 (en) | 2010-08-18 |
US7626987B2 (en) | 2009-12-01 |
AU2004310639A1 (en) | 2005-06-09 |
CA2543246A1 (en) | 2005-06-09 |
CN100547983C (zh) | 2009-10-07 |
WO2005053199A3 (en) | 2006-02-09 |
EP1687944A2 (en) | 2006-08-09 |
WO2005053199A2 (en) | 2005-06-09 |
CA2543246C (en) | 2010-11-16 |
US20050100017A1 (en) | 2005-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1879368A (zh) | 利用有序的加锁机制来维护诸如分组之类的项目的次序 | |
CN1886667A (zh) | 可靠多播通信 | |
CN1030882C (zh) | 分批接收数据包的方法和装置 | |
CN1859325A (zh) | 基于链表的进程间消息传递方法 | |
CN1305274C (zh) | 用于处理分组的方法和装置 | |
US7362762B2 (en) | Distributed packet processing with ordered locks to maintain requisite packet orderings | |
CN1938992B (zh) | 用于加权随机调度的方法和装置 | |
US20060026169A1 (en) | Communication method with reduced response time in a distributed data processing system | |
CN1214168A (zh) | 有效的输出请求分组交换设备和方法 | |
CN1514622A (zh) | 互连带有异构结构的网络处理器 | |
CN1171429C (zh) | 一种交换数据交换网点内部的信息的方法 | |
CN1411211A (zh) | 以太网交换芯片输出队列管理调度方法和装置 | |
CN1826591A (zh) | 反向路径转发保护 | |
CN1449160A (zh) | 用于包括无阻塞交换结构和线路卡接口的系统的包调度 | |
CN1957325A (zh) | 在加锁消息中传递受保护数据 | |
CN1829200A (zh) | 用于在网络处理器中记帐的装置和方法 | |
CN1826768A (zh) | 利用动态资源分配进行的大规模排队的可扩展方法 | |
CN1499751A (zh) | 数据发射装置、发射和接收数据的方法及数据通信系统 | |
CN100499564C (zh) | 分组处理引擎 | |
CN1129281C (zh) | 利用缓存技术提高ip报文转发速度的方法 | |
US9665519B2 (en) | Using a credits available value in determining whether to issue a PPI allocation request to a packet engine | |
CN1503152A (zh) | 处理多网络连接上的定序记录的设备和方法 | |
CN1565108A (zh) | 用于高性能通信系统的用户设备 | |
CN1924817A (zh) | 一种数据结构传输方法 | |
CN1792068A (zh) | 用于通信协议的消息存储器和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091007 Termination date: 20200930 |