CN1869966A - 环管理 - Google Patents

环管理 Download PDF

Info

Publication number
CN1869966A
CN1869966A CNA2006100996111A CN200610099611A CN1869966A CN 1869966 A CN1869966 A CN 1869966A CN A2006100996111 A CNA2006100996111 A CN A2006100996111A CN 200610099611 A CN200610099611 A CN 200610099611A CN 1869966 A CN1869966 A CN 1869966A
Authority
CN
China
Prior art keywords
ring
producer
credit
consumer
counting
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.)
Pending
Application number
CNA2006100996111A
Other languages
English (en)
Inventor
M·罗森布鲁斯
C·那拉德
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN1869966A publication Critical patent/CN1869966A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means

Abstract

本发明描述了由一个或多个环的一个或多个生产者和消费者使用的技术。

Description

环管理
背景技术
环(或″循环缓冲″)用于在代理,诸如中央处理器(″CPUs″)、I/O装置和联合处理器之间传递消息。消息可以包括数据、指针和在这样代理之间交换的任何其他类型信息。环也用于在线程或在单一代理上运行的进程之间传递消息。环典型地由存储器中的阵列,和阵列中的一对指针或偏移实现,阵列通过阵列和″包″中的记录线性增加,当到达阵列尾部时取模环尺寸。这些指针之一用于在环的尾部增加新的记录。这个指针称为″生产指针″。使用生产指针执行生产访问(或入列)操作的代理称为″生产者″。另一个指针,称为″消耗指针″,用于从环的头部把记录移除。执行消耗访问(或出列)操作的代理称为″消费者”。
具体指针可以由单一代理拥有。代理维持指针的拷贝,其用于确定哪个记录在阵列中被读取或者写入。可选地,如果指针由多重生产者和/或多重消费者使用,每一个代理要求互相排除机制来允许代理自动作用于指针和相关的记录。
生产指针由生产者读取和写入,所述生产者使用指针并增加它的值。同样地,消耗指针由消费者读取和写入。许多机制可以被使用来允许消费者确定在环中是否有可用的空间,来允许生产者确定在环中是否有任何可用的记录。通用机制将消耗指针和生产指针中的额外高位位进行比较,以在当所述指针的值在不同情况下相等时,将是空环还是充满的环的情况区分开来。在这种情况下,生产指针也是由消费者读取,并且消耗指针由生产者读取。
代理有时保持其拥有的指针的私人本地拷贝,来最小化相关于环访问的开销。同样,由于各种原因,代理可以使用从环中入列或者出列的″批″通知,来摊销对于代理的开销。因此,生产者可以维持生产指针的一个私人拷贝用于在环中写入记录,和一个较少更新的该指针的单独的公共拷贝,来把″大量″记录一次传给消费者。消费者同样地可以用消耗指针的私人和公共的拷贝来表示空间被释放,允许″懒惰″收回和资源恢复来优化那些功能并把他们从服务环的过程中分离(decouple)。因此,指针的私人拷贝和公共拷贝分别地服务于访问和通知的不同功能。
生产者读取消耗指针和消费者读取生产指针来确定环状态对通信开销作出贡献。为了最小化该开销,环信用有时被使用。环信用指示有空闲环记录可以给生产者使用。消费者把信用传给生产者,生产者将其加入它的本地信用池。用于传送信用的机制包括由消费者发送到信用池中,且由生产者从信用池取出。信用传送也能够被批处理,其减少了用于生产者信用通知的业务,但是不能解决通知消费者该环是非空的的开销。
附图说明
图1是典型多-处理器系统的框图,其使用共享存储器的环。
图2是描述典型环数据结构的框图,包括环和在共享存储器存储的相关环描述符。
图3是描述在使用环数据结构的代理之间传送的消息的框图。
图4显示头描述符的典型布局。
图5显示尾部描述符的典型布局。
图6显示公共描述符的典型布局。
图7显示信用描述符的典型布局。
图8显示了使用在图7的信用描述符中维持的公共信用计数的实施例。
图9是表示典型环描述符的读取操作的流程图。
图10是用于在环中存储项的典型″生产访问″操作的流程图。
图11是由图10的产品访问操作使用的典型共享存储器写操作的流程图。
图12是用于典型超时机制的状态图。
图13是典型将项从环中移除的″消耗访问″操作的流程图。
图14是由图13的消耗访问操作使用的典型共享存储器读取操作的流程图。
图15是典型环初始化处理的流程图。
图16是使用图1的系统的典型网络应用的框图。
具体实施方式
图1示出多-处理器系统10其中处理器12和通用处理器(″GPP″)14与系统总线连接(参见此处作为前端总线,″FSB″)16。如图所示,多于一个的GPP14可以连接在FSB 16上。多于一个的处理器12也可以连接在FSB 16上。GPP14可以是具有CPU核心和集成的高速缓存的处理器、例如Intel结构处理器(″IA处理器″),诸如IntelXeonTM处理器,或一些其他的通用CPU。处理器12可以是专业处理器,诸如网络处理器,例如,基于Intel互联网交换结构(IXA)的网络处理器,其包括多重多线程的减少指令集合计算机(RISC)核心(″微引擎″(MEs))和在相同的模上集成的通用的处理器核心。其他种类的处理器结构能够被使用。处理器12的GPP 14和处理元件能够在FSB 16上开始事务处理,以及因此可以共同地称为总线代理,或者更简单地称为代理。
同样与FSB 16连接的是存储控制器20,其连接存储器22。存储器22被系统10的各种代理共享并且为各种代理共享共有。存储控制器20由这样的代理管理到共享存储器22的访问。存储控制器20可以充当网络集线器或桥接,以及因此包括连接到和通信于其它系统逻辑电路和I/O组件的电路,共同地显示为系统逻辑电路和I/O块34。系统逻辑电路和I/O块34的组件可以连接底板、外部设备和/或通信链路。
处理器12和GPP 14每一个都包括高速缓存24、38。高速缓存的尺寸和结构是设计选择的事。例如,高速缓存24可以组织为8一路设置的相关高速存储,每个设置包括2048高速缓存行,每高速缓存行有64字节。高速缓存也可以包括不同尺寸和结构高速缓存的体系。
在共享存储器22中维持的是实现环(例如,环阵列)26的数据结构和相关环的描述符28。每个环的一端由硬件管理,示为处理器12中的环管理器30。环管理器30连接到并且由处理器的代理(例如,MEs和控制处理器)访问,示为通过内部总线36的环用户31。环管理器30包含FIFOs(未示出),其用于在处理器12和共享存储器22的代理之间缓冲指令和传送数据。那组指令FIFOs包括入列FIFOs的阵列和出列FIFOs的阵列,作为寄存器的阵列提供给代理(每环的一个入列寄存器和一个出列寄存器),用于分别在环中放置数据或者在环中去除数据。环用户31开始在入列寄存器的阵列中的记录写入或者在出列寄存器的记录读取,同时在环管理器本身的硬件处理其它操作。环管理器30也包括控制和状态寄存器(CSRs)以存储环配置参数(诸如环尺寸)和用于环描述符的基础值,这将参考图2讨论。每个环的另一端由在GPP 14执行的软件管理和访问,示为环管理器32。在一个实施例中,环管理器32可以作为驱动器软件部分实现。
当其在内部总线36收到指令时,环管理器30执行消耗访问(出列)和生产访问(入列)操作。如上面所讨论的,这些环访问指令在指令FIFO寄存器中收到。它们可以为″放(put)″或″得到(get)″指令形式(例如,对于ME环用户),或加载或存储指令(例如,对于Xscale核心环用户)以提供一些例子。GPP 14用环管理器32的软件例行程序来执行消耗和生产操作。
环管理器30执行除了环管理以外的其他操作。例如,环管理器30管理FSB协议和中断FSB16,把数据指向给高速缓存24和从高速缓存24指向,对于处理器12的高速缓存24保持高速缓存相干性协议和管理高速缓存活动(诸如代替,标记查找并且依此类推)。
环管理器30提供能力来把数据移动到共享存储器22和从共享存储器22移动。各种类型的访问包括:读取访问、写入访问和最小单元(atomic)的读取-修改-写入访问。读取和写入访问能够规定如果高速缓存丢失是否在高速缓存分配空间。最小单元读取-修改-写入指令被使用来在共享存储器22中的保持信号量相干性。
处理器12和GPP 14允许共享存储器的选定区被高速缓存,和一种高速缓存(叫做″存储器类型″)对于选定区被规定。支持的存储器类别包括:不可高速缓存的(UC);写入-通过(WT);回复(WB);写保护(WP);和写入结合(WC)。
如果UC存储器类型被规定,选定区不被高速缓存。对于WT,对和从选定区写入和读取被高速缓存。在高速缓存命中和读取丢失的从高速缓存行读取导致高速缓存填充。所有写入被写入给高速缓存行和通过给共享存储器。这个机制加强在各种高速缓存和共享存储器之间的相干性。在WB存储器类型中,对共享存储器的写入和从共享存储器的读取被高速缓存。高速缓存命中从高速缓存行读取;读取丢失导致高速缓存填充。写入丢失导致高速缓存行填充,以及写入在高速缓存彻底执行,当可能时。当高速缓存行需要被回收时,回写操作被触发。在WP模式下,当可能时从高速缓存行读取,和读取丢失导致高速缓存填充。写入被传播给系统总线并且导致在总线上所有处理器的相应高速缓存行失效。当WC被使用时,共享的存储器位置不被高速缓存,以及写入可以被延迟和组合在写入缓冲中以减少存取器访问。
处理器12和GPP 14用他们的各个高速缓存来保持最近访问数据的本地拷贝,包括环数据和描述符,从共享存储器,以减少处理器使用的FSB 16带宽。相干性(或一致性)可以在多重高速缓存24、38和共享存储器22中,由诸如探听高速缓存和目录的许多不同公知机制和诸如修改专有共享无效的(MESI)或修改所有者专有共享无效的(MOESI)的公知协议进行维持。
在一个典型实施例中,在此描述了所使用的探听高速缓存相干性协议是MESI协议,其中″MESI″涉及四个高速缓存状态″修改″(M)、″专有″(E)、″共享的″(S)、和″无效″(I)。高速缓存的每个高速缓存行都可以是四种状态中的一种。环数据结构26、28由代理以这种方式使用,使每个环上的在生产的和消耗一个或多个代理之间存储器通信和导致的相干性业务减到最少,如将描述的那样。
GPP 14使用页可高速缓存性属性和存储器类型范围寄存器(MTRRs)以确定FSB访问的高速缓存属性。同样地,处理器12都用FSB指令类型和MTRR来定义FSB事务可高速缓存性。MTRRs允许高速缓存的类型在共享存储器中被规定以用于所选择的物理地址范围。根据描述的实施例,下面的表格1定义高速缓存分配策略。其他高速缓存分配策略也可以使用。
  没有分配   选择的存储器类型   在读取丢失中分配的高速缓存行   在写入丢失中分配的高速缓冲行
  否   WB,WT   是   是
  否   WC,WP   是   否
  否   UC   否   否
  是   Any   否   否
表格1
环管理器30监控(″探听″)来自其他处理器的FSB 16的访问,诸如GPP 14,和根据请求保持高速缓存24和其他处理器的高速缓存的相干性以进行响应。这个探听活动由环管理器30的硬件处理,并且对软件是透明的。探听响应能够表示对于地址的命中,该地址实际上不在高速缓存中,但是高速缓冲具有响应性,因为环管理器30从时间点保持用于数据的相干性,该时间点上开始了对要修改的数据的FSB数据读取,直到数据在FSB 16上写出。修改的数据可以从存储器,在内部环管理器缓冲中,在高速缓存24,在从高速缓存24收回的过程中穿梭,依此类推。当地址命中锁定的高速缓存行时,环管理器30将会停止探听响应。高速缓存行在环操作更新期间锁定,如将被描述的那样。
如图2所示,环数据结构40包括环描述符28和环阵列26,二者都存储在共享存储器下22,如图1所示。环阵列26包括用于每个环的环数据存储区域41(为了简单,仅有一个--对于环‘n’41的环数据存储--被示出)。用于不同环的环数据存储不需要是邻近的。每个环由唯一环描述符描述。环描述符被分成四个描述符,其中每个描述符驻留在由号做索引的类似环的阵列中:头描述符;尾部描述符;公共描述符;和信用描述符。因此,有头描述符42的阵列、尾部描述符44的阵列、公共描述符46的阵列和信用描述符48的阵列。头描述符42的阵列包括用于每个环的头描述符50,即用于环0的头描述符0、用于环1的头描述符1,..,用于环′n′的头描述符‘n’,同样地有用于每个环的尾部描述符52、公共描述符54和信用描述符56。每个环的描述符通过使用那个环号相对于在环管理器30中各个CSR存储的基础地址来定位,作为描述符块的索引。更具体地,头描述符阵列基础CSR 58、尾部描述符阵列基础CSR 60、公共描述符阵列基础CSR 62、和信用描述符基础阵列CSR 64分别地保持用于头描述符阵列42、尾部描述符阵列44、公共描述符阵列46和信用描述符阵列48的基础地址。一个特定的环号将会用来访问头描述符52、尾部描述符50、公共描述符54和信用描述符56,这四个阵列的每个的一个,和每个对具体环相关。头描述符提供指向下一个记录或将在相应环中读取的位置的指针,同时尾部描述符提供指向下一个记录或将在相应环中写入的位置的指针如图2针对环′n′所示。环描述符的不同部分是分离的以便对它们个别地访问和保留在不同高速缓存行(通过不同处理器),由于错误共享这使高速缓存活动和相干性业务减到最少。当共享相干存储系统的具有高速缓存的两个代理,每个反复访问不同和不相关位置时,该位置碰巧存在于相同的高速缓存行并且因此在两个代理高速缓存之间引起额外的和不必要的相干性业务,错误共享发生。
每个环能够独立用于尺寸配置和能够独立位于在存储器中(即,不同环可以不存在于存储器的相邻区域)。一些技术适用于环尺寸配置。例如,一个环或者一组环能由指示环尺寸的控制寄存器来配置。交替的,环尺寸可以作为数据存储在环的描述符中。表示环的每个存储器阵列的尺寸和校准可以限制为2的乘方(power)以允许满指针在环描述符的一个位置中存储。通过使用环-尺寸来确定哪个高位位保持常量和哪个包括在增量指针中,用于每个环的环基础和增量索引能够有效地在环的描述符中存储。可选地,通过存储环upper_bound地址和环尺寸(或等效地ring_base和环尺寸),一个能支持任意的校准和/或独立于定位的环的任意尺寸,并且当到达边界时指针复位到界限减去尺寸(或等效地设置成基础值)。阈值(例如,用于推出新的公共指针,用于从公共池提取信用和用于溢出信用到公共池)都是每环独特地可配置的。
环促进消息在代理之间在两个方向通过。硬件环管理器30可以用用于在两个方向通信的模式定义,在每-环基础上选择。即,每个环都是可配置以选择是否一个或者多个GPP14或处理器12的硬件担当消费者,并且另一个担当生产者。方向也能够硬布线。给定的环仅仅配置为用于一个方向。
图3显示根据一个例子配置的在GPP 14(作为环用户)和处理器12的环用户31之间传递的消息的每个环所选择的方向。图中显示的是三个环用户31a、31b和31c、和三个环41a、41b和41c。在这个例子中,环用户31a和31b写入环41a(由GPP 14读取),环用户31c写入环41b(也由GPP 14读取)以及GPP14写入环41c(依次由环用户31c阅读)。因此,环用户31a和31b是生产者以及GPP 14是关于环41a的消费者,环用户31是生产者以及GPP 14是关于环41b的消费者,以及GPP 14是生产者和环31c是关于环41c的消费者。应该注意的是,从环入列和出列的消息内容完全相当于应用定义以及不由环管理器30的硬件观察或修改。
图4显示用于头描述符50的典型数据结构布局,其仅仅由相关环的消费者访问。头描述符50保持下面的字段:头指针(Head_Ptr)字段70,在前的尾部指针(Prev_Tail)字段72,和取得的环数(C_Count)字段74。其也能够在环尺寸字段(Ring_Sz)76中存储环尺寸的拷贝。
图5显示用于尾部描述符52的典型数据结构布局。尾部描述符52由相关的环的生产者使用,和从未由消费者访问过。尾部描述符52包括下面的字段:尾部(或生产)指针(Tail_Ptr)字段80;数(P_Count)字段82;阈值字段84;和环尺寸字段86。头和尾部描述符能够包括指示环尺寸的相同的编码的值,其用于确定当″包″环阵列开始的指针。
图6显示用于公共描述符54的典型数据结构布局。公共描述符54由生产者写入和由消费者读取。到公共描述符的访问因此在系统10的高速缓存中可以引起高速缓存相干性业务。公共描述符54包括公共尾部指针(Public_Tail)字段90以存储在尾部描述符52的Tail_Ptr字段80中存储的尾部指针的近似版本。近似尾部指针表示已经写入到用于参考环的环阵列41的所有或较少的记录,以及可以表示比在尾部描述符52的私人尾部指针40指示出的更少的记录。
现在参见图4-6,头描述符50包含对消费者的私人数据,尾部描述符52包含对生产者的私人数据,和公共描述符54包含通知给消费者的生产指针的公共版本。在头指针字段70中存储的头(消耗)指针提供由消耗访问操作(例如,基于ME产生了′到达(get)′指令)要从环读取的下一个项(记录)的地址。在Tail_Ptr字段80中存储的尾部指针包含由生产访问操作(例如,由ME产生′放(put)′指令)要对环写入的下一个项的地址。在优选实施例中,头和尾部指针用环数据存储区域41的基础的物理地址(共享存储器的位置)初始化。Prev_Tail字段72存储公共尾部指针的最近高速缓存的值。C_Count 74包含环中可用于消耗访问操作的数据数量(记录的数量)。只要C_Count字段74的值表示在环中存在的数据的数量小于消费者请求的时候,生产指针的公共值,即存储在Public_Tail字段90中的公共尾部指针,从在共享存储器中公共描述符54得到,其间的(进行包如果必要)增量和高速缓存(在前尾部指针)值被确定,以及产生的值(指示自从最后的检查入列的记录的数量)被增加到C_Count字段74。Prev_Tail字段72维持最近从公共描述符54的Public_Tail字段90读取的公共尾部指针的拷贝。
参见图5-6,P_Count字段82的值表示从对Public_Tail字段90的最后更新开始已经添加到环尾部的数据的量(记录的计数)。记录可以是由共享环的生产者和消费者相互认同的任何尺寸。当P_Count字段82的值变得大于在阈值字段84中存储的阈值时,Tail_Ptr字段80的值被拷贝到Public_Tail字段90并且把P_Count字段82的值设置成′0′。到Public_Tail字段的更新也能够由超时机制触发,下文参考图11描述。P_Count 82的初始值是′0′。
更高的阈值产生更少频率的更新,以及因而在FSB 16使用较少的周期。更高的阈值在通知消费者关于环的新信息时也引起得更多延迟。阈值字段可以包含阈值或指示阈值的码。在一个实施例中,3-位值可以被使用来定义八个相应阈值(每一个规定一给定数量的记录)。
因此,P_Count字段82的值提供了自从公共生产指针以私人(实际)生产指针值最后一次更新开始,入列的项的数目的计数,并且把存储在阈值字段84中的阈值与计数比较来确定更新公共指针的时刻以及由此把那些新项传给消费者。Public_Tail字段90由消费者读取和使用以更新头描述符50的C_Count字段74,只要C_Count字段74的值比满足消耗访问操作的数据需要的数量少。生产指针的私人和公共的拷贝因此用于缓和对消费者的通知和最小化高速缓存/存储器业务。注意到消费者可以定期地轮询环或从生产者处由边带通信被通知(诸如中断)在环中可提供数据,可以利用阈值来批处理这样的通知并且可以利用相关的计时器来界定通知延迟。为了支持轮询,如果在环中不存在足够的数据来满足请求的尺寸,环数据结构可以配置为返回NULL值。
图7显示用于信用描述符56的典型数据结构布局,其由生产者和消费者二者访问。到信用描述符的访问因此在FSB 16能够产生高速缓存相干性业务。信用描述符56保持信用字段100和锁字段102。信用字段100是指示环上可用的空闲位置的数量的计数。信用字段100的初始值是环的最大尺寸(即,位置的数量,基于指定的环尺寸。)锁字段102为一个位,用来允许生产者和消费者到信用字段100的专有访问。生产者和消费者在修改信用字段100前通过设置锁字段102的锁位来锁住信用描述符。它们能够用最小单位的交换指令使用公知的算法获得和释放互相拒绝锁,以及仅仅当它们获得锁的时候才能够修改信用值。
消费者和生产者之间交换的环信用可以表示在环的每一端单一环用户的行动,或可以表示在环上任一个端上共享该环的环用户的多重的集中行动。共享环的每个用户能够使用互相拒绝锁以最小单位将公共信用计数的信用移动到本地、私人的变量或者返回信用给公共池。使公共信用数目计数由消费者递增和由生产者递减,当信用从消费用户的私人本地″池″(私人信用计数在环的消耗端由用户在本地信用变量维持)移动到公共信用池(即,信用描述符的信用字段值例如信用描述符56的信用100)到生产用户的私人本地池(私人信用计数在环的生产端由用户在本地信用变量维持)。在示例的实施例中,环用户本身保持本地信用变量和执行信用管理。可选地,或此外,私人信用计数可以用环描述符的其它本地变量储存(用于消费者的私人信用计数的头描述符和用于生产者的私人信用数目的尾部描述符)。
生产者从可用的本地信用中减去在生产访问操作期间写入的环位置的数量。只要生产者确定本地信用的数量已经降低到低于低的″水印″(或阈值水平)时,生产者就从信用字段100补充它的本地信用,。例如,只要本地信用的数量到达200以下,生产者能从公共信用池那里获取5000个信用,这要首先检查来确保那个公共信用池作为结果不会到达0以下。以这个方式成组分配信用并且将它们本地高速缓存使得用于分配环信用的共享存储器业务的数量减到最少。当每次完成对从环读取的数据的处理,并将所移除的环项的数目增加到本地信用后,消费者就积累信用到它的本地信用变量里。当消费者确定本地信用的数量已经到达高于高水印(或者阈值水平)时,消费者向信用字段100中添加本地信用。本地积累信用然后成组返回信用,使得用于返回环信用到公共信用池的共享存储器业务的数量减到最少。由于如上所述成批处理分配和释放信用,实际上将在环上有比信用指示的更多的可用空间。大数量的(或所有可用的)信用可以同时分配或释放以使对共享的信用字段的访问和冲突的可能性减到最少,其在互相拒绝(互斥)锁保护中增加和减少,该锁是在硬件环管理器30和共享存储器的软件环管理器32之间共享的。
在一个典型实施例中,信用管理被在GPP 14和处理器12的环用户上的软件执行。可选地信用管理能由硬件执行。同样注意的是,这个机制不排除多重生产者对特定的一个环的写入和多重消费者从特定的一个环进行读取的情况。在那情况下,理想的是设置水印阈值以便于所有生产者都能够预取足够的信用到他们的本地信用池里,无需使得其它生产者缺乏,以及环被适当的设置尺寸来解决由于多重如此″信用高速缓存″的较少有效的环利用。此外,当多重生产者共享环时生产者不应该自动地取得所有可用的信用而应该具有确保贪婪的信用获取不使同等生产者缺乏的策略。用于返回信用的环尺寸和消费者阈值同样地必须解决多于一个消费者在收集成批的信用返回给用于那环的池的事实。用于从公共池获取信用和用于返回信用到公共池的水印阈值对于每个环和每个环用户而言都是唯一可配置的。
图8示出在图1的多处理的环境下私人和公共的信用计数的典型使用。这个例子表示用于单一环的信用传送,示为用于给定的方向配置的环′n′41,其中GPP 14作为关于环′n′的生产者操作以及处理器12作为消费者操作。如图所示,用于环′n′的私人信用计数103在GPP 14维持以及私人信用计数104在处理器12用于维持环′n′(更具体地,由处理器12的特定环用户)。应该意识到的是每个处理器都维持至少一个用于每个使用的环的单独私人信用计数,以及用于每个环的方向是基于环配置的,如前面讨论的。因此,对于另一个环,GPP 14可以是消费者并且处理器12的环用户可以是生产者。在这个例子中,生产者入列环记录(如箭头105所示)。对于每个入列的记录,生产者递减一个私人信用计数103(如箭头106所示)。消费者出列环记录(如箭头107所示)并且对每个出列的记录(如箭头108所示)递增一个私人信用计数104。周期性地,或在出列操作的开始(响应于高水印阈值交叉的检测)消费者引起信用成批地传送,从私人信用计数104到环的公共信用计数100(如箭头109a所示)。周期性地,或在入列操作的开始(响应于低水印阈值交叉的检测)生产者引起信用成批地传送,从公共信用计数100到私人信用计数103(如箭头109b所示)。信用的传送需要在互相拒绝锁的保护中从公共信用计数减去信用,并且增加对私人生产者的信用计数的信用。
消耗访问(出列)和生产访问(入列)操作二者都访问部分环描述符。参考图9,在一个典型实施例中,用于环描述符读取110的随后任务被用于两个操作执行。首先,环管理器计算112由操作112需要的环描述符的地址。环描述符通过增加多倍的环数量给适当的基础值来确定,其中,乘数表示记录的尺寸。例如,用于头描述符,环数量倍数(time)′n′被增加到Ring_Head_Base_CSR存储的值。下一步,如果指示的环描述符在高速缓存,环管理器确定114。对于高速缓存命中的情况,环管理器设置116高速缓存行状态为′M′(即,修改MOSI状态)。对于高速缓存丢失的情况,环管理器分配118高速缓存行。如果分配的高速缓存行为′M′状态时其确定120。如果分配的高速缓存行确定为′M′状态,环管理器初始化122 FSB存储器写入以写出(″转储清除″)牺牲数据(victim data)给共享存储器。环管理器通过FSB存储器读取124从共享存储器(在所计算的地址处)返回的高速缓存行填充数据到高速缓存中分配的高速缓存行,以及把高速缓存行状态设置成′M′(在116)。
参考图10,示出一个典型的生产访问操作130。如果私人信用计数降低到低于预定的低水印,请求所述操作的代理从信用描述符字段获得132信用。进行请求的代理也移动134要添加到环的数据到写入缓存。如果确定尾部描述符已经不驻留在高速缓存中,环管理器阅读136尾部描述符到高速缓存里。这个尾部描述符读取可以根据环描述符阅读110执行,参考图9描述。环管理器设置相关于保持尾部描述符为″锁″高速缓存行的高速缓存行的锁状态位,即确保在高速缓冲行上最小单位(atomically)地一系列操作的完成,没有任何相干性活动的中断。将P_Count字段的值和阈值字段的阈值进行比较140,以确定P_Count字段的值是否大于阈值中的值。如果这个比较指示P_Count值比阈值更大,环管理器拷贝142保留在Tail_Ptr字段80里的尾部指针到公共描述符Public_Tail的字段以更新公共尾部指针。如果P_Count值不大于阈值或者PublicTail字段更新被执行以后,环管理器根据被写入环以及高速缓存的数据的数量,更新144Tail_Ptr和P_Count字段的值,并且清除146高速缓存行锁状态位为″解锁″高速缓存行。
仍然参考图10,环管理器检查148高速缓存来确定是否高速缓存具有通过预修改的尾部指针寻址的高速缓存行的拷贝。基于高速缓存的分配策略,使用Tail_Ptr的值作为地址,环管理器写入150数据到高速缓存或共享存储器里。应该注意的是,当环描述符总是被高速缓存时,如果该地址的高速缓存分配策略配置指示为高速缓存分配应当发生时,环写入(也读取)数据仅仅被高速缓存。
除了在环情况中使用的地址是被从环数量和指令中间接取得之外,共享存储器写入150与用于非-环-相关共享存储器访问的共享存储器写入大体相同。根据一个典型实施例,存储器的细节写入150,如图11所示。参考11,环管理器为每个高速缓存行确定152写入数据是否命中高速缓存行并且高速缓存行为′E′还是′M′状态。如果如此,任何FSB事务是不需要的。环管理器将命中那个高速缓冲行的数据写入154到高速缓存里的,并改变156高速缓存行状态′E′到′M′(或者使状态不变如果已经是′M′状态)。如果环管理器确定158数据命中高速缓冲行并且高速缓冲行状态是′S′,则环管理器初始化160在FSB上的FSB存储器读取和失效。当那个事务完成时,环管理器引起162写入数据被合并入从共享存储器返回的高速缓存行和合并的数据被写入高速缓存里。环管理器改变164高速缓存行状态为′M′。如果寻址的数据的任何部分不在高速缓存内,下一个操作取决于高速缓存分配策略,所以环管理器检查168高速缓存分配策略。如果高速缓存分配策略是′写入分配′,环管理器对每个丢失的高速缓存行分配170高速缓存行,并初始化172 FSB读取来充满那个高速缓存行。FSB读取使用一种存储器读取和失效及WB属性的请求类型。环管理器初始化174 FSB存储器写入以对于任何分配的在′M′状态的高速缓冲行,写出牺牲数据给共享存储器。当用于每个高速缓存行填充的数据被返回在FSB 16时,环管理器存储176数据到高速缓存中分配的行。环管理器将命中分配的高速缓冲行的写入数据写入到高速缓存中,并且设置了178高速缓存行状态为′M′(如果还没有设置成′M′)。如果,在168,其确定高速缓存分配策略是′没有分配’,环管理器对于没有在高速缓存找到的地址的每个块初始化180 FSB写入。FSB写入使用存储器写入和WC属性的请求类型。
除了信用更新以外的所有活动(在132)由处理器12的环管理器30执行。类似的活动由运行在GPP 14的软件环管理器32执行。
生产访问操作基于阈值更新Public_Tail的值,如上所述(在140和142)。为了处理积累的操作长时间没有到达阈值(例如,由于消息生产中的暂停)的情况,一个超时机制可以被提供来确保消费者被通知那些消息的到达。否则,用于特定环的P_Count值和环描述符可以在无限制的时间内依然如故。超时可以由下述部件处理:用于处理器环用户31到GPP 14通信的环的环管理器的硬件,和环的GPP 14中的环管理器软件,所述环由作为生产者的GPP 14和由在相反方向通信的作为消费者的环用户31使用。
超时机制的一个例子是环管理器30里的硬件处理以及环管理器32的例行程序的软件处理,该环处理器扫描所有尾部/生产描述符并且如果特定环访问时是非空的就触发该环的更新。每个环每当超时期间应该被访问。
另一个示例实施例中,环管理器30可以包括超时状态机形式的超时支持来管理某些数量的环超时。
在这样的例子中,和如图12所示,超时状态机(SM)190如下操作。在复位状态时,把超时SM放入‘清洁’状态(状态192)。当放指令被执行时,那个环的状态被设置为″放″状态(状态194)。在超时时,状态机从″放″状态前进到″时间1″状态(状态196)。在第二超时时,超时SM从″时间1″状态前进到″时间2″状态(状态198)。在″时间2″状态,尾部描述符的Tail_Ptr 80(从图5)的更新到公共描述符Public_Tail 90是未决的。从″时间2″到″清洁″状态有两个出口。如果超时SM在″时间2″状态,在主要FSB状态机的下一个发送执行更新。可选地,如果超时SM进入″时间2″状态和更新在放的过程期间被完成,超时SM立即进入″清洁″状态,因为该事件将更新到Public_Tail。超时SM 160记录任何还未更新到Public_Tail的未完成的放操作。超时SM 190等待两个计时间隔,而不是立即触发更新。那个时候,如果放操作仍然未完成,则更新。对于额外等待,很可能的是,在计时触发更新以前经常使用的环将通过(cross)阈值(以及因而需要″正常″更新)。
理想的是当生产指针在共享的相干存储器中维持和代理有不同高速缓存的拷贝时,把公共生产指针的更新频率减少,如上所述。每个到生产指针的写入访问在写入者的高速缓存中将该拷贝置于′M′状态,并且随后写入能够立即提供业务。每个由另一个代理对该指针的读取将其移动到′S′状态,要求写入者在相干总线上出去,以重新得到用于下一个入列增量指针变量的专有所有权。有利的是,当消息由代理间的高通过量传送时,将这样相干的事务处理的数目减到最少。成批的通知也能够通过摊销进入和离开服务程序的软件开销来帮助优化处于高流量情况的软件,仅仅当有一整个成批记录要服务时调用(或者当周期性轮询(poll)环时期望高成功率)。强制更新公共指针的超时机制帮助确保部分批处理不用等待服务太久。
图13个表示典型的消耗访问操作200。如果必要,请求代理根据如果由本地代理维持的私人信用计数超过预定的高水印,增加信用给信用描述符的信用字段值,来返回202信用。环管理器读取204头描述符到高速缓存里,如果其已经不在高速缓存中。头描述符读取根据环描述符读取110(图9)执行。
环管理器比较206头描述符中C_Count字段74的值和消息尺寸来确定环中是否足够的数据是可用的来完成请求的操作。如果C_Count 74测试指示环中没有足够的数据(即,C_Count字段74的值小于消息尺寸),则环管理器读取208公共描述符54到高速缓存里,如果公共描述符54已经没有高速缓存。公共描述符读取也能够根据环描述符读取110(图9)执行。环管理器设置210用于保持头描述符的高速缓存行的高速缓存行同步状态位。其使用PublicTail 90字段值更新212 C_Count 74值和Prev_Tail 72字段,如前所述。如果,在186,C_Count字段74的值指示环中有足够的数据来完成请求的操作,则没有对C_Count 74和Prev_Tail 72的更新被执行。取而代之,C_Count 74测试后跟随有根据设置214用于保持头描述符的高速缓存行的高速缓存行锁状态位。
在高速缓存行锁状态位被设置并且根据Public_Tail 90字段的C_Count 74和Prev_Tail 72字段的任何必要的头描述符更新被执行之后,环管理器根据消息尺寸(被从环消除的数据的数量)更新216 Head_Ptr 70和C_Count 74字段。当那些已经更新时,环管理器清除218高速缓存行锁状态位。
环管理器检查220高速缓存来确定其是否保持所有通过预修改的头指针寻址的数据。如果有高速缓存丢失,环管理器从共享存储器读取222该数据到高速缓存,基于使用头指针作为地址的高速缓存分配策略。然后环管理器提供224请求代理的数据。如果数据已经驻留在高速缓存则将其提供给请求代理(在224)而无需FSB共享存储器访问。
共享存储器读取大体相同于用作非-环-相关的共享存储器访问的读取,除了环情况中使用的地址从环的数量获得。根据一个典型实施例的共享存储器读取访问222的细节如图14所示。参考图14,环管理器将任何在高速缓存找到的请求数据转移230到读取缓冲。请求数据在那里维持直到所有请求的读取数据都在读取缓冲中。环管理器确定232是否有寻址的数据的任何部分不在高速缓存。如果这样,环管理器检查234高速缓存分配策略。如果高速缓存分配策略是′读取分配′,环管理器对每个丢失的高速缓存行分配236高速缓存行,并初始化238 FSB读取来充满那个分配的高速缓存行。每个FSB读取都使用存储器数据读取和WB的属性的请求类型。对于每个预先分配的行,如果行是′M′状态,环管理器初始240 FSB存储器写入来写出牺牲数据到共享存储器。当用于每个高速缓存行填充的数据回到FSB16,将其存储242在高速缓存的分配行,并且高速缓存行状态根据FSB总线探听响应设置244为′E′或′S′(如果没有在另一高速缓存中找到就为′E′,如果在另一个高速缓存找到则为′S′)。同样,环管理器在读取缓冲存储246由读取指令请求的数据字。一旦所有请求的读取数据在读取缓存,环管理器将其提供给请求的环用户(在224、图13)。如果在234环管理器确定高速缓存分配策略是′没有分配′,则其初始化248对没有在高速缓存中找到的每个地址块的FSB读取。每个FSB读取都使用存储器数据读取和WB的属性的请求类型。当每个读取的数据回到FSB 16时,将其存储250在读取缓冲,而不在高速缓存中存储。一旦所有请求的读取数据在读取缓存,其被提供给请求的环用户(在224、图13)。
除了信用更新以外的所有活动(在202)由处理器12的环管理器30执行。类似的活动由运行在GPP 14的软件环管理器执行。
在给定的环可以被使用之前,其必须初始化。初始化由在代理上运行的软件处理,例如,处理器的环用户31、或者GPP 14。参考图15,典型的初始化处理260通过分配262共享存储器给环描述符开始。四个区域被分配,一个用于头描述符阵列,一个用于尾描述符阵列,一个用于公共描述符的阵列,一个用于信用描述符阵列,如前所述。处理260为四个区域的每个分别写入264开始地址到Ring_Head_Base、Ring_Tail_Base、Ring_Public_Base、和Ring_Credit_BaseCSRs里。基于每个环的选择的环尺寸,处理260在共享存储器中分配266用于环数据存储区域的存储。通过对环数据存储区域写入具有基础值的这些描述符,处理为每个环初始化268四个环描述符的每一个。用于特定环的生产指针和消耗指针初始化到相同值。头和尾部结构复制尺寸信息和环基础(使指针不增加的部分)以避免围绕不必要的共享信息的相干性业务的需要。
如上所述,多重生产者和/或者消费者可以对相同处理器来的环数据操作。例如,多重处理器核心可以期望给/从环写入/读取数据。许多实施例能够处理多重生产者/消费者。例如,处理器可以着重于单一环生产者和/或消费者代理,以处理从其他代理接收的环请求。例如,不同处理器核心可以集中(funnel)环访问请求到由核心之一操作的环生产者线程服务的队列里。这样的实施例中,单一处理器环生产者和/或者消费者代理可以有私人生产者和/或消费者结构中的数据的专有控制。
交替地,不同生产者和消费者可以独立访问给定的环的环数据结构。这样的实施例中,机制(例如,互相拒绝锁(″互斥″))可以用于解决代理之间的争用问题。例如,头和尾部描述符可以由互相拒绝(互斥)锁保护,以限制一次就对一个各自的消费者或生产者代理的描述符的访问。交替的,互斥信号可以在更好的颗粒度(granularity)使用。例如,一个互斥信号可以锁住私人消费者指针同时另外一个锁住私人消费者信用计数。另外,多重代理可以保持自己的信用池,其贡献给/获取从私人生产者/消费者信用池。
为了表示多重独立生产者为特征的实施例的操作,生产者可以通过下述步骤写入环记录,例如:获得对私人生产者指针的互斥信号;从生产者信用计数获得必要信用;写入环记录;更新私人生产者指针;和释放互斥信号。潜在地,生产者可以调整共享的生产者指针和/或者共享的信用计数,其也可以需要获得各个互斥信号。同样地,例如,通过获得对私人消费者指针的互斥信号;出列环记录;更新私人消费者指针;和释放互斥信号,多重独立消费者能够出列环记录。潜在地,给定的消费者可以更新私人消费者信用池和/或者公共信用池。再次,这个更新可能需要一个或多个互斥信号的获取。
多-处理器系统10(图1),如上所述,具有环管理和高速缓存/存储器相干性,可以在许多应用下使用。例如在网络应用中,可能的是紧密连接分组处理和通用处理,以实现在网络处理器的分组处理单元之间的高通过量的通信和通用处理的控制和/或内容处理。例如,图16所示,分布的处理平台270包括由底板276,例如开关构造(如所示),相互连接的叶片272a-272m和行插板274a-274n的集合。例如开关构造可以符合通用开关接口(CSIX)或者其他的构造技术,诸如高级切换相互连接(ASI)、HyperTransport、Infiniband、外围部件互连总线(PCI)、以太网、同步光纤网上的分组、RapidIO、和/或通用测试和用于ATM的操作PHY接口(UTOPIA)。
行插板是线路终端和I/O处理发生的地方。其可以包括数据平面处理(分组处理),和控制平面处理来操作数据平面中执行策略的管理。叶片272a-272m可以包括:操作不被分发给行插板的控制平面功能的控制叶片;执行系统管理功能,诸如驱动器枚举、路线表管理、全局表管理、网络地址转换和对控制叶片消息的控制叶片;应用和业务叶片;和内容的处理叶片。开关构造或者多个构造也可以在一个或多个叶片上存在。网络基础中,内容处理可以用于在标准行插板功能之外操作基于密集(intensive)内容的处理,包括语音处理,加密卸载和入侵检测,其中性能要求高。
至少一个行插板,例如行插板274a,是专业行插板,即实现基于系统10的结构,来紧紧地将通用处理器的处理智能与网络处理机的更专业的能力结合在一起。行插板274a包括媒体接口278以处理在网络连接上的通信。每个媒体接口278都连接在处理器12上,示为网络处理器(NP)12。这个实施例中,一个NP用作进入处理器并且另一NP用作出处理器,但单一NP也能够被使用。系统10的其他部分和相互联接如图1所示。在这里在系统10的系统逻辑电路和I/O块34与开关构造276连接。可选地,或者此外,其他基于以多-处理器系统10的应用能通过分布的处理平台270使用。例如,用于优化的存储处理,理想地用于这样的应用,如企业服务器、网络存储器、卸载和存储子系统应用,处理器12能作为I/O处理器实现。对于其他应用,处理器12仍然可以是协处理器(用作加速器,例如)或者独立的控制平台处理器。取决于叶片和行插板的配置,分布的处理平台270能实现开关器件(例如,开关或者路由器),服务器、语音网关或者其他的类型设备。
如上所述的技术可以在许多逻辑电路中实现。在此使用的术语逻辑电路包括硬布线的电路、数字电路、模拟电路、可编程电路,并且依此类推。可编程电路操作配置于制造的项目的指令(例如,易失或者非-易失的存储器)。
其他的实施例也在所附权利要求的范围中。

Claims (30)

1.一种系统包括:
存储器;
第一处理器,包括:
至少一个相关的高速缓存;以及
逻辑电路,操作作为一组环中至少一个环的消费者,所述一组环包含含有存储在存储器中的记录的至少一个环,所述逻辑电路用于:
从该至少一个环出列记录;
基于出列的环记录的数量,调整用于记录的该至少一个环的消费者信用计数;
基于用于所述记录的该至少一个环的消费者信用计数,调整用于记录的该至少一个环的共享信用计数;
基于用于记录的该至少一个环的共享生产者指针,为记录的该至少一个环设置消费者生产者指针;
第二处理器具有:
至少一个相关的高速缓存;
逻辑电路,操作作为所述一组环中至少一个环的生产者,所述一组环包含含有存储在存储器中的记录的至少一个环,所述逻辑电路用于:
入列记录到该至少一个环;
基于已入列的环记录的数量,调整用于记录的该至少一个环的生产者信用计数;
基于用于记录的该至少一个环的共享信用计数,调整用于记录的该至少一个环的生产者信用计数;
基于用于记录的该至少一个环的生产者信用计数的调整,调整用于记录的该至少一个环的共享的信用计数;
基于入列的环记录调整用于记录的该至少一个环的生产者生产者指针;
为记录的该至少一个环设置共享生产者指针为用于记录的该至少一个环的生产者生产者指针;以及
使存储器、第一处理器、第二处理器相互连接的总线。
2.如权利要求1所述的系统,其中第一处理器和第二处理器中的至少一个包括在单一模之内集成多重处理器核心的处理器。
3.如权利要求1所述的系统
其中消费者逻辑电路和生产者逻辑电路中的一个由硬件组成;以及
其中消费者逻辑电路和生产者逻辑电路中的一个包括软件指令。
4.如权利要求1所述的系统,
其中所述作为消费者操作调整共享的信用计数的逻辑电路包括基于消费者信用计数与阈值的比较,向共享的信用计数中添加至少一些消费者信用计数的逻辑电路。
5.如权利要求1所述的系统,
其中所述作为生产者调整生产者信用计数的逻辑电路包括基于生产者信用计数和阈值的比较,向生产者信用计数中添加至少一些共享信用计数的逻辑电路。
6.如权利要求5所述的系统,其中所述作为生产者操作增加至少一些共享信用计数的逻辑电路包括增加少于共享信用计数的总数的逻辑电路。
7.如权利要求1所述的系统,其中作为生产者操作的逻辑电路包括作为多重生产者操作的逻辑电路。
8.如权利要求7所述的系统,其中多重生产者获得至少一个从至少一个下述组中选出的互相拒绝锁:
访问共享的信用计数;
访问共享的生产者指针;
和入列至少一个记录到存储器中存储的记录的至少一个环。
9.如权利要求1所述的系统,其中作为生产者操作的逻辑电路,包括对来自多重代理的生产者请求进行服务的逻辑电路。
10.如权利要求1所述的系统,其中作为消费者操作的逻辑电路包括作为多重消费者操作的逻辑电路。
11.如权利要求10所述的系统,其中多重消费者获得至少一个从至少一个下述组中选出的互相拒绝锁:访问共享的信用计数;访问消费者消费者指针;和从存储器中存储的记录的该至少一个环中出列至少一个记录。
12.如权利要求1所述的系统,其中作为消费者操作的逻辑电路,包括对来自多重代理的消费者请求进行服务的逻辑电路。
13.如权利要求1所述的系统,其中消费者信用计数、共享的信用计数、生产者信用计数、共享的生产者指针、消费者生产者指针、和生产者生产者指针包括存储器存储的不同数据结构所存储的变量。
14.如权利要求13所述的系统,其中在存储器内存储的至少一个数据结构在第一和第二处理器的至少一个高速缓存中是可以进行高速缓存的。
15.如权利要求1所述的系统,其中在存储器存储的记录的该至少一个环组成的该组中的至少一个环在第一处理器和第二处理器的至少一个中的至少一个高速缓存中是可以高速缓存的。
16.如权利要求1所述的系统,其中所述至少一个环组成的组包括多重环。
17.如权利要求16所述的系统,其中第一处理器的逻辑电路包括作为第二个环的生产者的逻辑电路,并且第二处理器的逻辑电路包括作为第二个环的消费者操作的逻辑电路。
18.如权利要求17所述的系统进一步包括配置数据,识别第一处理器和第二处理器中的哪个作为生产者操作和第一处理器和第二处理器中的哪个作为该组多重环中的给定一个环的消费者。
19.如权利要求1所述的系统
其中第一处理器和第二处理器包括一组多于两个的处理器,该组处理器除第一和第二处理器以外的处理器包括逻辑电路,其作为至少从下述组中选出的操作:(1)作为在存储器中记录的该至少一个环组成的该组中的至少一个环的生产者操作;以及(2)作为在存储器中记录的该至少一个环组成的该组中的至少一个环的消费者操作。
20.如权利要求1所述的系统,其中第一处理器的高速缓存和第二处理器的高速缓存执行高速缓存相于性协议。
21.如权利要求1所述的系统,其中基于以共享的生产者指针的值调整消费者生产者指针,包括响应至少一个从下述组选出的项来调整:(1)周期性轮询;以及(2)表示从所述记录的该至少一个环组成的该组中的至少一个环中出列至少一个环记录的事件。
22.一种方法,包括:
消费者:
从环出列记录;
基于出列的环记录数量调整消费者信用计数;
基于消费者信用计数调整共享的信用计数;
基于共享的生产者指针设置消费者生产者指针;
以及,生产者:
将记录入列到环;
基于入列的环记录数量调整生产者信用计数;
基于共享的信用计数调整生产者信用计数;
基于对生产者信用计数调整,调整共享的信用计数;
基于入列的环记录,调整生产者生产者指针;以及
把共享的生产者指针设置成生产者生产者指针。
23.如权利要求22所述的方法,其中调整共享的信用计数包括基于消费者信用计数和阈值的比较来增加消费者信用计数给共享的信用计数。
24.如权利要求22所述的方法
其中基于共享的生产者指针设置消费者生产者指针,包括基于至少一个下述组中选出的项设置消费者生产者指针:(1)周期性轮询;以及(2)表示至少一个环记录出列的事件。
25.如权利要求22所述的方法,
其中调整生产者信用计数包括基于生产者信用计数和阈值的比较,来增加至少一些共享的信用计数给生产者信用计数。
26.如权利要求25所述的方法,其中增加至少一些共享信用计数包括增加少于共享信用计数的总数。
27.如权利要求22所述的方法,其中消费者信用计数、共享的信用计数、生产者信用计数、共享的生产者指针、消费者生产者指针、和生产者生产者指针包括在存储器存储的不同数据结构中存储的变量。
28.如权利要求22所述的方法,其中环包括一组多重环中的一个,每个环都有相关的共享的信用计数和共享的生产者指针。
29.一种产品包括指令,其当被执行时提供逻辑电路,包括:
消费者:
从第一个环出列记录;
基于从第一个环出列的记录的计数,调整消费者信用计数;
基于第一个环的消费者信用计数调整第一个环的共享的信用计数;
基于第一环的共享的生产者指针设置第一个环的消费者生产者指针;以及
生产者:
入列第二个环的记录;
基于第二个环入列的记录,调整第二个环的生产者信用计数;
基于第二个环的共享的信用计数调整第二个环的生产者信用计数;
基于第二个环入列的记录,调整第二个环的生产者生产者指针;
基于调整第二个环的生产者信用计数,调整第二个环共享的信用计数;以及
设置第二个环共享的生产者指针为第二环的生产者生产者指针。
30.如权利要求29所述的产品,其中消费者逻辑电路调整第一个环的共享的信用计数,包括消费者逻辑电路,基于第一个环消费者信用计数和阈值的比较向第一个环的共享的信用计数中添加第一个环的消费者信用计数。
CNA2006100996111A 2005-04-15 2006-04-17 环管理 Pending CN1869966A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/021,178 2005-04-15
US11/021,178 US20060236011A1 (en) 2005-04-15 2005-04-15 Ring management

Publications (1)

Publication Number Publication Date
CN1869966A true CN1869966A (zh) 2006-11-29

Family

ID=36692728

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2006100996111A Pending CN1869966A (zh) 2005-04-15 2006-04-17 环管理

Country Status (4)

Country Link
US (1) US20060236011A1 (zh)
CN (1) CN1869966A (zh)
TW (1) TW200705255A (zh)
WO (1) WO2006113570A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106560791A (zh) * 2015-10-01 2017-04-12 阿尔特拉公司 高效虚拟i/o地址转换

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7664110B1 (en) 2004-02-07 2010-02-16 Habanero Holdings, Inc. Input/output controller for coupling the processor-memory complex to the fabric in fabric-backplane interprise servers
US7757033B1 (en) 2004-02-13 2010-07-13 Habanero Holdings, Inc. Data exchanges among SMP physical partitions and I/O interfaces enterprise servers
US7860097B1 (en) 2004-02-13 2010-12-28 Habanero Holdings, Inc. Fabric-backplane enterprise servers with VNICs and VLANs
US7873693B1 (en) 2004-02-13 2011-01-18 Habanero Holdings, Inc. Multi-chassis fabric-backplane enterprise servers
US7633955B1 (en) 2004-02-13 2009-12-15 Habanero Holdings, Inc. SCSI transport for fabric-backplane enterprise servers
US7990994B1 (en) 2004-02-13 2011-08-02 Habanero Holdings, Inc. Storage gateway provisioning and configuring
US7860961B1 (en) 2004-02-13 2010-12-28 Habanero Holdings, Inc. Real time notice of new resources for provisioning and management of fabric-backplane enterprise servers
US7843907B1 (en) * 2004-02-13 2010-11-30 Habanero Holdings, Inc. Storage gateway target for fabric-backplane enterprise servers
US8868790B2 (en) 2004-02-13 2014-10-21 Oracle International Corporation Processor-memory module performance acceleration in fabric-backplane enterprise servers
US7685281B1 (en) 2004-02-13 2010-03-23 Habanero Holdings, Inc. Programmatic instantiation, provisioning and management of fabric-backplane enterprise servers
US8145785B1 (en) 2004-02-13 2012-03-27 Habanero Holdings, Inc. Unused resource recognition in real time for provisioning and management of fabric-backplane enterprise servers
US7843906B1 (en) * 2004-02-13 2010-11-30 Habanero Holdings, Inc. Storage gateway initiator for fabric-backplane enterprise servers
US7953903B1 (en) 2004-02-13 2011-05-31 Habanero Holdings, Inc. Real time detection of changed resources for provisioning and management of fabric-backplane enterprise servers
US8713295B2 (en) 2004-07-12 2014-04-29 Oracle International Corporation Fabric-backplane enterprise servers with pluggable I/O sub-system
US8429661B1 (en) * 2005-12-14 2013-04-23 Nvidia Corporation Managing multi-threaded FIFO memory by determining whether issued credit count for dedicated class of threads is less than limit
US8201172B1 (en) 2005-12-14 2012-06-12 Nvidia Corporation Multi-threaded FIFO memory with speculative read and write capability
US7694041B2 (en) * 2006-05-19 2010-04-06 Arabella Software Ltd. Method for managing buffers pool and a system using the method
US20080086575A1 (en) * 2006-10-06 2008-04-10 Annie Foong Network interface techniques
WO2008077283A1 (en) * 2006-12-27 2008-07-03 Intel Corporation Pointer renaming in workqueuing execution model
US8111707B2 (en) * 2007-12-20 2012-02-07 Packeteer, Inc. Compression mechanisms for control plane—data plane processing architectures
US7930578B2 (en) * 2007-09-27 2011-04-19 International Business Machines Corporation Method and system of peak power enforcement via autonomous token-based control and management
US7996548B2 (en) 2008-12-30 2011-08-09 Intel Corporation Message communication techniques
US8645596B2 (en) * 2008-12-30 2014-02-04 Intel Corporation Interrupt techniques
US8751737B2 (en) * 2009-06-26 2014-06-10 Alcatel Lucent Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system
US8468309B2 (en) 2010-09-25 2013-06-18 Intel Corporation Optimized ring protocols and techniques
CN102810083B (zh) * 2011-05-30 2016-08-24 上海华为技术有限公司 一种门铃消息分发方法、快速输入输出控制器和处理器
US8904067B2 (en) * 2012-03-13 2014-12-02 Microsoft Corporation Adaptive multi-threaded buffer
TWI607375B (zh) * 2012-11-05 2017-12-01 義隆電子股份有限公司 提升處理器之數值比較效能方法及應用在電子裝置進行數值比較的處理器
US9134778B2 (en) 2012-11-21 2015-09-15 International Business Machines Corporation Power distribution management in a system on a chip
US9134779B2 (en) 2012-11-21 2015-09-15 International Business Machines Corporation Power distribution management in a system on a chip
CN103347098A (zh) * 2013-05-28 2013-10-09 中国电子科技集团公司第十研究所 RapidIO总线互联系统的网络枚举方法
GB2517759B (en) * 2013-08-30 2021-03-31 Metaswitch Networks Ltd Ringtail buffers
US9069602B2 (en) * 2013-09-25 2015-06-30 Netronome Systems, Incorporated Transactional memory that supports put and get ring commands
US10474575B2 (en) * 2017-04-10 2019-11-12 Arm Limited Cache-based communication between execution threads of a data processing system
US10372608B2 (en) 2017-08-30 2019-08-06 Red Hat, Inc. Split head invalidation for consumer batching in pointer rings
US10152275B1 (en) 2017-08-30 2018-12-11 Red Hat, Inc. Reverse order submission for pointer rings
GB2569604B (en) * 2017-12-21 2020-06-03 Advanced Risc Mach Ltd Controlling reading and writing of data streams in data processing systems
US10620954B2 (en) 2018-03-29 2020-04-14 Arm Limited Dynamic acceleration of data processor operations using data-flow analysis
JP2020154805A (ja) * 2019-03-20 2020-09-24 キオクシア株式会社 マルチプロセッサシステム及び共有メモリの制御方法
US11709620B2 (en) 2020-11-13 2023-07-25 Ford Global Technologies, Llc Methods and systems for memory management in a publish and subscribe system
US11363099B2 (en) 2020-11-13 2022-06-14 Argo AI, LLC Methods and systems for enabling publish-subscribe message transmission in a distributed environment
US11429290B2 (en) * 2020-11-13 2022-08-30 Argo AI, LLC Methods and systems for providing a lockless access to a shared memory region in a publish and subscribe system
US11614985B2 (en) * 2020-12-22 2023-03-28 Arm Limited Insert operation
GB2619288A (en) * 2022-05-27 2023-12-06 Advanced Risc Mach Ltd Writing beyond a pointer

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4847754A (en) * 1985-10-15 1989-07-11 International Business Machines Corporation Extended atomic operations
US5548728A (en) * 1994-11-04 1996-08-20 Canon Information Systems, Inc. System for reducing bus contention using counter of outstanding acknowledgement in sending processor and issuing of acknowledgement signal by receiving processor to indicate available space in shared memory
US6311237B1 (en) * 1998-01-05 2001-10-30 Canon Kabushiki Kaisha System including single host buffer for transmit and receive data and reception buffer in interface device having stand-by area for use by host buffer when abnormal state is detected
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
US6594701B1 (en) * 1998-08-04 2003-07-15 Microsoft Corporation Credit-based methods and systems for controlling data flow between a sender and a receiver with reduced copying of data
FR2792086B1 (fr) * 1999-04-06 2001-07-27 Canon Kk Procede de transfert memoire entre applications
US6427196B1 (en) * 1999-08-31 2002-07-30 Intel Corporation SRAM controller for parallel processor architecture including address and command queue and arbiter
US6532509B1 (en) * 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) * 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6324624B1 (en) * 1999-12-28 2001-11-27 Intel Corporation Read lock miss control and queue management
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6463072B1 (en) * 1999-12-28 2002-10-08 Intel Corporation Method and apparatus for sharing access to a bus
US6560667B1 (en) * 1999-12-28 2003-05-06 Intel Corporation Handling contiguous memory references in a multi-queue system
US6307789B1 (en) * 1999-12-28 2001-10-23 Intel Corporation Scratchpad memory
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US6789143B2 (en) * 2001-09-24 2004-09-07 International Business Machines Corporation Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries
US7158964B2 (en) * 2001-12-12 2007-01-02 Intel Corporation Queue management
US7269179B2 (en) * 2001-12-18 2007-09-11 Intel Corporation Control mechanisms for enqueue and dequeue operations in a pipelined network processor
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US6779084B2 (en) * 2002-01-23 2004-08-17 Intel Corporation Enqueue operations for multi-buffer packets
US7181594B2 (en) * 2002-01-25 2007-02-20 Intel Corporation Context pipelines
US7149226B2 (en) * 2002-02-01 2006-12-12 Intel Corporation Processing data packets
US7437724B2 (en) * 2002-04-03 2008-10-14 Intel Corporation Registers for data transfers
US7376950B2 (en) * 2002-05-08 2008-05-20 Intel Corporation Signal aggregation
US20050018601A1 (en) * 2002-06-18 2005-01-27 Suresh Kalkunte Traffic management
US7451182B2 (en) * 2002-06-28 2008-11-11 Intel Corporation Coordinating operations of network and host processors
US7251219B2 (en) * 2002-07-03 2007-07-31 Intel Corporation Method and apparatus to communicate flow control information in a duplex network processor system
US7324520B2 (en) * 2002-07-03 2008-01-29 Intel Corporation Method and apparatus to process switch traffic
US7313140B2 (en) * 2002-07-03 2007-12-25 Intel Corporation Method and apparatus to assemble data segments into full packets for efficient packet-based classification
US7337275B2 (en) * 2002-08-13 2008-02-26 Intel Corporation Free list and ring data structure management
US7113985B2 (en) * 2002-10-15 2006-09-26 Intel Corporation Allocating singles and bursts from a freelist
US20040098602A1 (en) * 2002-11-18 2004-05-20 Microsoft Corporation Prerequisite rights
US7039054B2 (en) * 2002-11-19 2006-05-02 Intel Corporation Method and apparatus for header splitting/splicing and automating recovery of transmit resources on a per-transmit granularity
US6996639B2 (en) * 2002-12-10 2006-02-07 Intel Corporation Configurably prefetching head-of-queue from ring buffers
EP1611511A1 (en) * 2003-03-25 2006-01-04 Koninklijke Philips Electronics N.V. Method of addressing data in a shared memory by means of an offset
US7443836B2 (en) * 2003-06-16 2008-10-28 Intel Corporation Processing a data packet
US7240164B2 (en) * 2003-08-14 2007-07-03 Intel Corporation Folding for a multi-threaded network processor
US7441245B2 (en) * 2003-08-14 2008-10-21 Intel Corporation Phasing for a multi-threaded network processor
US7257665B2 (en) * 2003-09-29 2007-08-14 Intel Corporation Branch-aware FIFO for interprocessor data sharing
US20060277126A1 (en) * 2005-06-06 2006-12-07 Intel Corporation Ring credit management
US7360031B2 (en) * 2005-06-29 2008-04-15 Intel Corporation Method and apparatus to enable I/O agents to perform atomic operations in shared, coherent memory spaces

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106560791A (zh) * 2015-10-01 2017-04-12 阿尔特拉公司 高效虚拟i/o地址转换

Also Published As

Publication number Publication date
WO2006113570A3 (en) 2007-02-15
TW200705255A (en) 2007-02-01
US20060236011A1 (en) 2006-10-19
WO2006113570A2 (en) 2006-10-26

Similar Documents

Publication Publication Date Title
CN1869966A (zh) 环管理
JP3849951B2 (ja) 主記憶共有型マルチプロセッサ
CN1116643C (zh) 具有共享干预支持的非均匀存储器访问数据处理系统及方法
EP0817071B9 (en) A multiprocessing system configured to detect and efficiently provide for migratory data access patterns
US6816947B1 (en) System and method for memory arbitration
US6988170B2 (en) Scalable architecture based on single-chip multiprocessing
CN100461394C (zh) 具有双向环路互连的多处理器芯片
US8904154B2 (en) Execution migration
US10169087B2 (en) Technique for preserving memory affinity in a non-uniform memory access data processing system
CN1320464C (zh) 用于维持共享高速缓存一致性的方法和设备
US10545887B2 (en) Multiple linked list data structure
Grindley et al. The NUMAchine multiprocessor
JP4295814B2 (ja) マルチプロセッサシステム及びマルチプロセッサシステムの動作方法
GB2610015A (en) Cache for storing coherent and non-coherent data
Joe COMA-F: A non-hierarchical cache only memory architecture
KR20150132099A (ko) 서로 다른 계층 레벨의 메모리 노드를 가진 메모리 시스템에서의 데이터 캐싱
US7406554B1 (en) Queue circuit and method for memory arbitration employing same
Kuo et al. MP-LOCKs: replacing H/W synchronization primitives with message passing
Ros et al. Cache coherence protocols for many-core CMPs
Bilas et al. Supporting a coherent shared address space across SMP nodes: An application-driven investigation
Chaudhuri et al. Bandwidth-aware last-level caching: Efficiently coordinating off-chip read and write bandwidth
Kwon Co-design of on-chip caches and networks for scalable shared-memory many-core CMPs
Tsaliagos Design and Implementation of a Directory based Cache Coherence Protocol
Panicucci Wire delay effects reduction techniques and topology optimization in NUCA based CMP systems
Menezo et al. An adaptive cache coherence protocol: Trading storage for traffic

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication