CN101014937A - 用于多事件队列的中断管理 - Google Patents

用于多事件队列的中断管理 Download PDF

Info

Publication number
CN101014937A
CN101014937A CNA2005800107756A CN200580010775A CN101014937A CN 101014937 A CN101014937 A CN 101014937A CN A2005800107756 A CNA2005800107756 A CN A2005800107756A CN 200580010775 A CN200580010775 A CN 200580010775A CN 101014937 A CN101014937 A CN 101014937A
Authority
CN
China
Prior art keywords
event
event queue
peripheral hardware
incident
queue
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
Application number
CNA2005800107756A
Other languages
English (en)
Other versions
CN100474255C (zh
Inventor
史蒂夫·波普
大卫·里多克
于青
德里克·罗伯茨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Level 5 Networks Inc
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 Level 5 Networks Inc filed Critical Level 5 Networks Inc
Publication of CN101014937A publication Critical patent/CN101014937A/zh
Application granted granted Critical
Publication of CN100474255C publication Critical patent/CN100474255C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)
  • Communication Control (AREA)

Abstract

本发明提供了用于多事件队列的中断管理。一种用于对在主机子系统与外设之间的交互进行管理的方法。粗略地讲,外设向单个事件队列写入事件,结合该写入,还向中间事件队列写入唤醒事件。该唤醒事件标识了该单个事件队列。响应于对来自中间事件队列的唤醒事件的取出,主机子系统激活单个事件处理器,以耗用来自单个事件队列的事件。

Description

用于多事件队列的中断管理
技术领域
本发明涉及一种网络接口,更具体地,涉及使性能最佳化的基于队列的网络发送和接收机制。
背景技术
当通过诸如网络的数据通道在两个设备之间传送数据时,这些设备中的每一个都必须具有合适的网络接口,以允许它通过该通道进行通信。通常网络是基于以太网技术的。要通过网络进行通信的设备配备有能够支持网络协议的物理和逻辑要求的多个网络接口。将网络接口的物理硬件部分称为网络接口卡(NIC),尽管它们不一定采用卡的形式:例如,它们可以采用直接安装到主板上的集成电路(IC)和连接器的形式,或者采用与计算机系统的其他组件一起在单个集成电路芯片上制造出的宏单元的形式。
大多数计算机系统包括操作系统(OS),用户级应用通过操作系统与网络相通信。操作系统的一部分(已知为内核)包括多个协议栈,这些协议栈用于在NIC专用的应用和设备驱动器与用于直接控制NIC的设备驱动器之间进行命令和数据的转换。通过在操作系统内核中提供这些功能,可以从用户级应用中隐藏掉在多个NIC之间的复杂性和差异。此外,许多应用可以安全地共享网络硬件和其他系统资源(如存储器),并且可以针对有故障或恶意的应用来保护系统。
在典型的内核栈系统的操作中,硬件网络接口卡是在网络与内核之间的接口。在内核中,设备驱动器层直接与NIC相通信,而协议层与系统的应用级相通信。
NIC存储指向主存储器中的用于提供给内核的来达数据和待施加给网络的外发数据的缓冲区的指针。将这些指针称为RX数据环和TX数据环。NIC对表示RX缓冲区环上的内核要读取的下一数据的缓冲区指针进行更新。通过直接存储器存取(DMA)来提供TX数据环,并且NIC对表示已发送的外发数据的缓冲区指针进行更新。NIC可以利用中断向内核发送信号。
由内核从RX数据环中摘掉来达数据,依次对其进行处理。通常由内核本身来处理带外数据(out of band data)。通过指向应用专用端口所专用的缓冲区队列(其驻留在内核的私有地址空间中)的指针来添加要到该应用专用端口的数据。
在用于进行数据接收的系统操作中会发生以下步骤:
1.在系统初始化过程中,操作系统设备驱动器创建内核缓冲区并对NIC的RX环进行初始化,以指向这些缓冲区。还将来自配置脚本的OS的IP主地址通知给该OS。
2.一应用希望接收网络分组并典型地创建一套接字(a socket),该套接字被绑定到一端口,该套接字是驻留在操作系统内的队列状数据结构。对于给定的网络协议,该端口具有在主机内唯一的编号,使得可以将寻址到<主机:端口>的网络分组传送到正确的端口的队列。
3.分组到达网络接口卡(NIC)。该NIC通过主机I/O总线(例如,PCI总线)将该分组复制到由下一合法RX DMA环指针值指向的存储器地址。
4.要么没有可用的剩余DMA指针,要么达到了预指定超时,NIC断言I/O总线中断,以通知主机已传送了数据。
5.响应于该中断,设备驱动器检查所传送的缓冲区,如果该缓冲区含有合法的地址信息,如合法的主机地址,则将指向该缓冲区的指针传递给合适的协议栈(例如,TCP/IP)。在某些系统中,设备驱动器能够进行切换以轮询有限的时段,以试图减少中断次数。
6.协议栈确定是否存在合法的目的地端口,如果存在,则执行网络协议处理(例如生成对所接收到的数据的确认)并将该分组排入(enqueue)该端口的队列中。
7.OS可以指示(例如,通过进行再调度并设置“选择”位掩码中的位)应用一分组已到达所述端口被绑定到的网络端点上(通过将该应用标记为可运行的并调用调度器)。
8.应用例如通过执行recv()系统调用(提供缓冲区的地址和大小)从OS请求数据,同时在OS内核中,将数据从内核缓冲区复制到应用的缓冲区。在从该系统调用返回时,应用可以从应用缓冲区访问该数据。
9.在进行了复制(其通常发生在软中断的环境下)之后,内核会将内核缓冲区返回给空闲存储器的OS池。而且,在中断过程中,设备驱动器分配一新缓冲区并向DMA环添加一指针。按此方式,缓冲区从空闲池到应用的端口队列存在循环,并周而复始。
10.典型地,内核缓冲区位于物理RAM中,并且永远都不会被虚拟存储器(VM)系统调页出去(page out)。然而,可以将空闲池共享为所有应用的公共资源。
对于数据发送,会发生以下步骤:
1.操作系统设备驱动器创建用于进行发送的内核缓冲区,并对NIC的TX环进行初始化。
2.要发送数据的应用将该数据存储在应用缓冲区中,并例如通过执行send()系统调用(提供应用缓冲区的地址和大小)来请求由OS进行发送。
3.响应于该send()调用,OS内核将该数据从应用缓冲区复制到内核缓冲区中并应用合适的协议栈(例如TCP/IP)。
4.将指向含有该数据的内核缓冲区的指针置于TX环的下一空闲空隙(slot)中。如果没有可用空隙,则在内核中将该缓冲区排队,直到NIC例如通过中断指示一空隙已变得可用。
5.当NIC要处理该空隙时,NIC通过主机I/O总线利用DMA循环访问由该空隙的内容表示的内核缓冲区,然后发送该数据。
过去已经认识到,发送和接收操作均会涉及过多的数据移动。已经提出一些解决方案来减轻由这种数据移动所导致的性能劣化。例如,参见美国专利No.6246683,通过引用将其并入于此。在PCT国际公报No.WO2004/025477A2(通过引用将其并入于此)中,进一步认识到发送和接收操作均会涉及过多的环境切换,这也会导致显著的开销。其中对用于减少所需环境切换次数的技术进行了描述。
在其中所描述的机制中,使用事件队列来在主机系统与NIC之间对控制信息进行通信。当通过I/O总线(如通过PCI总线)将网络接口设备连接到主机系统时,需要在处理器与NIC之间对控制信息进行频繁的通信。典型地,由NIC发出的中断来启动控制通信,这导致环境切换。此外,该通信往往要求主机系统通过PCI总线从NIC读取控制信息或向NIC写入控制信息,并且这会导致总线瓶颈。该问题在数据分组往往很短的网络连接环境下尤其严重,使得所需控制工作量占总网络处理工作的百分比很大。
在该PCT公报中描述的实施例中,“端口”被视为绑定到应用的操作系统专用实体,具有地址码,并且可以接收消息。寻址到一端口的一个或更多个来达消息形成消息队列,由操作系统来处理该消息队列。操作系统先前已存储有在该端口与在该操作系统上运行的应用之间的绑定关系。由操作系统来处理用于一端口的消息队列中的消息,并由操作系统将这些消息提供给该端口所绑定的应用。操作系统可以存储端口到应用的多重绑定关系,使得通过指定合适的端口可以将来达消息施加给合适的应用。端口存在于操作系统内,使得无论对应的状态如何,都可以接收并安全地处理这些消息。
在操作系统的操作开始时,操作系统创建一队列以处理带外消息。可以由NIC对该队列进行写入,并且该队列可以具有与其相关联的中断。当一应用绑定于一端口时,操作系统创建该端口并将其与该应用关联起来。操作系统还创建一队列(事件队列),以处理仅用于该端口的带外消息。然后将用于该端口的带外消息队列存储映射到该应用的虚拟地址空间,使得不必进行内核环境切换就可以使事件退出队列(de-queue)。
将事件队列与NIC一起进行注册,并且在与各队列相关联的NIC上存在控制块(并将其映射到OS和应用中的任一个或这两者的地址空间中)。
图1例示了如在PCT公报中描述的带有控制块的队列。在所描述的实现中,将NIC161通过PCI总线110连接到主机系统中。将事件队列159存储在主机存储器160中,NIC161具有到主机存储器160的访问权。与事件队列159相关联的是读指针(RDPTR)162a和写指针(WRPTR)163a,其表示在该队列中接下来要读取和写入数据处的点。将指针162a存储在主机存储器160中。将指针163a存储在NIC161中。在NIC和存储器中的与原始指针不同的另一个中存储有指针的映射复本RDPTR162b和WRPTR163b。在该系统的操作中:
1.NIC161可以通过对本地存储的RDPTR与WRPTR进行比较来确定用于写入事件队列159中的可用空间。
2.NIC161生成带外数据并将其写入队列159。
3.当已写入数据时NIC161对WRPTR和WRPTR进行更新,使得在最后一个数据之后将写入下一数据。
4.应用通过对如从存储器160访问的RDPTR与WRPTR进行比较来确定用于读取的可用空间。
5.应用从队列159读取带外数据并对消息进行处理。
6.应用对RDPTR和RDPTR进行更新。
7.如果应用要求中断,则该应用(或者代表该应用的操作系统)设置控制块164的IRQ165a和IRQ165b位。将控制块存储在主机存储器160中并将其映射到NIC中的相对应的存储器上。如果进行了设置,则NIC还将在以上步骤3中生成中断。
事件队列机制通过在应用和OS已具有环境的同时不断允许它们对新事件进行轮询,有助于改进性能;通过只在需要时产生中断减少了环境切换。还减少了总线瓶颈,因为主机系统可以从现在在主机存储器中的事件队列中的事件中更频繁地取出控制信息,而不是从NIC直接通过PCI总线取出控制信息。
然而,对事件队列的使用并没有完全消除中断和环境切换。在常规事件队列布置中,外设断言事件队列的事件,然后引起一中断以激活事件处理器。然后该外设使它自己不能进一步进行中断,直到主机确认了所述中断。外设可以继续断言事件队列的事件,但是不断言其他中断。对于主机事件处理器,其进入一循环,在该循环中,其重复地处理队列中的事件,直到其相信该队列是空的。在此过程中(在没有新中断的情况下)外设可以断言队列的其他事件,并且主机事件处理器在失活之前将处理这些事件,只要这些事件在主机事件处理器确定队列是空的之前到达。可能由于其他原因会发生其他环境切换,但是不会由于来自外设的中断而发生环境切换。仅当主机事件处理器确定队列是空的时,它才对中断进行确认并使之失活。响应于该中断确认,外设再使能中断,使得它可以连同它的下一断言事件一起产生新的中断。
在对单个事件队列的管理中,与其中针对每个事件断言新中断的系统相比,以上方法可以减少中断颤动(interrupt chatter)。但是在一个或更多个外设可以向一个以上的事件队列中断言事件的情况下会产生其他问题。以上机制可以减少针对多个事件队列中的各单个队列断言的中断次数,但是无助于减少在所有事件队列上断言的中断次数。
在希望所述多个事件队列中的一些是用户级队列(在用户地址空间中运行的驱动器的控制下)的情况下会产生其他甚至更重要的问题。在于2004年4月21日提交的标题为“User-Level Stack”的英国专利公报No.GB0408876A0中描述了这种结构,通过引用将其并入于此。在这种架构中,可以支持多个协议栈,每个协议栈都具有它自己的发送和接收数据结构组,并且均由在NIC上的硬件中执行的功能所辅助。但是由于这些驱动器运行在用户地址空间中,因此它们根本不能接收中断。希望找到支持用户级栈的事件队列的方式,具有当事件队列为空时阻断驱动器而在事件队列含有事件时唤醒驱动器的能力,以再次使环境切换达到最少。
发明内容
根据本发明一实施例,粗略地讲,使用中间事件队列(其为中断事件)对在多个单个事件队列(它们不一定是中断队列)之间的中断进行协调。当向所述多个单个事件队列中的一个断言一事件时,所述外设不产生中断。相反,如果被使能了,当向所述多个单个事件队列中的一个断言一事件时,它还向所述中间事件队列断言一附加事件(这里被称为“唤醒”事件)。所述唤醒事件标识了其处理器需要激活的所述单个事件队列。然后,在所述设备断言标识该单个事件队列的另一唤醒事件之前,它等待唤醒事件请求。连同向所述中间事件队列断言所述唤醒事件,所述外设不断言中断以激活所述中间队列事件处理器,而同样仅在被使能时才断言中断。连同向所述中间事件队列断言其他唤醒事件(可选地,也可以是其他事件),所述设备然后立即禁用或抑制对所述主机的其他中断。虽然不再向标识第一单个事件队列的所述中间事件队列断言其他唤醒事件,但是还可以向标识其他单个事件队列的所述中间事件队列断言唤醒事件;连同对那些唤醒事件进行断言,对中断的抑制会防止所述设备中断所述主机。
来自所述外设的中断使得所述主机激活它的中间队列事件处理器。与常规结构类似,该事件处理器进入如下循环:它循环地对所述中间事件队列中的事件进行处理,直到它相信所述队列是空的。在此过程中,所述外设可以向所述中间队列断言其他唤醒事件,而不产生新的中断,并且所述主机中间队列事件处理器将在失活之前处理它们,只要它们在所述主机中间队列事件处理器确定所述队列是空的之前到达。仅当所述主机中间队列事件处理器确定所述事件是空的时,它才确认所述中断并使之失活。响应于所述中断确认,所述外设再使能中断,使得它可以连同下一断言唤醒事件一起产生新的中断。
当所述主机中间队列事件处理器从所述中间队列事件队列中取出用户事件队列唤醒事件时,它进行到激活负责在所述队列唤醒事件中标识的事件队列的主机事件处理器。然后该处理器循环地对该单个事件队列中的事件进行处理,直到它相信该单个队列是空的。在此过程中所述外设可以向所述单个事件队列中断言附加事件,而不产生新的中断并且不断言新的唤醒事件,并且所述主机单个队列事件处理器将在失活之前处理它们,只要它们在所述主机单个队列事件处理器确定所述单个事件队列是空的之前到达。仅当所述主机单个队列事件处理器确定所述事件是空的时,它才确认所述唤醒事件并失活。所述唤醒事件确认充当对新唤醒事件的请求,以使能所述外设来连同下一断言事件一起产生新的唤醒事件。
可以看到,通过向用于协调中断的中间驱动器发送唤醒事件而提供的附加间接层不仅有助于单个地使各事件队列的中断最少化,而且有助于总体地使所有事件队列的中断最少化。此外,所述附加间接层使得可以支持用户级栈的事件队列,使所述驱动器具备如下能力:当所述事件队列是空的时,进行阻断;而当所述事件队列含有事件时,被唤醒,以使环境切换达到最少。
另外,在其中所述主机检测到事件队列空状况然后通知所述外设再使能它的能力以激活所述主机事件处理器的任何结构中,可能出现竞争状况,在该竞争状况中,在所述主机检测到所述空状况之后但是在所述外设接收到所述通知之前,所述外设向所述事件队列断言一个或更多个附加事件。如果出现了该竞争状况,则所述主机将使其事件队列处理器失活,相信它是空的,但是外设不唤醒所述主机事件队列处理器,相信所述主机的如下通知的准确性:已经处理了所述外设在此之前已断言的所有事件。
为了避免该竞争状况,粗略地讲,所述主机对单个事件队列空状况的通知具有以下形式:所述主机向所述外设写入它的当前主机中心单个事件队列读指针。所述外设将该读指针与同一事件队列的它自己的设备中心写指针进行比较。如果这两者相等,则未出现竞争,并且所述外设简单地再使能它对标识所述特定单个事件队列的唤醒事件的断言。然而,如果这两者不相等,则出现了竞争。那么所述外设并不再使能它对唤醒事件的断言,而是向所述中间事件队列断言标识所述特定单个事件队列的新唤醒事件。然后,在所述主机检测到所述空状况之后但是在所述外设接收到所述通知之前,所述单个事件队列的所述主机处理器可以处理所述外设断言的事件。
类似地,为了避免针对所述中间事件队列产生的类似的竞争状况,所述主机对所述中间事件队列空状况的通知具有以下形式:所述主机向所述外设写入它的当前主机中心中间事件队列读指针。所述外设将该读指针与所述中间事件队列的它自己的设备中心写指针进行比较。如果这两者相等,则未出现竞争,并且当接着向所述中间事件队列断言唤醒事件(或其他事件)时所述外设简单地再使能它对中断的断言。如果这两者不相等,则所述外设相反地断言一新中断,以再激活用于所述中间事件队列的处理器。然后,在所述主机检测到所述空状况之后但是在所述外设接收到所述通知之前,所述主机处理器可以处理所述外设向所述中间事件队列断言的事件。
附图说明
针对本发明的多个具体实施例对本发明进行描述,并且将参照附图,在附图中:
图1是带有如在PCT国际公报No.WO2004/025477A2中描述的控制块的队列的框图。
图2是结合有本发明的多个特征的典型计算机系统的简化框图。
图3例示了根据本发明的发送队列的简化实施例。
图4例示了根据本发明的接收队列的简化实施例。
图5、6以及7是例示了使用图3的结构执行的功能的流程图。
图8到11和15是例示了用于使用图4的结构执行的功能的流程图。
图12是结合有本发明的多个方面的另一系统的简化框图。
图13是由支持发送队列的图12的系统使用的特定数据结构的框图。
图14是由支持接收队列的图12的系统使用的特定数据结构的框图。
具体实施方式
为了使得本领域的任何技术人员能够实现并使用本发明,给出了以下描述,并且以下描述是在特定应用及其要求的情况下提供的。本领域的技术人员容易想到对所公开的实施例的各种修改,并且在不脱离本发明的精神和范围的情况下可以将这里限定的总体原理应用于其他实施例和应用。由此,本发明并不限于所示出的多个实施例,而是包括与这里所公开的原理和特征相一致的最宽的范围。
图2是可以通过网络212与诸如230、232以及234的其他计算机系统相通信的典型计算机系统210的简化框图。计算机系统210包括通过通信通道218与主机子系统214相通信的网络接口卡(NIC)216。主机子系统214包括处理器子系统220(其包括至少一个处理器)、主机存储器子系统222以及核心逻辑子系统224。核心逻辑子系统224提供在处理器子系统220、主机存储器子系统222以及通信通道218之间的桥。主机子系统214还可以包括与通信通道218相通信的其他设备226。
网络接口卡216提供与外部网络的接口,包括到网络212的接口,并通过网络212耦合到其他计算机系统中的对应接口设备。网络212可以包括许多互连的计算机系统和通信链路。这些通信链路可以是有线链路、光学链路、无线链路或用于对信息进行通信的任何其他机制。尽管在一个实施例中网络212是因特网,但是在其他实施例中,网络212可以是任何合适的计算机网络或多个网络的组合。在这里描述的实施例中,网络212支持以太网协议。
主机存储器子系统222通常包括多个存储器,这些存储器包括用于在程序执行过程中存储指令和数据的主随机存取存储器(RAM),和其中存储有固定指令和数据的只读存储器(ROM)。在主机存储器子系统222中还可以包括一级或更多级的高速缓存。为了简化讨论,这里有时将主机存储器子系统222简称为“主机存储器”。
通信通道218提供了用于允许计算机系统210的各种组件和子系统相互进行通信的机制。在一个实施例中,通信通道218包括PCI总线。其他实施例可以包括其他总线,还可以包括多重总线。
计算机系统210本身可以是变化的类型,包括个人计算机、便携式计算机、工作站、计算机终端、网络计算机、电视、大型机、服务器或任何其他数据处理系统或用户设备。由于计算机和网络的不断变化的性质,因此对图1所示的计算机系统210的描述仅作为用于例示本发明一实施例的具体示例。计算机系统210的许多其他配置可以具有更多或更少的组件,并具有与图1所示的计算机系统类似或不同的配置。
数据结构,简化实施例
图3和4例示了被并入于图2的计算机系统210中的本发明的简化实施例。在图3的实施例中,仅示出了带有相关联的结构的单个发送队列,在图4的实施例中,仅示出了带有相关联的结构的单个接收队列。在典型实现中包括有发送和接收队列,但是可以单独地在各队列中实现本发明的多个方面。图3和4仅示出了主机存储器子系统222和网络接口卡216,只有这些组件内的结构与本讨论有关。
首先参照图3,将发送队列存储在主机存储器222中的一系列发送数据缓冲区310中。在主机存储器222中这些发送数据缓冲区可以是不连续的,并且通过发送缓冲区链表312将这些发送数据缓冲区链接起来。主机子系统214将发送数据缓冲区描述符写入发送缓冲区链表312中的由主机存储器222中的缓冲区链表写指针314指向的位置处,并且NIC216从发送缓冲区链表312中的由NIC216上的(与主机存储器222中的缓冲区链表读指针316相对应的)缓冲区链表读指针326指向的位置处读取发送缓冲区描述符。发送缓冲区链表312是“环绕”链表,意思是指针连续地递增,然后链表的末端按环状方式自动环绕到起始。如果链表具有例如N个条目,可以说读和写指针递增“模N”。还可以说指针“模数递增”,这暗含了链表的长度。
与发送缓冲区链表312和发送数据缓冲区310相关联的还有发送事件队列318,它也是个环绕结构。将事件写入到发送事件队列318中的由NIC216上的发送事件队列写指针332标识的位置处,并由主机子系统214从该发送事件队列中的由主机存储器222中的发送事件队列读指针320标识的位置处读取事件。只要有可能,图2的系统就使用事件而非中断作为硬件状态报告方法。为了改进事件递送潜伏期和整体总线效率,由NIC216将事件写出到主机存储器222中,而不是由主机子系统214从NIC216中的位置读取事件。
这里将指向发送缓冲区链表312中的读指针314和写指针316称为是“主机中心”的,因此它们表示如由主机子系统214观察到的队列状态。在各种实施例中,主机子系统214可以将这些指针进行比较,以根据在该实施例中对于队列深度管理需要什么来检测队列溢出状况、队列充满状况或队列高或低水线(watermark)状况。NIC216还保持有分别指向发送数据队列310中的写指针324和读指针326,如下所述。将NIC上的写指针324和读指针326称为“设备中心”指针,因为它们表示如由NIC设备216观察到的队列状态。按常规方式,主机子系统使用它的主机中心缓冲区链表写指针314向发送缓冲区链表312进行写入,在进行了写入之后使主机中心缓冲区链表写指针314模数递增,并通知NIC更新它的设备中心缓冲区链表写指针324。类似地,NIC使用它的设备中心缓冲区链表读指针326从发送缓冲区链表312进行读取,在进行了读取之后使设备中心缓冲区链表读指针326模数递增,并通知主机子系统214更新它的主机中心缓冲区链表读指针316。由此,尽管尽力使得主机中心缓冲区链表读指针与设备中心缓冲区链表读指针、主机中心缓冲区链表写指针与设备中心缓冲区链表写指针相同步,但是可能存在其中各对中的两个指针并不完全匹配的某个时间点。重要的是,在该简化实施例中,主机子系统214不保持发送事件队列写指针332的主机中心复本。NIC216确实保持有发送事件队列读指针320的设备中心复本344,但是它并不是用于事件队列深度管理的。相反地,如下更详细地描述的,它是用于管理对主机子系统的中断的生成以激活发送事件处理器。
NIC216还包括将设备中心发送事件队列写指针332中的值与设备中心发送事件队列读指针344中的值进行比较的比较器346。当这两个值不相等时,比较器346的输出是有效的。NIC216还包括中断使能寄存器位348和逻辑350,当中断使能寄存器位348和比较器346的输出均有效时逻辑350触发中断发生器352。以下对中断发生组件的操作进行描述。
NIC216以及已经提及的组件还保持有发送FIFO340,NIC216将它从发送数据缓冲区310取出的发送数据写入发送FIFO340中。由物理网络接口(PHY)342将从发送FIFO340输出的数据驱动到网络212上。
网络接口卡216通过I/O总线218(及其他手段)与主机存储器222相通信。优选地,I/O总线218是PCI总线,更优选地PCI的版本是PCIexpress。在PCI Special Interest Group的“PCI Express Base Specification1.0a”(April 15,2003)中描述了PCI express,通过引用将其并入于此。通过核心逻辑子系统224使用直接存储器存取(DMA)协议、经由I/O总线218对大部分数据(包括来自发送数据缓冲区310的发送数据)进行通信,尽管在主机子系统214与NIC216之间的某些通信可以涉及处理器子系统220。
现在参照图4,类似于发送队列,将接收队列存储在主机存储器222中的一系列接收数据缓冲区410中。通过环绕接收缓冲区链表412将这些接收数据缓冲区链接起来。当主机子系统214希望使得附加缓冲区可用于接受接收数据时,它将新接收数据缓冲区的标识写入接收缓冲区链表412中的由主机存储器222中的主机中心缓冲区链表写指针414指向的位置处。NIC216从接收缓冲区链表412中的由NIC216上的(与主机存储器222中的主机中心缓冲区链表读指针416相对应的)设备中心缓冲区链表读指针426指向的位置处读取接收缓冲区描述符。
与接收缓冲区链表412和接收数据缓冲区410相关联的还有环绕接收事件队列418。将事件写入到接收事件队列418中的由NIC216上的接收事件队列写指针432标识的位置处,并从该接收事件队列418中的由主机存储器222中的接收事件队列读指针420标识的位置处读取事件。对于发送事件队列读指针和写指针,按常规的方式,主机子系统使用它的主机中心缓冲区链表写指针414向接收缓冲区链表412进行写入,在进行了写入之后使主机中心缓冲区链表写指针414模数递增,并通知NIC更新它的设备中心缓冲区链表写指针424。类似地,NIC使用它的设备中心缓冲区链表读指针426从接收缓冲区链表412进行读取,在进行了读取之后使设备中心缓冲区链表读指针426模数递增,并通知主机子系统214更新它的主机中心缓冲区链表读指针416。重要的是,在该简化实施例中,主机子系统214不保持接收事件队列写指针432的主机中心复本。如在发送端那样,NIC216确实保持有接收事件队列读指针420的设备中心复本444,但是它是用于管理对主机子系统的中断的生成以激活接收事件处理器,而不是用于事件队列深度管理。
NIC216还包括将设备中心接收事件队列写指针432中的值与设备中心接收事件队列读指针444中的值进行比较的比较器446。当这两个值不相等时,比较器446的输出是有效的。NIC216还包括中断使能寄存器位448和逻辑450,当中断使能寄存器位448和比较器446的输出均有效时逻辑450触发中断发生器452。
NIC216以及图3的发送设备和上述接收端组件还保持有接收FIFO440,NIC216将它从PHY342接收的数据写入接收FIFO440中。NIC216根据接收缓冲区链表412的当前条目将从接收FIFO440输出的数据写入接收数据缓冲区410中。
发送队列操作,简化实施例
在操作中,许多不同的功能并发地操作。图5、6以及7是例示了使用图3的结构为了发送数据而执行的功能的流程图。对于这里的所有流程图,应当理解,可以对这些流程图中的许多步骤进行组合,可以并行地执行或在不影响所实现的功能的情况下按不同的次序来执行这些步骤。此外,尽管这里将这些功能描述为按不同的“模块”来执行,但是应当理解,如果存在的话,实际实现并不一定要按相同的方式来“模块化”。
在图5中,主机发送事件管理模块从更高级软件接收到一指示:发送数据缓冲区310中的一个或更多个新缓冲区等待发送(步骤510)。还可以在轮询循环或定时器到期时定期地激活该模块(步骤512)。在步骤515中,主机子系统214确定数量“M”,其为待推发的发送数据缓冲区的数量。
在步骤518中,确定M大于还是等于某个最小阈值。在一个实施例中,该阈值为1,这意味着只要新发送数据缓冲区准备好进行发送并且在发送事件队列318中存在任何可用空间就许可发送事件队列318的事件。然而,逐个地许可事件会对I/O总线218增加显著的额外开销,因此在更优选的实施例中,选择较大的数作为该阈值。如果M小于该阈值,则主机发送事件队列管理模块500仅仅变得不活动,以等待下一激活事件(步骤530)。
如果M大于或等于该最小阈值,则在步骤522中主机子系统214将其主机中心缓冲区链表写指针314更新(模数递增)M个条目。在步骤524中,以先前(在步骤522之前)由主机中心缓冲区链表写指针314指定的条目为起点,主机子系统214将M个待(ready)发送数据缓冲区描述符写入发送缓冲区链表312中。在步骤526中,主机子系统214将所更新的写指针通知给NIC216,在步骤528中,NIC216更新它自己的设备中心缓冲区链表写指针324。在一个实施例中,将步骤526与528组合成单个步骤,在该步骤中,主机子系统214将所更新的写指针写入设备中心发送缓冲区链表写指针324的存储器映射位置中。
在步骤530中,主机发送事件队列管理模块变得不活动,以等待下一激活事件。
图6是例示了在NIC216上发起的用于将数据发送到网络212上的功能的流程图。在TX FIFO低水线(LWM)状况610上激活NIC发送数据模块600。在通过轮询循环进行选择时或定时器到期时也定期地激活该模块(步骤612)。
在步骤620中,NIC216首先确定在发送缓冲区链表312中并且待取出的发送数据缓冲区描述符的数量。通过从设备中心缓冲区链表写指针324模数减去设备中心缓冲区链表读指针326,来进行该确定。NIC还根据它自己的指向TX FIFO340中的读和写指针知道在它自己的TX FIFO340中的可用空间。在步骤622中,NIC确定待发送缓冲区描述符的数量和TX FIFO340中的可用空间中的较小者M。因此M是当前可以被复制到TX FIFO340中的发送数据缓冲区描述符的数量。
在步骤626中,NIC216进行到以由设备中心缓冲区链表读指针326表示的条目为起点从发送缓冲区链表312中读取M个缓冲区描述符。在步骤628中,NIC从主机存储器中的发送数据缓冲区310中的由缓冲区描述符标识的缓冲区取出数据。由于通过DMA经由I/O总线218执行从发送数据缓冲区310的数据取出,因此这里有时将发送缓冲区描述符称为DMA描述符或DMA命令。对M个缓冲区描述符本身的取出也是通过DMA经由I/O总线218来执行。
注意,在不同的实施例中,对M个缓冲区描述符的读取可以与对发送数据的读取相交织或按流水线式进行,而不是作为独立的原子步骤(atomic step)来执行。还要注意的是,从由已存在于FIFO340中的缓冲区描述符标识的发送数据缓冲区中取出数据不是等到低水线或阈值数量的缓冲区进行取出。只使从发送缓冲区链表312中对缓冲区描述符的取出延迟,以进行批处理;并且如果NIC216处理完了待发送数据,也不为了进行批处理而使这些描述符延迟。
在步骤630中,NIC对设备中心缓冲区链表读指针326进行更新。在一实施例中,NIC216不对相对应的主机中心缓冲区链表读指针316显式地进行更新,因为由于完成事件递送的结果,隐式或显式地进行通知。
在图6的实施例中,每个发送完成事件都可以表示多个数据缓冲区完成。除了在某些下述更不常见的情况下以外,由每个发送完成事件表示的数据缓冲区完成的数量是可编程的,因而是固定数量B。
在步骤642中,NIC对N与B进行比较,N是表示除在先前写入发送事件队列318中的批处理发送完成事件中已报告的那些发送缓冲区以外的已从主机存储器中取出的发送缓冲区的数量的值。如果N<B,则NIC发送数据模块600仅仅变得不活动,以等待下一激活事件(步骤644)。另一方面,如果在步骤642中N>=B,则在步骤646中,以由设备中心发送事件队列写指针标识的条目为起点,NIC216将表示B个发送数据缓冲区的整数倍(总共)的批处理发送完成事件写入发送事件队列318中。因此在步骤646中写入的批处理发送完成事件的数量是N/B的整数部分,并且不将任何余数报告给主机子系统214,直到下一次写入这种完成事件时。
在一实施例中,NIC确定N=B,并且只要NIC的设备中心缓冲区链表写指针324是B的整数倍就写入批处理发送完成事件。
注意,当完成了将数据从主机存储器222传送到发送FIFO340中时,NIC216将发送完成事件写入发送事件队列318中。它不进行等待,直到将数据实际发送到网络212上,这是因为通常更高级应用软件对发送错误不感兴趣。另一实施例不将‘发送完成’通知给主机子系统,直到在将数据发送到网络上的处理中发生了随后步骤,例如网络接口设备完成了将数据发送到网络上。如这里使用的,如果在特定实施例中对这种下游步骤的通知意味着NIC已经完成了从发送数据缓冲区中取出数据,则将这种通知视为“包括”如下步骤,即,向主机子系统通知:网络接口设备完成了从发送数据缓冲区中取出数据。
如果在步骤646中将任何发送完成事件写入发送事件队列318中,则在步骤634中NIC216相应地更新它自己的发送事件队列写指针。在步骤634中对设备中心发送事件队列写指针332的更新可能会导致产生一中断(步骤636)以激活参照图7讨论的主机发送事件处理器。如可以从图3中的逻辑看到的,如果设备中心发送事件队列写指针332先前等于设备中心发送事件队列读指针344,则在步骤634中进行的更新会导致比较器346进行输出以过渡到活动状态。如果在出现该情况时中断使能位348是有效的,则中断发生器352将产生中断。如果在步骤634中进行更新时所述读写指针先前不相等,则不会产生新的中断,因为比较器346输出将已经处于活动状态。注意,在某些情况下对写指针332的更新会导致比较器346过渡到不活动状态,尤其是如果该写指针已绕回并且就要追上读指针。但是这不是逻辑350需要处理的情况,因为,如下所述,将算法设计成使得如果出现了该情况则中断使能位348总是不活动的。
在步骤636之后,NIC发送数据模块600失活(步骤644)。
图7是例示了主机发送事件处理器模块700的相关功能的流程图。要么在接收到中断时(步骤710)、要么在步骤636(图6)中产生中断时、要么在通过轮询循环定期地进行选择时、要么在定时器到期时(步骤712)激活模块700。
在步骤720中,主机子系统214在事件队列中的由发送事件队列读指针320指定的位置处取出事件描述符。如果该新事件处于清空状态(步骤722),则发送事件队列318还不是空的。在步骤726中,确定新事件是否为发送完成事件。在一个实施例中,发送事件队列318不能含有除发送完成事件以外的任何事件,但是在另一实施例中它可以如此。由此,如果当前事件是除发送完成事件以外的事件,如管理事件,则在步骤728中对其进行处理。
如果当前事件是发送完成事件,则在步骤730中,主机子系统214使发送缓冲区链表312的主机中心缓冲区链表读指针316模数递增在当前发送完成事件中表示的缓冲区数量。这是主机子系统214借以知道NIC216已经更新了它自己的设备中心缓冲区链表读指针326的机制。然而,在一实施例中,NIC可以在发送完成事件中显式地指定它的已更新设备中心缓冲区链表读指针326。可以使用后一机制来替代前一机制,或者连同前一机制一起使用后一机制。
而且,在步骤730中,一旦主机已经使主机中心缓冲区链表读指针316递增得超过了特定发送数据缓冲区描述符,它还将所标识的发送缓冲区释放回池中。最终,在更高级软件使用新数据再填充了该缓冲区之后,主机会将数据缓冲区描述符再写入发送缓冲区链表312中以再次使其入队,以通过NIC216进行发送。
在步骤732中,主机子系统214清除发送事件队列318中的由当前发送事件队列读指针标识的位置处的事件描述符,在步骤734中,主机子系统214使发送事件队列读指针320模数递增。然后该模块返回到步骤720以取出下一事件描述符,依此类推,直到取出一清空的条目然后该模块变得不活动(步骤724)。
如果在步骤722中确定所取出的下一事件描述符是清空的,则发送事件队列318此时不再含有其他待处理事件。在步骤723中,如果主机中心发送事件队列读指针320已发生了变化,则作为如以下更详细地描述的一种管理事件队列中断的手段,主机将所更新的指针值写入NIC的设备中心发送事件队列读指针中。然后在步骤724中主机发送事件处理器700变得不活动。
接收队列操作,简化实施例
图8到11是例示了用于使用图4的结构接收数据而执行的功能的流程图。接收队列操作在许多方面与如上所述的发送队列操作是类似的,因此这里将略去已经描述的操作的某些方面。在图8中,主机接收事件管理模块从更高级软件接收如下指示:接收数据缓冲区410中的新数据缓冲区是空的并且可用于接收数据(步骤811)。还响应于主机对接收缓冲区链表空事件的接收而激活该模块(步骤810)。还可以在轮询循环或定时器到期时定期地激活该模块(步骤812)。在步骤815中,主机子系统214确定数量‘M’,其为待推(push)的数据缓冲区的数量。
在步骤818中,确定M大于还是等于某个最小阈值。优选地,该最小阈值为1,但是在其他实施例中选择较大的数量作为该阈值。如果M小于该阈值,则主机接收事件队列管理模块800仅仅变得不活动,以等待下一激活事件(步骤830)。
如果M大于或等于最小阈值,则在步骤822中,主机子系统214将其主机中心缓冲区链表写指针414更新(模数递增)M个条目。在步骤824中,以先前(在步骤822之前)由主机中心缓冲区链表写指针414指定的条目为起点,主机子系统214将M个可用接收数据缓冲区描述符写入接收缓冲区链表412中。在步骤826中,主机子系统214将所更新的写指针通知给NIC216,在步骤828中,NIC216更新它自己的设备中心缓冲区链表写指针424。在一个实施例中,将步骤826与828组合成单个步骤,在该步骤中,主机子系统214将所更新的写指针写入设备中心接收缓冲区链表写指针424的存储器映射位置中。
在步骤830中,主机接收事件队列管理模块变得不活动,以等待下一激活事件。
图9是例示了当从网络212接收到数据时在NIC216上发起的功能的流程图。将来达数据置于RX FIFO440中,当达到高水线时,激活NIC接收数据模块900(步骤910)。与发送端不同,NIC216不将固定数量个接收数据缓冲区完成批处理到各接收完成事件中。然而,在一个实施例中,它确实进行等待,以在一分组完成时断言单个接收完成事件,即使该分组占据一个以上接收数据缓冲区。
在步骤912中,NIC216取出下一接收缓冲区的描述符,并从由设备中心缓冲区链表读指针426指定的接收缓冲区链表412的条目起进行偏移。在步骤914中,NIC216对它的设备中心缓冲区链表读指针进行更新(模数递增)。此时NIC不将新的读指针通知给主机214,因为如下所述将通过事件递送隐式或显式地进行该通知。
在步骤916中,以所指定的偏移量为起点,NIC216将来自来达分组的数据写入由所取出的描述符指定的接收数据缓冲区中。通过DMA继续进行写入,直到达到当前数据缓冲区的末端或达到来达数据分组的末端,或这两者。
在步骤920中,NIC确定是否达到了分组末端。若否,则NIC接收数据模块900返回到步骤912,以取出下一接收数据缓冲区的描述符。在本实施例中不断言任何事件以表示“接收数据缓冲区已满”。基于在接收缓冲区链表412中以主机中心RX队列读指针为起点的连续标识的多个接收数据缓冲区,主机214将变得知道哪个接收数据缓冲区是满的。
如果步骤920确定已达到分组末端,则在步骤922中NIC216断言一接收完成事件,以覆盖含有来自分组的数据的所有接收数据缓冲区。注意,在本实施例中,即使分组数据跨过接收数据缓冲区410中的多个缓冲区,也只断言一个接收完成事件。由接收缓冲区链表412中的多个连续条目将多个缓冲区链接在一起。还要注意,如果分组末端与接收缓冲区的末端不相一致,则保留缓冲区中的剩余空间,而不使用它。
主机(在一个实施例中)知道由接收完成事件覆盖的接收数据缓冲区是由在接收缓冲区链表412中的描述符标识的、以由主机中心缓冲区链表读指针416指向的条目为起点并在由主机中心缓冲区链表写指针414指向的条目之前终止的那些接收数据缓冲区。在另一实施例中,通过在接收完成事件描述符格式中包括一附加字段以含有如在步骤914中由NIC216更新的设备中心缓冲区链表读指针426的复制,可以避免竞争状态。然后主机可以将由接收完成事件覆盖的接收数据缓冲区确定为由接收缓冲区链表412中的多个描述符标识的、在如在接收完成事件中报告的主机中心缓冲区链表读指针416与设备中心缓冲区链表读指针之间的那些接收数据缓冲区。
在还一实施例中,NIC支持一个以上网络端口。该实施例不对接收完成事件进行批处理。该实施例支持标准大小数据分组(其中数据分组具有相对小的最大长度并且所述多个接收数据缓冲区至少与该最大数据分组长度一样大)和“特大”数据分组(其中数据分组可以更长并且可以跨过一个以上数据缓冲区)。给定的接收队列要么是标准模式的要么是特大模式的。如果该队列是标准模式的,则不存在错误,每个已充满接收数据缓冲区都将含有一分组末端,因此没有接收完成事件会表示一个以上数据缓冲区的完成,因而不会出现问题。如果队列是特大模式的,则仍然没有接收完成事件会表示一个以上数据缓冲区的完成,因为对于NIC填充的每个数据缓冲区,它写入一接收完成事件。该接收完成事件格式包括“RX_Jumbo_Cont”位,NIC设置该位以通知主机子系统:主体数据缓冲区不含有分组末端(即,将存在延续缓冲区)。接收完成事件还包括NIC的已更新设备中心缓冲区链表读指针426的复本,该指针现在指向来自通信接收缓冲区链表412的特定描述符,对于该特定描述符的数据缓冲区,所述事件表示填满。接收完成事件格式还表示从其接收了分组的NIC端口号。
回到图9的实施例,在步骤922之后,一旦NIC已经断言一接收完成事件,NIC接收数据模块900就回到不活动状态(步骤926)。
在步骤922中,NIC断言含有特定信息的接收完成事件。图10是该步骤的流程图详情。在步骤1010中,以由设备中心接收事件队列写指针标识的条目为起点,NIC216将该接收完成事件写入接收事件队列418中。在步骤1012中,NIC216相应地更新它自己的接收事件队列写指针。
同在发送端一样,在步骤1012中对设备中心接收事件队列写指针432的更新可能会导致产生一中断(步骤1014)以激活参照图11讨论的主机接收事件处理器。如可以从图4中的逻辑看到的,如果设备中心接收事件队列写指针432先前等于设备中心接收事件队列读指针444,则在步骤634中进行的更新会导致比较器446进行输出以过渡到活动状态。如果在出现该情况时中断使能位448是有效的,则中断发生器452将产生中断。如果在步骤634中进行更新时所述读写指针先前不相等,则不会产生新的中断,因为比较器446输出将已经处于活动状态。同发送端一样,逻辑450需要处理其中对写指针432的更新导致比较器446过渡到不活动状态的情况,因为将算法设计成使得如果出现了该情况则中断使能位448总是不活动的。
图11是例示了主机接收事件处理器模块1100的相关功能的流程图。要么在接收到中断时(步骤1110)、要么在步骤1014(图10)中产生中断时、要么在通过轮询循环定期地进行选择时、要么在定时器到期时(步骤1112)激活模块1100。
在步骤1120中,主机子系统214在事件队列中的由接收事件队列读指针420指定的位置处取出事件描述符。如果该新事件不处于清空状态(步骤1122),则接收事件队列418此时含有待处理事件。在步骤1126中,确定该新事件是否为接收完成事件。在一个实施例中,接收事件队列418不能含有除接收完成事件以外的任何事件,但是在另一实施例中它可以如此。由此,如果当前事件是除接收完成事件以外的事件,如管理事件,则在步骤1128中对其进行处理。
如果当前事件是接收完成事件,则在步骤1148中,主机214对新接收的分组数据进行处理。这可能需要将由多个连续接收缓冲区链表条目指定的几个接收数据缓冲区顺序地链接起来。主机214根据接收缓冲区链表412中的由主机中心缓冲区链表读指针416指向的缓冲区描述符知道分组的起始缓冲区和偏移量,并且根据在接收完成事件中标识的接收分组字节计数或者根据在接收完成事件中可能包括的设备中心缓冲区链表读指针426的复本,知道分组的终点。在处理了这些缓冲区中的分组数据之后,主机可以将这些缓冲区释放回池中,以最终将它们再写入接收缓冲区链表412中以由不同的来达分组数据来再使用。
在步骤1150中,如果更高级软件被如此地设计,则主机子系统214可以使用新的可用接收数据缓冲区的描述符对由主机中心缓冲区链表读指针416指向的接收缓冲区链表412条目进行再编程,并且可以针对如下条目进行同样的处理:所有连续的后续接收缓冲区链表条目,直到但不包括指向下一接收分组的数据的起点的接收缓冲区链表条目。在步骤1130中,主机子系统214使接收缓冲区链表412的主机中心缓冲区链表读指针416模数递增在当前接收完成事件中表示的缓冲区数量。这是主机子系统214借以知道NIC216已经更新了它自己的设备中心缓冲区链表读指针426的机制。然而,在一实施例中,NIC可以在接收完成事件中显式地指定它的已更新设备中心缓冲区链表读指针426。可以使用后一机制来替代前一机制,或者连同前一机制一起使用后一机制。
在步骤1132中,主机子系统214清除接收事件队列418中的由当前接收事件队列读指针标识的位置处的事件描述符,在步骤1134中,主机子系统214使接收事件队列读指针420模数递增。然后该模块返回到步骤1120以取出下一事件描述符,依此类推,直到取出一清空的条目然后该模块变得不活动(步骤1124)。
如果在步骤1122中确定所取出的下一事件描述符是清空的,则接收事件队列418此时不再含有其他待处理事件。在步骤1123中,如果主机中心接收事件队列读指针420已发生了变化,则主机将所更新的指针值写入NIC的设备中心接收事件队列读指针中。然后在步骤1124中主机接收事件处理器1100变得不活动。
中断管理
如上所述,NIC216保持有用于发送事件队列318和接收事件队列418中的每一个的设备中心事件队列读指针344或444。如下所述,将这些读指针用于中断管理。在一个实施例中,仅在主机子系统214的选择下将它们用于中断管理。出于下述原因,主机可以只使用设备中心接收事件队列读指针444,而使设备中心发送事件队列读指针344完全不被使用。在这种实施例中,主机永远都不将事件队列读指针更新写入设备中心发送事件队列读指针344中(即,略去图7中的步骤723)。
图15是例示了在主机子系统214与NIC216之间的交互(用于对NIC216的中断生成进行管理以激活图11的主机接收事件处理器)的流程图。将该交互设计成使所需中断次数最少化同时还避免竞争状况的概率。图15中的某些步骤重复了亦为其他流程图的一部分的多个步骤,但是将这些步骤集合在图15中会有助于例示它们与中断管理的关系。
在主机接收事件处理器1100中,在处理了它已从接收事件队列418取出的一个或更多个接收事件之后,它可以将一已更新的接收事件队列读指针写入NIC216上的设备中心接收事件队列读指针444中(步骤1123)。在图15中将该步骤示为步骤1508。通过写入这种值,主机将它的观点指示给NIC:接收事件队列418现在是空的。如果NIC216的观点是真实的,则设备中心接收事件队列写指针432和读指针434现在是相等的。在步骤1510中NIC由此(通过比较器446)将这两个值进行比较,如果它们相等,则NIC还通过将中断使能寄存器位448设置为它的活动状态来再使能用于接收事件队列418的中断(步骤1512)。响应于对设备中心接收事件队列读指针的更新并且与该更新原子地发生对中断的再使能;对这种更新值的写入构成了单个组合指令,以使用该新值来更新设备中心接收事件队列读指针并再使能中断。在使能了中断的情况下,NIC216上的接收事件队列中断管理模块接着变得不活动(步骤1514),直到NIC将新接收完成事件写入接收事件队列418中(步骤1010)并相应地更新设备中心接收事件队列写指针432(步骤1012)。设备中心接收事件队列读指针444与写指针432此时不相等,然后在步骤1516中,由于从步骤1512起一直使能了中断,因此NIC接收数据模块产生一中断以激活图11的主机接收事件处理器(如在步骤1014中阐述的)。NIC216还通过对中断使能位448进行再设置来原子地禁用(抑制)其他接收事件队列中断生成,从而在不产生其他中断的情况下临时地允许NIC接收数据模块将其他事件写入接收事件队列418中。然后接收事件队列中断管理模块回到步骤1508,等待由另一已更新接收事件队列读指针的主机进行的下一写入。当发生该下一写入时,如前所述,NIC再次针对相等性将设备中心读指针与写指针进行比较(步骤1510),并再次在禁用中断的情况下进行等待,直到NIC将另一事件写入接收事件队列418中(步骤1514)。
如果在步骤1510中NIC216确定设备中心事件队列读指针与写指针不相等,则这表示NIC216未共享主机的观点:接收事件队列418现在是空的。这可能会在如下情况下发生:例如,如果NIC处于正在将更多接收完成事件写入接收事件队列418的过程中(NIC接收数据模块的步骤1010),同时在主机接收事件处理器的步骤1122中主机确定下一取出的事件描述符是空的。如果出现了该竞争状态,则NIC216通过在步骤1510中确定所述两个指针不相等(即,设备中心接收事件队列写指针432在设备中心接收事件队列读指针444之前)将检测到该竞争状态。在此情况下NIC将使中断被禁用,并将立即产生另一中断以激活主机接收事件处理器(步骤1518)。这将给予主机这样一个机会,即,当主机在步骤1122中不正确地确定接收事件队列418是空的时,它可以处理正在处理中的事件。
注意,NIC接收数据模块可以继续将更多个的事件写入接收事件队列418中,并且如果在步骤1122中主机接收事件处理器检测到它们,则将处理它们。如果在主机下一次向NIC写入已更新的接收事件队列读指针时(步骤1123)这些附加事件仍然未被处理,则在步骤1510中将再次检测到该新竞争状态,然后产生还一中断;依此类推。
如果在特定实施例中在发送端使用事件队列中断管理模块,则针对发送类似地实现以上针对接收事件队列中断管理模块(图15)描述的机制。然而,如以上指出的,在另一实施例中,仅在接收端而不在发送端使用中断管理模块。这是因为在接收端希望具有低潜伏性,而在发送端潜伏性并不是那么重要。在发送端,对中断的减少可能比发送完成事件的立即接收更重要。在这种实施例中用于中断管理的所有上述硬件可以保留在NIC216上,但是主机发送事件处理器700从不更新设备中心发送事件队列读指针344。因此中断使能位348从不变活动,并且无论读/写指针比较器346的输出如何,中断发生器352都不产生中断。相反,只在定时器到期时或在设备驱动器中通过轮询循环进行选择时激活主机发送事件处理器700(步骤712)。这允许主机子系统针对何时和以何频度轮询发送事件队列418中的新事件进行它自己的软件型判决,而不是由NIC产生的中断来支配。
在许多实施例中,在步骤1512和1516中对中断的使能和禁用不必总体地作为应用于整个外设216的功能。例如,可以通过掩盖机制实现该功能。在该意义下,这里使用的术语禁用和使能与诸如对中断的掩盖和解掩盖、以及对中断的许可和抑制是可互换的。此外,典型地,由于主机事件处理器在将它自己的已更新事件队列读指针写入NIC216之后通常失活(见图11,步骤1124),等待再激活新中断(步骤1110),因此也可以将对事件队列读指针的写入视为中断请求。这里在使能中断与中断请求之间没有区别。
多重队列实施例
本发明在网络接口架构中尤其有用,在网络接口架构中,协议栈的部分位于操作系统内核和传输库中,以由用户级应用直接调用。在2004年4月21日提交的英国专利公报No.GB0408876A0(标题为“User-levelStack”)中描述了这样一种架构的示例,通过引用将其并入于此。在这种架构中,可以支持各种协议栈,每种协议栈都带有它自己的发送和接收数据结构组,并且所有协议栈都由在NIC上的硬件中执行的功能来协助。
图12是其中通过NIC1210上的硬件协助来支持多个协议栈的系统的简化框图。NIC1210不仅包括常规硬件NIC部分1212,而且包括多个“虚”NIC部分(VNIC)1214。对于操作系统来说,NIC1210看起来是具有两个设备驱动器的双功能设备:与常规NIC部分1212相通信的常规设备驱动器1216,和与VNIC1214相通信的用户设备驱动器1218。一般来讲,由内核1220中的常规协议栈(未示出)使用常规设备驱动器1216,由多个用户级协议栈1222中的每一个来使用用户设备驱动器1218。为多个用户级应用(或处理)1224中的每一个创建独立用户专用协议栈1222。用户级应用可以通过呼叫内核1220与网络212相通信,但是优选地它们通过它们的相应用户级协议栈1222与网络212相通信。
图12的系统比图3和4的系统更复杂,但是对于各单个发送或接收队列,操作是类似的。在这两个实施例之间的主要差别源自图12实施例掌握多个队列的特性和状态的更大的复杂性。以下对这些差异的有关细节进行描述。
图13是图12的系统为了支持所述多个VNIC1214中的每一个的独立发送队列而使用的各种数据结构的框图。该图表示在主机存储器222中存在哪些结构并且在NIC216上存在哪些结构。所有发送队列的发送数据缓冲区310、发送缓冲区链表312以及发送事件队列318都驻留在主机存储器222中,并由一般化的多个缓冲区组成,在主机存储器222中这些缓冲区可以是彼此不连续并散布开来的。在图13中,将组成发送数据缓冲区310的缓冲区标识为“TX DATA BUF#n”,将组成发送缓冲区链表312的缓冲区标识为“TX QUEUE BUF#n”。将组成发送事件队列318的缓冲区标识为“TX EV QUEUE BUF#n”。
在一个实施例中单个缓冲区可以是4k或8k字节长度的,并通过缓冲区描述符表1310中的多个物理上连续的描述符将这些缓冲区链接在一起,成为逻辑上连续的序列。例如,一个发送队列(发送缓冲区链表312)可能占据主机存储器222中的缓冲区1312、1314以及1316,这些缓冲区是不连续的并且可能是存储器的多个无序区。通过缓冲区描述符表1310中的多个物理上连续的条目1318、1320以及1322将这些缓冲区链接在一起,成为单个逻辑上连续的空间。由主机214对条目1318、1320以及1322进行写入和管理,并将它们视为环绕环。因此,例如,如果主机希望定义具有64k个发送数据缓冲区描述符的条目的发送缓冲区链表312,并且每个缓冲区的大小为4k,那么主机将为该发送缓冲区链表分配缓冲区描述符表1310中的物理上连续的16个条目序列。类似地,一个发送事件队列318可能占据主机存储器222中的缓冲区1326、1328以及1330。这些缓冲区是不连续的并且可能在主机存储器中是无序的,但是通过缓冲区描述符表1310中的多个物理上连续的条目1332、1334以及1336将这些缓冲区链接在一起,成为单个逻辑上连续的环绕空间。通过“缓冲区ID”为缓冲区描述符表1310编索引,此外,其每个条目还标识了主机存储器222中的相对应的缓冲区的基地址等。
为了掌握可能同时与LAN212相通信的许多用户级应用的多个发送缓冲区链表和发送事件队列中的每一个的状态,NIC216包括发送队列描述符表1340和事件队列描述符表1342。每个发送队列(包括其发送数据缓冲区、其发送缓冲区链表以及其发送事件队列)都具有相对应的发送队列ID,将该发送队列ID用作发送队列描述符表1340中的索引。发送队列描述符表1340中的指定条目是用于描述该特定发送队列的状态和其他特性的起点(如由NIC216观察到的)。此外,每个这种条目还标识了:
*该队列是内核队列、用户队列还是另一种队列;
*发送缓冲区链表312的大小(其可以包含的发送数据缓冲区描述符的数量);
*与该发送队列相关联的发送事件队列的ID;
*待作为发送完成事件的一部分返回给事件队列的队列“标签”;
*该发送队列的发送缓冲区链表312中的基缓冲区的缓冲区ID;
*指向该发送队列的发送缓冲区链表312中的设备中心读指针326和写指针324。
为了从主机存储器222中的特定发送队列中取出当前发送数据,NIC216首先使用该特定发送队列的ID在发送队列描述符表1340中查找含有该特定发送队列的发送缓冲区链表312的基缓冲区的缓冲区ID。NIC216还从同一位置获得指向到该缓冲区链表312中的当前设备中心缓冲区链表读指针326。然后它使用该基缓冲区ID作为基,使用该设备中心缓冲区链表读指针高阶位作为偏移量,到缓冲区描述符表1310中获得主机存储器222中的含有所述特定发送缓冲区链表312的缓冲区的基地址。然后NIC使用该基地址作为基,使用该设备中心缓冲区链表读指针低阶位乘以每个描述符占用的字节数作为偏移量,以从主机存储器222取出所述特定发送缓冲区链表312中的当前条目。注意,为了减少对主机存储器222的访问,在一个实施例中NIC216将发送缓冲区链表312的一部分高速缓存。
此外,所述特定发送缓冲区链表312的当前条目还含有:
*当前发送数据缓冲区的缓冲区ID;
*到当前发送数据缓冲区中的字节偏移量;以及
*待从当前发送数据缓冲区发送的字节数。
然后NIC216使用当前发送数据缓冲区的缓冲区ID作为到缓冲区描述符表1310中的另一索引,以取出含有当前发送数据的缓冲区的缓冲区描述符。注意,该缓冲区描述符是缓冲区描述符表1310中的单个条目;与含有发送队列或发送事件队列的缓冲区的描述符不同,该缓冲区描述符不是环的一部分。NIC216获得当前发送数据缓冲区在主机存储器222中的物理地址,然后使用该物理地址作为基,并使用与发送缓冲区链表条目的字节偏移量作为偏移量,确定待发送的当前数据在主机存储器222中的物理起始地址。
如前所述,由发送队列ID指定的发送队列描述符表1340条目也含有与所述特定发送队列相关联的发送事件队列的ID。由发送事件队列描述符表1342中的相应条目描述所有应用1224的所有发送事件队列。在发送事件队列描述符表1342中由来自发送队列描述符表1340的发送队列ID标识的条目是用于描述该特定发送事件队列318的状态和其他特性的起点(如由NIC216观察到的)。此外,每个这种条目还都标识了:
*该特定发送事件队列318的大小;
*组成该特定事件队列318的基缓冲区的缓冲区ID;
*与图3的中断使能位348相对应的char_ev_enable位;
*该特定事件队列318的发送事件队列写指针332;以及
*该特定事件队列318的发送事件队列读指针。
由此为了将一事件写入与特定发送队列相关联的特定事件队列318中,NIC216使用从发送队列描述符表1340中的相应条目获得的发送事件队列ID,在发送事件队列描述符表1342中查找含有所述特定发送队列的发送事件队列318的基缓冲区的缓冲区ID。NIC216还从同一位置获得指向到该发送事件队列318中的当前发送事件队列写指针332。然后它使用该基缓冲区ID作为基,使用发送事件队列写指针高阶位乘以每个描述符占用的字节数作为偏移量,到缓冲区描述符表1310中获得主机存储器222中的含有所述特定发送事件队列318的当前条目的缓冲区的基地址。然后NIC使用该基地址作为基,使用发送事件队列写指针低阶位作为偏移量,以将希望的事件描述符写入主机存储器222中的所述特定发送事件队列318的当前条目中。
注意,如图13所例示,虽然缓冲区描述符表1310所示的每个空隙(例如1332、1334、1318)表示单个描述符,但是主机存储器222中的每个空隙(例如1326、1328、1314)表示信息存储器“页”。一页例如可以是4k或8k字节长,因此如果发送队列中的发送数据缓冲区描述符占据4或8字节,则图13所示的每个空隙1312、1314或1316可以保持512、1k或2k个发送数据缓冲区描述符。
图14是图12的系统为了支持所述多个VNIC1214中的每一个的独立接收队列而使用的各种数据结构的框图。该图类似于发送端的图,因此这里不再对某些类似特征进行描述。
与发送端一样,所有接收队列的接收数据缓冲区410、接收缓冲区链表412以及接收事件队列418都驻留在主机存储器222中,并由一般化的多个缓冲区组成,在主机存储器222中这些缓冲区可以是彼此不连续并散布开来的。在图14中,将组成接收数据缓冲区410的缓冲区标识为“RX DATA BUF#n”,将组成接收缓冲区链表412的缓冲区标识为“RXQUEUE BUF#n”。将组成接收事件队列418的缓冲区标识为“RX EVQUEUE BUF#n”。优选地,将所有协议栈的发送事件队列318与接收事件队列418组合成一个总体事件队列池。即,优选地,将发送事件队列描述符表1342和接收事件队列描述符表1442实现为仅单个表。
仍然与发送端一样,通过缓冲区描述符表1410中的多个物理上连续的描述符将单个缓冲区链接在一起,成为逻辑上连续的序列。通过“缓冲区ID”为缓冲区描述符表1410编索引,此外,其每个条目都标识了主机存储器222中的相对应的缓冲区的基地址等。
为了掌握可能同时与LAN212相通信的许多用户级应用的多个接收缓冲区链表和接收事件队列中的每一个的状态,与发送队列描述符表1340类似,NIC216包括接收队列描述符表1440和事件队列描述符表1442。每个接收队列(包括其接收数据缓冲区、其接收缓冲区链表以及其接收事件队列)都具有相对应的接收队列ID,将该接收队列ID用作接收队列描述符表1440中的索引。接收队列描述符表1440中的指定条目是用于描述该特定接收队列的状态和其他特性的起点(如由NIC216观察到的)。每个这种条目都大致标识了与以上针对发送队列描述符表1340中的条目描述的有关接收队列的相同的信息。
如前所述,由接收队列ID指定的接收队列描述符表1440条目也含有与所述特定接收队列相关联的接收事件队列的ID。由接收事件队列描述符表1442中的相应条目描述所有应用1224的所有接收事件队列。在接收事件队列描述符表1442中由来自接收队列描述符表1440的接收队列ID标识的条目是用于描述该特定接收事件队列418的状态和其他特性的起点(如由NIC216观察到的)。每个这种条目都大致标识了与以上针对发送事件队列描述符表1342中的条目描述的有关接收事件队列的相同的信息。与发送端一样,至少对于事件队列深度管理目的,该信息不必包括任何接收事件队列418的设备中心接收事件队列读指针。
除与发送端的结构相对应的接收端的结构以外,接收端还包括过滤表和逻辑块1450。由于NIC216可以支持在用户级应用1224与LAN212上的远程代理之间的多个同时连接,并且由于NIC216支持使用多个发送和接收队列的这些同时连接,因此由NIC216执行的一个功能是将每个来达数据分组导引到正确的接收队列。NIC216用以进行该确定的机制对于对本发明的理解并不重要,但是需要指出的是,过滤表和逻辑1450保持有在分组首部信息与目的地接收队列ID之间的对应关系。由此过滤表和逻辑1450使用来自来达分组的首部信息来确定正确的目的地接收队列的ID,并使用该接收队列ID作为对接收队列描述符表1440的索引。如以上针对发送端说明的那样,接收队列ID是NIC216用以获得与目的地接收队列有关的所有所需信息(以正确地转发分组数据)的起点。
管理事件
如上所述,在这里描述的实施例中将事件用作首要的状态报告方法。事件是从NIC216中的各种资源收集的状态字。如以上针对简化实施例描述的,事件可以产生中断,但是如下所述,在图12到14的实施例中对中断的产生包括额外的间接级。使中断最少化以降低中断潜伏性和CPU开销。
同样如上所述,将发送事件队列描述符表1342和接收事件队列描述符表1442优选地仅实现为单个表。在一个这种实施例中,统一的事件队列支持多达4k个事件队列。事件队列0到3专用于最多4个队列,该最多4个队列用于内核网络接口驱动器(被公知为NET驱动器)的分组传送,事件队列4专用于第二内核驱动器(被公知为CHAR驱动器),该第二内核驱动器负责总体管理和在所有用户队列与它们相对应的协议栈之间的协调。
事件具有如由事件描述符中的事件代号字段标识的不同类型。事件描述符的其余字段取决于事件类型。已经描述的两种事件类型是发送完成事件和接收完成事件;如前所述,如分别在发送队列描述符表1340或接收队列描述符表1440中设计的那样,将这些事件发送给任何事件队列。其他事件类型专用于其他非IP LAN协议。每个事件队列还具有在NIC216中的相关联的定时器,这些定时器也可以为它们相应的事件队列产生事件。某些事件(包括大多数的管理事件)是严格意义上的CHAR驱动器事件。只将这些事件发送给CHAR驱动器而不发送给任何用户事件队列。还有的事件是全局事件,CHAR驱动器或内核驱动器可以负责处理该全局事件。也可以由CHAR驱动器或NET驱动器来产生事件。CHAR和NET驱动器可以为任何事件队列产生任何希望的类型的事件。
NIC216使用单个事件FIFO(未示出)来缓冲等待被写出到存储器中的事件。事件FIFO的深度很浅,以确保低潜伏递送。当该FIFO已满时,所有代理都得到了背压(back-pressured)。
共享事件队列实施例
在图3、4、13以及14的实施例中,针对每个发送和接收数据队列示出独立的事件队列。然而,在一优选实施例中,主机子系统214可以指定单个事件队列来接收关于若干不同数据队列的事件。分配给单个事件队列的数据队列可以是发送队列、接收队列或这两者。例如,主机子系统可能正在运行充当网络212上的若干束TCP连接的端点的程序线程。通常,该线程针对各连接束具有独立发送队列和独立接收队列,但是通常仅具有用于接收与所有这种发送和接收队列有关的事件的一个事件队列。作为另一示例,一个程序线程可能具有一个以上事件队列,或者几个程序线程可能共享一个事件队列。支持所有这种变化。此外,在多重队列实施例中,同样将诸如1342和1442的发送和接收事件队列描述符表优选地实现为仅单个表。
如上所述,特定数据队列的队列描述符表1340或1440(分别是发送或接收)中的条目包括这样的字段:该字段标识了应当将与所述特定队列有关的事件写入其中的事件队列ID。当NIC216耗用了来自特定数据队列的发送或接收数据缓冲区并希望将一完成事件写入合适的事件队列中时,NIC216从队列描述符表条目中的用于该特定数据队列的该字段取出合适的事件队列ID。队列描述符表中的用于特定数据队列的条目还包括队列“标签”,NIC216会将该队列“标签”包括进来,作为完成事件描述符中的数据。典型地,负责所述特定数据队列的程序线程将向该标签字段写入该线程可以稍后(当接收到完成事件时)使用的代号,以标识该事件所属的特定数据队列ID。
多重队列实施例中的中断管理
在多重队列实施例中,如以上针对简化实施例描述的那样对NET内核队列的中断进行管理。视硬件而定,要么每个内核队列都具有它自己的中断,或者两个或更多个内核队列共享中断。在后一情况下,共享的中断激活所有共享驱动器,这些共享驱动器中的每一个快速地确定它是否为负责处理该中断的驱动器。CHAR驱动器也可以与一个或更多个NET队列共享中断。
然而,用户队列不是操作系统的一部分并且不能接收中断。在本发明的一个方面中,可以通过添加一个间接层来实现类似的功能。具体来说,在步骤636(用于发送)和1014(用于接收)中,相应的NIC发送和接收数据模块不直接中断主机中的相应发送和接收事件处理器。相反,它们向CHAR驱动器的事件队列写入“用户事件队列唤醒事件”,其包括(通过事件队列ID来)标识需要激活的事件队列的字段。在简化实施例中,通过中断使能位348、448来许可中断;在多事件实施例中,通过需要激活的用户级事件队列的事件队列描述符中的char_ev_enable位来许可将用户事件队列唤醒事件写入CHAR驱动器的事件队列中。
CHAR驱动器队列在它忽略它的char_ev_enable位的意义上来说与用户级队列不同,并且与简化实施例的不同之处在于:其事件队列含有引用另一队列的驱动器的唤醒事件而非数据传送完成事件(尽管在一实施例中CHAR驱动器事件队列也可以含有数据传送完成事件)。CHAR驱动器队列与简化实施例的类似之处在于:它仍然包括NIC上的中断使能位。使用该位对中断的使能和禁用实质上与以上参照图3和4阐述的相同。
因此,连同向CHAR驱动器事件队列写入用户事件队列唤醒事件,只有接着使能了CHAR驱动器中断时,NIC216才产生对运行在主机子系统214上的CHAR驱动器的中断。然后立即关闭CHAR驱动器队列的中断使能位,使得被写入CHAR事件队列中的其他用户事件队列唤醒事件不会产生中断(被写入CHAR事件队列的其他种类的事件也不会产生中断)。换句话说,CHAR事件队列不会产生其他中断,直到CHAR驱动器请求一个中断。然而,NET驱动器队列可能仍然能够产生中断,因为所有中断事件队列都按独立的方式进行操作。如以上参照图3和4阐述的,当主机中的CHAR驱动器相信它已经清空了CHAR驱动器事件队列时,它将它的已更新主机中心CHAR事件队列读指针写回NIC216,NIC216对它与设备中心写指针进行比较,以确定是否再使能CHAR驱动器中断(如果这两个指针相等)或断言新的中断(如果这两个指针不相等)。由此避免了在下述情况下可能出现的竞争状态:如果NIC正在将更多用户事件队列唤醒事件写入CHAR驱动器事件队列的过程中,同时主机中的CHAR驱动器确定CHAR驱动器事件队列中的下一取出的描述符是空的。
当CHAR驱动器事件处理器从CHAR驱动器事件队列获得用户事件队列唤醒事件时,它进行到如下操作:激活负责在用户事件队列唤醒事件中标识的事件队列的主机事件处理器。
在用于中断队列(NET驱动器队列和CHAR驱动器队列)与用于非中断队列(用户队列)的中断管理机制之间存在两重性。如上所述,用于中断队列的驱动器使能和禁用(抑制)特定队列的中断,而用于非中断队列的驱动器使能和禁用NIC对特定队列的唤醒事件的写入。这两个处理的细微差异在于,对于中断队列,缺省状态是其中将发生中断的状态;在不希望发生中断的时段中必须抑制这些中断。另一方面,对于非中断队列,缺省状态是其中不写入唤醒事件的状态。必须请求唤醒事件以出现一个唤醒事件。然而,在这两种情况下,在上述实施例中使能或禁用中断的机制类似于用于使能或禁用唤醒事件的机制:连同对中断/唤醒事件的发出一起禁用/抑制/扣留它们,并且通过向NIC对已更新事件队列读指针的写入来再使能/允许/请求它们。由此,这里在短语“对中断的使能”、“对中断的允许”或“对中断的请求”之间没有区别。类似地,这里在短语“对唤醒事件的使能”、“对唤醒事件的允许”或“对唤醒事件的请求”之间没有区别。即使在其中用/于中断队列的机制与用于非中断队列的机制不相同的实施例中,这里在这些术语之中也没有区别。
可以看到,即使用户级驱动器实际上不能接收中断,通过向用于对中断进行协调的CHAR驱动器发送唤醒事件而提供的附加间接层也允许用户级队列及其驱动器按与中断操作系统队列大致相同的方式进行操作。即使在可以接收中断的多个驱动器的实施例中,附加间接层也是有益的,因为它不仅有助于单个地使各事件队列的中断最少化,而且有助于整体地使在所有事件队列上的中断最少化。
外设向中间事件队列写入事件(“参考”事件)、调用中间事件队列处理器以针对不同的(“被参考”)事件队列执行功能的技术并不限于用于激活有意阻断对唤醒事件的等待的参考队列的处理器的唤醒事件。也不限于其中中间队列是中断队列而参考队列不是中断队列的情况。作为示例,在2004年2月3日提交的英国专利公报0404696.7(标题为“DualDriver Interface”,通过应用将其并入于此)中描述的一个实施例中,支持多个内核事件队列。当一事件已在队列(参考队列)上保留了一定延长时段时(这表示参考队列停滞住了),外设能够检测到。例如,如果与队列相关联的应用、驱动器或传输库出现了故障,或者已经终止或被排除在计划以外,该队列可能会变得停滞。响应于这种检测,而不是发出待由与参考队列相关联的实体来处理的中断,网络接口驱动器向另一队列(优选地,控制通道的队列)发出事件(可选地,带有相关联的中断)。该“参考”事件表示停滞队列的性质(即,对停滞队列的表示)和标识。优选地,将与控制通道相关联的实体(优选地,其为诸如所述多个驱动器中的一个的控制实体)布置成通过访问并释放所表示的队列对这种消息进行响应。可以显见对中间队列技术的许多其他使用。取决于所表示的队列变得停滞的原因,可能存在如下情况:当前已释放事件队列的处理器接着可以取出并处理队列上的一个或更多个事件。
避免中断假警报
某些I/O总线(如PCI2.0和PCI-X)支持电平触发中断,在电平触发中断中,外设通过使信号线进入活动状态来产生中断。在使用电平触发中断的系统中,存在可以产生“假警报”中断的边界条件。考虑如下情况:外设通过使中断信号线进入其活动电平来产生其中断,并且只在接收到来自主机的中断确认时才使它返回不活动电平。如果在将该中断确认写入外设之后,在外设能够使中断信号线失活之前主机中断服务例程退出了,则主机可以将持续活动的信号线解释为新中断并再次激活事件队列处理器。如果此时事件队列仍然是空的,则该新的“假警报”会引起不必要的主机的环境切换。
因此,在使用电平触发中断的实施例中,可以如下地使这种假警报的可能性最小化。响应于中断,主机子系统读取NIC上的寄存器,以确定多个源中的哪个源发起了该中断。响应于主机子系统对中断源寄存器的读取,NIC使中断线失活。NIC可以产生其他中断,然后如果在读取了中断源寄存器之后产生了更多事件,但是不会丢失中断。在主机子系统写回它的事件队列读指针时,中断线也不会活动,因此也不会产生假警报中断。
在上述多重队列实施例中,在不需要到NIC的通信以解断言唤醒事件的意义上来说,唤醒事件更类似于边沿触发中断,而不是电平触发中断。NIC在主机事件处理器已使它自己失活之后保持唤醒事件活动,这是没有风险的,因为主机可以撤销该唤醒事件并按协调的方式使它自己失活。因此,根据它的性质,假设正确地设计了事件处理器,则在唤醒事件的环境下不必产生假警报问题。然而,对于CHAR驱动器中断,仍然会产生该问题。在这种情况下,一个实施例使用以上针对CHAR驱动器事件队列描述的假警报防止机制,和以上针对用户事件队列描述的竞争状况检测和纠正机制。在使用消息信令中断(MSI)的实施例中,如在PCI-Express I/O总线上,所有队列只使用上述竞争状况机制。
如这里使用的,对信息项的“标识”不一定要求直接指定该信息项。通过一个更多个间接层简单地引用实际信息,或者通过标识一个或更多个不同的信息项(这些信息项一起例如通过公知的算法足以确定实际信息项),可以在一字段中“标识”信息。此外,这里使用术语“表示”来意指与“标识”相同的意思。
此外,如这里使用的,指向存储器中的特定位置的“指针”是“标识”存储器中的特定位置的信息。在一个实施例中,该指针包括:第一值,其标识缓冲区描述符表中的条目,而该条目标识主机存储器中的缓冲区的基地址;和第二值,其标识到该缓冲区的偏移量;以及其他参数,需要这些参数来唯一地标识存储器中的特定位置。注意,由于如上所述地定义了“标识”,因此标识了队列中的待读取或写入的“下一”位置的任何读或写指针也标识了最后一次读或最后一次写位置,反之亦然。
此外,如这里使用的,如果前任信号、事件或值影响了给定信号、事件或值,则给定信号、事件或值对该前任信号(predecessor signal)、事件或值“有响应”。如果存在插入处理单元、步骤或时段,则给定的信号、事件或值仍然可以对前任信号、事件或值“有响应”。如果插入处理单元或步骤组合了一个以上的信号、事件或值,则将处理单元或步骤的信号输出视为对信号、事件或值输入中的每一个都“有响应”。如果给定信号、事件或值与前任信号、事件或值相同,则该情况仅仅是其中将给定信号、事件或值仍然视为对前任信号、事件或值“有响应”的退化情况。类似地定义给定信号、事件或值对另一信号、事件或值的“依赖性”。
出于示例和说明的目的给出了对本发明优选实施例的上述说明。并不旨在穷举或者将本发明限制为公开的精确形式。显然,本领域的技术人员可以显见许多变型和修改。具体来说,并不是限制,通过引用将在本专利申请的背景部分中通过引用描述、建议或并入的任何和所有变型并入本文对本发明的多个实施例的描述中。对本文描述的实施例的选取和描述的目的是为了很好地阐述本发明的原理及其实际应用,从而使得本领域的技术人员能够针对各种实施例并以适于所预期的具体应用的各种修改来理解本发明。本发明的范围由所附权利要求及其等同物来限定。

Claims (42)

1、一种对在主机子系统与通过外围总线与所述主机子系统相通信的外设之间的交互进行管理的方法,该方法包括以下步骤:
所述外设将一唤醒事件写入所述主机子系统可访问的中间事件队列中,所述唤醒事件标识了所述主机子系统可访问的第一事件队列;
响应于对来自所述中间事件队列的所述唤醒事件的取出,所述主机子系统激活第一事件处理器;以及
第一事件处理器至少耗用来自第一事件队列的第一类型的第一事件。
2、根据权利要求1所述的方法,该方法还包括所述外设将第一事件写入第一事件队列的步骤,
其中,连同所述外设将第一事件写入第一事件队列的步骤执行所述外设将一唤醒事件写入中间事件队列的步骤。
3、根据权利要求2所述的方法,该方法还包括以下步骤:
连同所述外设将第一事件写入第一事件队列,所述外设进入唤醒断言禁用状态,在该唤醒断言禁用状态中,连同向第一事件队列写入其他事件,所述外设不将任何唤醒事件写入所述中间队列中;以及
所述外设向第一事件队列写入第二事件,同时所述外设处于所述唤醒断言禁用状态。
4、根据权利要求2所述的方法,其中,所述第一事件处理器至少耗用来自第一事件队列的第一类型的第一事件的步骤包括以下步骤:
所述主机子系统耗用来自第一事件队列的事件,直到所述主机子系统确定第一事件队列是空的;
响应于确定第一事件队列是空的,所述主机子系统向所述外设标识已更新主机中心第一事件队列读指针;以及
响应于对所述已更新主机中心第一事件队列读指针的接收,还响应于所述外设对所述已更新主机中心第一事件队列读指针与所述设备中心第一事件队列写指针不相同的确定,所述外设向所述中间事件队列写入标识第一事件队列的第二唤醒事件。
5、根据权利要求4所述的方法,该方法还包括以下步骤:响应于对所述已更新主机中心第一事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心第一事件队列读指针与所述设备中心第一事件队列写指针相匹配的确定,所述外设进入唤醒断言使能状态,在该唤醒断言使能状态中,连同向第一事件队列写入下一事件,所述外设向所述中间事件队列写入唤醒事件。
6、根据权利要求1所述的方法,该方法还包括以下步骤:
连同所述外设向所述中间事件队列写入所述唤醒事件,所述外设发起对所述主机子系统的第一中断;
连同所述外设向所述中间事件队列写入所述唤醒事件,所述外设进入中断禁用状态,在该中断禁用状态中,连同向所述中间事件队列写入其他唤醒事件,所述外设不发起对所述主机子系统的任何中断;以及
所述外设向所述中间事件队列写入第二唤醒事件,同时所述外设处于所述中断禁用状态。
7、根据权利要求1所述的方法,该方法还包括以下步骤:
连同所述外设向所述中间事件队列写入所述唤醒事件,所述外设发起对所述主机子系统的第一中断;
连同所述外设向所述中间事件队列写入所述唤醒事件,所述外设进入中断禁用状态,在该中断禁用状态中,连同向所述中间事件队列写入其他唤醒事件,所述外设不发起对所述主机子系统的任何中断;以及
响应于所述第一中断,所述主机子系统耗用来自所述中间事件队列的事件,直到所述主机子系统确定所述中间事件队列是空的;
响应于所述主机子系统的所述中间事件队列为空的确定,所述主机子系统向所述外设标识已更新主机中心中间事件队列读指针;以及
响应于对所述已更新主机中心中间事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心中间事件队列读指针与设备中心事件中间队列写指针不相同的确定,所述外设发起对所述主机子系统的附加中断。
8、根据权利要求1所述的方法,其中,所述外设包括网络接口设备,
所述方法还包括在所述网络接口设备与所述主机子系统的存储器中的多个第一数据缓冲区之间传送数据的步骤,
并且其中第一类型的事件表示完成了与所述多个第一数据缓冲区中的至少一个的数据传送。
9、根据权利要求8所述的方法,该方法还包括以下步骤:
所述外设向第一队列写入第一事件;
在所述网络接口设备与所述主机子系统的所述存储器中的多个第二数据缓冲区之间传送数据;
连同在所述网络接口设备与第二数据缓冲区之间传送数据,所述外设向第一事件队列写入第二类型的第二事件,第二类型的事件表示完成了与所述多个第二数据缓冲区中的至少一个的数据传送;以及
连同向第一事件队列写入第二事件,所述外设更新第一事件队列的所述设备中心事件队列写指针。
10、根据权利要求9所述的方法,该方法还包括以下步骤:连同向第一事件队列写入第二事件,所述外设向所述中间事件队列写入第二唤醒事件,第二唤醒事件标识了第一事件队列。
11、根据权利要求9所述的方法,其中,在所述外设向第一事件队列写入第一事件的步骤之后执行所述外设向第一事件队列写入第二类型的第二事件的步骤,
并且其中,所述第一事件处理器至少耗用来自第一事件队列的第一事件的步骤包括第一事件处理器耗用第一事件和第二事件的步骤。
12、根据权利要求9所述的方法,其中,在所述网络接口设备与第一数据缓冲区之间传送数据的步骤包括将发送数据从第一数据缓冲区传送到所述网络接口设备以发送到网络上的步骤,
并且其中所述在所述网络接口设备与第二数据缓冲区之间传送数据的步骤包括将由所述网络接口设备从所述网络接收到的数据传送到第二数据缓冲区的步骤。
13、根据权利要求1所述的方法,该方法还包括以下步骤:
所述外设向所述中间事件队列写入第二唤醒事件,第二唤醒事件标识了所述主机子系统可访问的第二事件队列;
响应于对来自所述中间事件队列的第二唤醒事件的取出,所述主机子系统激活第二事件处理器;以及
第二事件处理器至少耗用来自第二事件队列的第二类型的第二事件。
14、一种对在主机子系统与通过外围总线与所述主机子系统相通信的外设之间的交互进行管理的方法,该方法包括以下步骤:
所述外设将第一参考事件写入所述主机子系统可访问的中间事件队列中,该第一参考事件标识了所述主机子系统可访问的第一事件队列;
所述外设向所述中间事件队列写入第二参考事件,该第二参考事件标识了所述主机子系统可访问的第二事件队列;
响应于对来自所述中间事件队列的第一参考事件的取出,所述主机子系统至少耗用来自第一事件队列的第一类型的第一事件;以及
响应于对来自所述中间事件队列的第二参考事件的取出,所述主机子系统至少耗用来自第二事件队列的第二类型的第二事件。
15、根据权利要求14所述的方法,该方法还包括以下步骤:所述外设向第一事件队列写入第一事件,并且所述外设向第二事件队列写入第二事件。
16、根据权利要求15所述的方法,还包括以下步骤:连同向第一事件队列写入第一事件,所述外设进入第一禁用状态,在该第一禁用状态中,连同向第一事件队列写入其他事件,所述外设不向标识了第一事件队列的所述中间队列写入任何事件,
并且其中所述主机子系统至少耗用来自第一事件队列的第一类型的第一事件的步骤包括以下步骤:
所述主机子系统耗用来自第一事件队列的事件,直到所述主机子系统确定第一事件队列是空的;
响应于所述主机子系统的第一事件队列为空的所述确定,所述主机子系统向所述外设标识已更新主机中心第一事件队列读指针;以及
响应于对所述已更新主机中心第一事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心第一事件队列读指针与所述设备中心第一事件队列写指针不相同的确定,所述外设向所述中间事件队列写入标识第一事件队列的附加参考事件。
17、根据权利要求16所述的方法,该方法还包括以下步骤:连同向第二事件队列写入第二事件,所述外设进入第二禁用状态,在该第二禁用状态中,连同向第二事件队列写入其他事件,所述外设不向标识了第二事件队列的所述中间队列写入任何事件,
并且其中所述主机子系统至少耗用来自第二事件队列的第二类型的第二事件的步骤包括以下步骤:
所述主机子系统耗用来自第二事件队列的事件,直到所述主机子系统确定第二事件队列是空的;
响应于第二事件队列为空的所述确定,所述主机子系统向所述外设标识已更新主机中心第二事件队列读指针;以及
响应于对所述已更新主机中心第二事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心第二事件队列读指针与所述设备中心第二事件队列写指针不相同的确定,所述外设向所述中间事件队列写入标识第二事件队列的附加参考事件。
18、根据权利要求17所述的方法,该方法还包括以下步骤:响应于对所述已更新主机中心第二事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心第二事件队列读指针与所述设备中心第二事件队列写指针相匹配的确定,所述外设进入第二禁用状态,在该第二禁用状态中,连同向第二队列写入下一事件,所述外设向标识第二队列的所述中间事件队列写入参考事件。
19、根据权利要求15所述的方法,该方法还包括以下步骤:响应于对所述已更新主机中心第一事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心第一事件队列读指针与所述设备中心第一事件队列写指针相匹配的确定,所述外设进入第一使能状态,在该第一禁用状态中,连同向第一队列写入下一事件,所述外设向标识第一队列的所述中间事件队列写入参考事件。
20、根据权利要求14所述的方法,该方法还包括以下步骤:
连同向所述中间事件队列写入第一参考事件,所述外设发起对所述主机子系统的第一中断;
连同向所述中间事件队列写入第一参考事件,所述外设进入中断禁用状态,在该中断禁用状态中,连同向所述中间事件队列写入其他唤醒事件,所述外设不发起对所述主机子系统的任何中断;以及
响应于第一中断,所述主机子系统取出第一和第二参考事件。
21、根据权利要求20所述的方法,该方法还包括以下步骤:
响应于第一中断,所述主机子系统耗用来自所述中间事件队列的事件,直到所述主机子系统确定所述中间事件队列是空的;
响应于所述中间事件队列为空的所述确定,所述主机子系统向所述外设标识已更新主机中心中间事件队列读指针;以及
响应于对所述已更新主机中心中间事件队列读指针的接收,还响应于所述外设进行的对所述已更新主机中心中间事件队列读指针与设备中心事件中间队列写指针不相同的确定,所述外设发起对所述主机子系统的附加中断。
22、一种对多个事件队列进行管理的方法,所述方法利用与主机子系统和通过外围总线与所述主机子系统相通信的外设,该方法包括以下步骤:
所述外设将第一类型的第一事件写入所述主机子系统可访问的第一事件队列中;
连同向第一事件队列写入第一事件,所述外设更新第一事件队列的设备中心事件队列写指针;
连同向第一事件队列写入第一事件,所述外设向与第一事件队列不同的中间事件队列写入第一唤醒事件;
响应于对第一唤醒事件的读取,所述主机子系统耗用来自第一事件队列的事件,直到所述主机子系统确定第一事件队列是空的;
响应于第一事件队列为空的确定,所述主机子系统向所述外设标识第一事件队列的已更新主机中心事件队列读指针;以及
响应于对第一事件队列的所述已更新主机中心事件队列读指针的接收,还响应于所述外设进行的对第一事件队列的所述已更新主机中心事件队列读指针与第一事件队列的所述设备中心事件队列写指针不相同的确定,所述外设向所述中间事件队列写入附加唤醒事件,所述附加唤醒事件标识第一事件队列。
23、根据权利要求22所述的方法,该方法还包括以下步骤:所述外设向所述主机子系统可访问的第二事件队列写入第二类型的第二事件,
其中,第一唤醒事件标识第一事件队列,第二唤醒事件标识第二事件队列。
24、根据权利要求23所述的方法,该方法还包括以下步骤:响应于对第二唤醒事件的读取,所述主机子系统耗用来自第二事件队列的事件,直到所述主机子系统确定第二事件队列是空的。
25、根据权利要求24所述的方法,该方法还包括以下步骤:
响应于第二事件队列为空的所述确定,所述主机子系统向所述外设标识第二事件队列的已更新主机中心事件队列读指针;
响应于对第二事件队列的所述已更新主机中心事件队列读指针的接收,还响应于所述外设进行的对第二事件队列的所述已更新主机中心事件队列读指针与第二事件队列的所述设备中心事件队列写指针不相同的确定,所述外设向所述中间事件队列写入其他唤醒事件,所述其他唤醒事件标识第二事件队列。
26、根据权利要求23所述的方法,其中在所述外设向第一事件队列写入第一类型的第一事件的步骤之后,并且在所述主机子系统在所述主机子系统耗用来自第一事件队列的事件的步骤中确定第一事件队列是空的之前,执行所述外设向第二事件队列写入第二类型的第二事件的步骤。
27、根据权利要求23所述的方法,其中在所述主机子系统在所述主机子系统耗用来自第一事件队列的事件的步骤中确定第一事件队列是空的之后,执行所述外设向第二事件队列写入第二类型的第二事件的步骤。
28、根据权利要求22所述的方法,该方法还包括以下步骤:
连同向所述中间事件队列写入第一唤醒事件,所述外设发起对所述主机子系统的第一中断;和
响应于第一中断,所述主机子系统在所述主机子系统耗用来自第一事件队列的事件的步骤中读取第一唤醒事件。
29、根据权利要求22所述的方法,其中所述外设包括网络接口设备,
所述方法还包括在所述网络接口设备与所述主机子系统的存储器中的多个第一数据缓冲区之间传送数据的步骤,
并且其中第一类型的事件表示完成了与所述多个第一数据缓冲区中的至少一个的数据传送。
30、根据权利要求29所述的方法,该方法还包括以下步骤:
在所述网络接口设备与所述主机子系统的所述存储器中的多个第二数据缓冲区之间传送数据;
连同在所述网络接口设备与第二数据缓冲区之间传送数据,所述外设向第一事件队列写入第二类型的第二事件,第二类型的事件表示完成了与所述多个第二数据缓冲区中的至少一个的数据传送;以及
连同向第一事件队列写入第二事件,所述外设更新第一事件队列的所述设备中心事件队列写指针。
31、根据权利要求30所述的方法,该方法还包括以下步骤:连同向第一事件队列写入第二事件,所述外设发起对所述主机子系统的第二中断。
32、根据权利要求30所述的方法,其中,在所述外设向第一事件队列写入第一事件的步骤之后,并且在所述主机子系统在所述主机子系统耗用来自第一事件队列的事件的步骤中确定第一事件队列是空的之前,执行所述外设向第一事件队列写入第二类型的第二事件的步骤,
并且其中所述主机子系统耗用来自第一事件队列的事件的步骤包括以下步骤:在所述主机子系统确定第一事件队列是空的之前,所述主机子系统耗用第一事件和第二事件。
33、根据权利要求30所述的方法,其中,所述在所述网络接口设备与第一数据缓冲区之间传送数据的步骤包括将发送数据从第一数据缓冲区传送到所述网络接口设备以发送到网络上的步骤,
并且其中所述在所述网络接口设备与第二数据缓冲区之间传送数据的步骤包括将由所述网络接口设备从所述网络接收到的数据传送到第二数据缓冲区中的步骤。
34、一种对在主机子系统与通过外围总线与所述主机子系统相通信的网络接口设备之间的交互进行管理的方法,该方法包括以下步骤:
在所述网络接口设备与所述主机子系统中的存储器中的第一数据缓冲区之间传送数据;
所述网络接口设备将一数据传送完成事件写入所述主机子系统可访问的第一事件队列中,所述数据传送完成事件向所述主机子系统表示完成了在所述传送数据的步骤中的数据传送;以及
连同所述向第一事件队列写入数据传送完成事件的步骤,所述网络接口设备将一唤醒事件写入所述主机子系统可访问的中间事件队列,所述唤醒事件标识第一事件队列。
35、具有主机子系统的计算设备,用于与经由外围总线与所述主机子系统相通信的外设配合使用,所述主机子系统包括:
第一用户事件队列,其包含有由所述外设来排入队列的多个事件;和
中间队列,其包含有通知所述主机子系统第一用户队列中的事件可用性的事件。
36、根据权利要求35所述的设备,其中,所述主机子系统还包括包含有由所述外设来排入队列的多个事件的第二用户事件队列,
其中,所述中间队列还包含有通知所述主机子系统第二用户队列中的事件的可用性的事件。
37、根据权利要求35所述的设备,其中,所述主机子系统还包括第一组数据缓冲区和第一DMA描述符队列,该第一DMA描述符队列包含有标识第一组数据缓冲区中的多个缓冲区中的相应缓冲区的描述符,
并且其中被排入在第一用户事件队列中的所述多个事件中的一个通知所述主机子系统:在所述外设与第一组数据缓冲区中的所述多个缓冲区中的至少一个之间的数据传送完成了。
38、根据权利要求35所述的设备,其中,所述主机子系统还包括包含有由所述外设来排入队列的多个事件的第二用户事件队列,
其中,所述中间队列还包含有通知所述主机子系统第二用户队列中的事件的可用性的事件,
其中,所述主机子系统还包括第一、第二以及第三组数据缓冲区和第一、第二以及第三DMA描述符队列,该第一、第二以及第三DMA描述符队列中的每一个都分别包含有标识第一、第二以及第三组数据缓冲区中的多个缓冲区中的相应缓冲区的描述符,
其中被排入在第一用户事件队列中的所述多个事件中的一个通知所述主机子系统:在所述外设与第一组数据缓冲区中的所述多个缓冲区中的至少一个之间的数据传送完成了,
其中被排入在第二用户事件队列中的所述多个事件中的一个通知所述主机子系统:在所述外设与第二组数据缓冲区中的所述多个缓冲区中的至少一个之间的数据传送完成了,
并且其中被排入在第一用户事件队列中的所述多个事件中的附加事件通知所述主机子系统:在所述外设与第三组数据缓冲区中的所述多个缓冲区中的至少一个之间的数据传送完成了。
39、一种对在主机子系统与通过外围总线与所述主机子系统相通信外设之间的交互进行管理的方法,该方法包括以下步骤:
所述外设将一参考事件写入所述主机子系统可访问的中间事件队列中,所述参考事件标识了所述主机子系统可访问的参考事件队列;
响应于对来自所述中间事件队列的所述参考事件的取出,所述主机子系统激活第一事件处理器;以及
所述第一事件处理器耗用来自所述参考事件队列的事件。
40、根据权利要求39所述的方法,其中,所述参考事件是唤醒事件,
并且其中响应于所述第一事件处理器向所述外设请求唤醒事件的步骤执行所述外设写入参考事件的步骤。
41、根据权利要求39所述的方法,其中,所述参考事件表示所述参考事件队列停滞了,
并且其中,响应于所述外设检测到一事件在所述参考事件队列上已保留特定时段以上,执行所述外设写入参考事件的步骤。
42、一种对在主机子系统与通过外围总线与所述主机子系统相通信的外设之间的交互进行管理的方法,该方法包括以下步骤:
所述主机子系统从所述外设请求第一事件队列的唤醒事件,并且连同所述请求阻断一应用,所述应用包括用于第一事件队列的事件处理器;
所述主机子系统将第一唤醒事件接收到中间事件队列中,该第一唤醒事件标识第一事件队列;
响应于对来自所述中间事件队列的第一唤醒事件的取出,所述主机子系统激活所述应用;以及
响应于所述应用的被激活,所述应用的第一事件处理器耗用来自第一事件队列的至少第一事件。
CNB2005800107756A 2004-03-02 2005-02-03 用于多事件队列的中断管理 Active CN100474255C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0404696.7A GB0404696D0 (en) 2004-03-02 2004-03-02 Dual driver interface
GB0404696.7 2004-03-02

Publications (2)

Publication Number Publication Date
CN101014937A true CN101014937A (zh) 2007-08-08
CN100474255C CN100474255C (zh) 2009-04-01

Family

ID=32088584

Family Applications (2)

Application Number Title Priority Date Filing Date
CNB2005800107756A Active CN100474255C (zh) 2004-03-02 2005-02-03 用于多事件队列的中断管理
CNB2005800065749A Active CN100549994C (zh) 2004-03-02 2005-03-02 双驱动器接口

Family Applications After (1)

Application Number Title Priority Date Filing Date
CNB2005800065749A Active CN100549994C (zh) 2004-03-02 2005-03-02 双驱动器接口

Country Status (5)

Country Link
US (7) US7769923B2 (zh)
EP (2) EP1721249A4 (zh)
CN (2) CN100474255C (zh)
GB (1) GB0404696D0 (zh)
WO (2) WO2005074611A2 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521177A (zh) * 2011-12-07 2012-06-27 福建星网锐捷网络有限公司 中断处理方法及装置、中央处理器以及处理设备
CN109446102A (zh) * 2018-11-13 2019-03-08 郑州云海信息技术有限公司 一种基于事件的测试脚本调度方法及系统
CN110609499B (zh) * 2019-09-18 2021-06-29 深圳市航顺芯片技术研发有限公司 一种adc实时性采样与非实时性采样的切换方法及设备
CN116827880A (zh) * 2023-08-29 2023-09-29 珠海星云智联科技有限公司 一种缓存空间管理方法及装置

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8346971B2 (en) 1999-05-04 2013-01-01 At&T Intellectual Property I, Lp Data transfer, synchronising applications, and low latency networks
US8161197B2 (en) * 2003-12-19 2012-04-17 Broadcom Corporation Method and system for efficient buffer management for layer 2 (L2) through layer 5 (L5) network interface controller applications
GB0404696D0 (en) 2004-03-02 2004-04-07 Level 5 Networks Ltd Dual driver interface
JP2006101177A (ja) * 2004-09-29 2006-04-13 Fujitsu Ltd データ転送装置
US7675920B1 (en) * 2005-04-22 2010-03-09 Sun Microsystems, Inc. Method and apparatus for processing network traffic associated with specific protocols
US7496699B2 (en) 2005-06-17 2009-02-24 Level 5 Networks, Inc. DMA descriptor queue read and cache write pointer arrangement
US7467388B2 (en) * 2005-11-22 2008-12-16 Microsoft Corporation Monitoring message queues and starting processing applications
US7650471B2 (en) * 2006-01-06 2010-01-19 Hewlett-Packard Development Company, L.P. Head of queue cache for communication interfaces
JP4609381B2 (ja) * 2006-06-14 2011-01-12 株式会社デンソー 異常監視用プログラム、記録媒体及び電子装置
US8149709B2 (en) * 2006-06-30 2012-04-03 Oracle America, Inc. Serialization queue framework for transmitting packets
US9686117B2 (en) 2006-07-10 2017-06-20 Solarflare Communications, Inc. Chimney onload implementation of network protocol stack
EP2552080B1 (en) * 2006-07-10 2017-05-10 Solarflare Communications Inc Chimney onload implementation of network protocol stack
US9948533B2 (en) 2006-07-10 2018-04-17 Solarflare Communitations, Inc. Interrupt management
JP2008026559A (ja) * 2006-07-20 2008-02-07 Toshiba Corp 液晶ディスプレイドライバおよびそれを搭載する液晶ディスプレイ装置
US8050266B2 (en) * 2006-07-20 2011-11-01 Oracle America, Inc. Low impact network debugging
US20080109564A1 (en) * 2006-11-03 2008-05-08 Arndt Richard L Method, system, and apparatus for enhanced management of message signaled interrupts
US10026122B2 (en) 2006-12-29 2018-07-17 Trading Technologies International, Inc. System and method for controlled market data delivery in an electronic trading environment
US7966435B2 (en) * 2007-01-11 2011-06-21 International Business Machines Corporation Integrated circuit design structure for an asychronous data interface
US8131967B2 (en) * 2007-01-11 2012-03-06 International Business Machines Corporation Asynchronous data interface
US7949813B2 (en) * 2007-02-06 2011-05-24 Broadcom Corporation Method and system for processing status blocks in a CPU based on index values and interrupt mapping
US7962921B2 (en) * 2007-06-20 2011-06-14 Intel Corporation Apparatus and methods using intelligent wake mechanisms
US9396159B2 (en) * 2007-09-25 2016-07-19 Oracle America, Inc. Simple, reliable, connectionless communication mechanism
US20090083392A1 (en) * 2007-09-25 2009-03-26 Sun Microsystems, Inc. Simple, efficient rdma mechanism
US7937449B1 (en) * 2007-10-08 2011-05-03 Empirix, Inc. System and method for enabling network stack processes in user mode and kernel mode to access kernel memory locations
US8086769B2 (en) * 2008-01-17 2011-12-27 International Business Machines Corporation Method for detecting circular buffer overrun
DE102008009634A1 (de) * 2008-02-15 2009-08-27 Carl Zeiss Microimaging Gmbh Peripherieschnittstelle und Verfahren zur Datenübermittlung, insbesondere für Laser-Scanning-Mikroskop
US8094550B2 (en) * 2008-03-10 2012-01-10 Dell Product L.P. Methods and systems for controlling network communication parameters
US9106592B1 (en) * 2008-05-18 2015-08-11 Western Digital Technologies, Inc. Controller and method for controlling a buffered data transfer device
US8619558B1 (en) * 2008-07-21 2013-12-31 Qlogic, Corporation Memory management in a network adapter
US8271996B1 (en) * 2008-09-29 2012-09-18 Emc Corporation Event queues
US8281049B2 (en) * 2008-12-19 2012-10-02 Cisco Technology, Inc. Host-daughtercard configuration with double data rate bus
US8799926B1 (en) * 2008-12-30 2014-08-05 Sprint Communications Company L.P. Active node detection in a failover computing environment
US8356130B2 (en) * 2009-08-14 2013-01-15 Advanced Micro Devices, Inc. Mechanism for recording undeliverable user-level interrupts
US8266344B1 (en) * 2009-09-24 2012-09-11 Juniper Networks, Inc. Recycling buffer pointers using a prefetch buffer
US8386602B2 (en) 2010-11-02 2013-02-26 International Business Machines Corporation Relevant alert delivery in a distributed processing system
US8364813B2 (en) 2010-11-02 2013-01-29 International Business Machines Corporation Administering incident pools for event and alert analysis
US8589954B2 (en) * 2010-11-12 2013-11-19 Mediatek Inc. Method and program for selective suspension of USB network device
US9087031B2 (en) 2010-11-12 2015-07-21 Mediatek Inc. Method and program for selective suspension of USB device
US8621277B2 (en) 2010-12-06 2013-12-31 International Business Machines Corporation Dynamic administration of component event reporting in a distributed processing system
US8868984B2 (en) * 2010-12-07 2014-10-21 International Business Machines Corporation Relevant alert delivery in a distributed processing system with event listeners and alert listeners
US8737231B2 (en) 2010-12-07 2014-05-27 International Business Machines Corporation Dynamic administration of event pools for relevant event and alert analysis during event storms
US8805999B2 (en) 2010-12-07 2014-08-12 International Business Machines Corporation Administering event reporting rules in a distributed processing system
US9213562B2 (en) * 2010-12-17 2015-12-15 Oracle International Corporation Garbage collection safepoint system using non-blocking asynchronous I/O call to copy data when the garbage collection safepoint is not in progress or is completed
US8756462B2 (en) 2011-05-24 2014-06-17 International Business Machines Corporation Configurable alert delivery for reducing the amount of alerts transmitted in a distributed processing system
US8645757B2 (en) 2011-05-26 2014-02-04 International Business Machines Corporation Administering incident pools for event and alert analysis
US8676883B2 (en) 2011-05-27 2014-03-18 International Business Machines Corporation Event management in a distributed processing system
US9213621B2 (en) 2011-05-27 2015-12-15 International Business Machines Corporation Administering event pools for relevant event analysis in a distributed processing system
US8880943B2 (en) 2011-06-22 2014-11-04 International Business Machines Corporation Restarting event and alert analysis after a shutdown in a distributed processing system
US8392385B2 (en) 2011-06-22 2013-03-05 International Business Machines Corporation Flexible event data content management for relevant event and alert analysis within a distributed processing system
US8713366B2 (en) 2011-06-22 2014-04-29 International Business Machines Corporation Restarting event and alert analysis after a shutdown in a distributed processing system
US9419650B2 (en) 2011-06-22 2016-08-16 International Business Machines Corporation Flexible event data content management for relevant event and alert analysis within a distributed processing system
US20130097272A1 (en) 2011-10-18 2013-04-18 International Business Machines Corporation Prioritized Alert Delivery In A Distributed Processing System
US9178936B2 (en) 2011-10-18 2015-11-03 International Business Machines Corporation Selected alert delivery in a distributed processing system
US20130097215A1 (en) 2011-10-18 2013-04-18 International Business Machines Corporation Selected Alert Delivery In A Distributed Processing System
US8887175B2 (en) 2011-10-18 2014-11-11 International Business Machines Corporation Administering incident pools for event and alert analysis
US8713581B2 (en) 2011-10-27 2014-04-29 International Business Machines Corporation Selected alert delivery in a distributed processing system
US20130204965A1 (en) * 2012-02-03 2013-08-08 Cahya Masputra Packet transmission on a client using implicit enabling of features based on service classifications
US8954811B2 (en) 2012-08-06 2015-02-10 International Business Machines Corporation Administering incident pools for incident analysis
US8943366B2 (en) 2012-08-09 2015-01-27 International Business Machines Corporation Administering checkpoints for incident analysis
US9092282B1 (en) 2012-08-14 2015-07-28 Sprint Communications Company L.P. Channel optimization in a messaging-middleware environment
US11138525B2 (en) 2012-12-10 2021-10-05 Trading Technologies International, Inc. Distribution of market data based on price level transitions
US9189433B2 (en) 2012-12-18 2015-11-17 International Business Machines Corporation Tracking a relative arrival order of events being stored in multiple queues using a counter
DE102012113116B4 (de) * 2012-12-27 2014-09-18 Georg Bernitz Ein-/Ausgabegerät sowie Kommunikationssystem
US10158585B2 (en) * 2013-02-21 2018-12-18 Intel Corporation Packet processing with reduced latency
CN103078895B (zh) * 2013-02-28 2016-05-18 安徽康海时代科技股份有限公司 一种基于mcf52233芯片的工业以太网多功能双串口服务器
US20140282551A1 (en) * 2013-03-13 2014-09-18 Emulex Design & Manufacturing Corporation Network virtualization via i/o interface
US9264338B1 (en) 2013-04-08 2016-02-16 Sprint Communications Company L.P. Detecting upset conditions in application instances
US9361184B2 (en) 2013-05-09 2016-06-07 International Business Machines Corporation Selecting during a system shutdown procedure, a restart incident checkpoint of an incident analyzer in a distributed processing system
US9170860B2 (en) 2013-07-26 2015-10-27 International Business Machines Corporation Parallel incident processing
US9658902B2 (en) 2013-08-22 2017-05-23 Globalfoundries Inc. Adaptive clock throttling for event processing
US9256482B2 (en) 2013-08-23 2016-02-09 International Business Machines Corporation Determining whether to send an alert in a distributed processing system
US9571426B2 (en) * 2013-08-26 2017-02-14 Vmware, Inc. Traffic and load aware dynamic queue management
US9602337B2 (en) 2013-09-11 2017-03-21 International Business Machines Corporation Event and alert analysis in a distributed processing system
US9086968B2 (en) 2013-09-11 2015-07-21 International Business Machines Corporation Checkpointing for delayed alert creation
CN104572553B (zh) * 2013-10-11 2017-10-27 联发科技股份有限公司 控制设备耦接至主计算机的方法
US10394751B2 (en) * 2013-11-06 2019-08-27 Solarflare Communications, Inc. Programmed input/output mode
USRE49652E1 (en) 2013-12-16 2023-09-12 Qualcomm Incorporated Power saving techniques in computing devices
US9389943B2 (en) 2014-01-07 2016-07-12 International Business Machines Corporation Determining a number of unique incidents in a plurality of incidents for incident processing in a distributed processing system
US9575822B2 (en) 2014-08-01 2017-02-21 Globalfoundries Inc. Tracking a relative arrival order of events being stored in multiple queues using a counter using most significant bit values
CN104298546A (zh) * 2014-08-25 2015-01-21 宇龙计算机通信科技(深圳)有限公司 一种硬件通信装置的共享方法及终端
US9965412B2 (en) 2015-10-08 2018-05-08 Samsung Electronics Co., Ltd. Method for application-aware interrupts management
US10185675B1 (en) * 2016-12-19 2019-01-22 Amazon Technologies, Inc. Device with multiple interrupt reporting modes
US10846223B2 (en) * 2017-10-19 2020-11-24 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Cache coherency between a device and a processor
US10395698B2 (en) 2017-11-29 2019-08-27 International Business Machines Corporation Address/command chip controlled data chip address sequencing for a distributed memory buffer system
US10534555B2 (en) 2017-11-29 2020-01-14 International Business Machines Corporation Host synchronized autonomous data chip address sequencer for a distributed buffer memory system
US10489069B2 (en) 2017-11-29 2019-11-26 International Business Machines Corporation Address/command chip synchronized autonomous data chip address sequencer for a distributed buffer memory system
US10747442B2 (en) * 2017-11-29 2020-08-18 International Business Machines Corporation Host controlled data chip address sequencing for a distributed memory buffer system
CN110337643A (zh) * 2018-01-23 2019-10-15 深圳市大疆创新科技有限公司 芯片、处理器、计算机系统和可移动设备
US11150817B2 (en) * 2019-02-08 2021-10-19 International Business Machines Corporation Integrating kernel-bypass user-level file systems into legacy applications
US11126575B1 (en) 2019-03-05 2021-09-21 Amazon Technologies, Inc. Interrupt recovery management
WO2020236275A1 (en) * 2019-05-23 2020-11-26 Cray Inc. System and method for facilitating dynamic command management in a network interface controller (nic)
US11042392B2 (en) * 2019-06-14 2021-06-22 Microsoft Technology Licensing, Llc Network policy and flow state save/restore for highly available servicing
ES2967325T3 (es) * 2019-08-29 2024-04-29 Daikin Ind Ltd Dispositivo de comunicaciones
TWI768731B (zh) * 2021-02-25 2022-06-21 威盛電子股份有限公司 電腦系統
US11665113B2 (en) * 2021-07-28 2023-05-30 Hewlett Packard Enterprise Development Lp System and method for facilitating dynamic triggered operation management in a network interface controller (NIC)

Family Cites Families (188)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4535420A (en) * 1979-09-26 1985-08-13 Sperry Corporation Circular-queue structure
US5325536A (en) * 1989-12-07 1994-06-28 Motorola, Inc. Linking microprocessor interrupts arranged by processing requirements into separate queues into one interrupt processing routine for execution as one routine
US5459839A (en) 1991-09-05 1995-10-17 International Business Machines Corporation System and method for managing queue read and write pointers
EP0551191B1 (en) * 1992-01-09 2000-04-12 Cabletron Systems, Inc. Apparatus and method for transferring data to and from host system
US5444853A (en) * 1992-03-31 1995-08-22 Seiko Epson Corporation System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's
US5452455A (en) * 1992-06-15 1995-09-19 International Business Machines Corporation Asynchronous command support for shared channels for a computer complex having multiple operating systems
US5325532A (en) 1992-09-25 1994-06-28 Compaq Computer Corporation Automatic development of operating system boot image
DE4238942C1 (de) 1992-11-19 1994-01-05 Luwa Fahrzeugklimatech Gmbh Schnellschlußventil zur Anordnung an Ansaug- und Ausblasöffnungen von Belüftungsanlagen
EP0610677A3 (en) * 1993-02-12 1995-08-02 Ibm Communication device management module operating in two modes.
US5272599A (en) 1993-03-19 1993-12-21 Compaq Computer Corporation Microprocessor heat dissipation apparatus for a printed circuit board
JPH07110749A (ja) 1993-04-16 1995-04-25 Hewlett Packard Co <Hp> ダイアログ・ボックスの動的構築方法
US5636188A (en) * 1993-11-19 1997-06-03 Sony Corporation Data transmission circuit for disk storage apparatus
JP3810449B2 (ja) * 1994-07-20 2006-08-16 富士通株式会社 キュー装置
AU3313795A (en) * 1994-10-14 1996-04-26 Compaq Computer Corporation Circuit for placing a cache memory into low power mode in response to special bus cycles
US5644784A (en) * 1995-03-03 1997-07-01 Intel Corporation Linear list based DMA control structure
US5802320A (en) 1995-05-18 1998-09-01 Sun Microsystems, Inc. System for packet filtering of data packets at a computer network interface
US6098112A (en) 1995-10-19 2000-08-01 Hewlett-Packard Company Streams function registering
US5768530A (en) * 1995-12-28 1998-06-16 Emc Corporation High speed integrated circuit interface for fibre channel communications
US6070219A (en) * 1996-10-09 2000-05-30 Intel Corporation Hierarchical interrupt structure for event notification on multi-virtual circuit network interface controller
US5966547A (en) 1997-01-10 1999-10-12 Lsi Logic Corporation System for fast posting to shared queues in multi-processor environments utilizing interrupt state checking
US6341301B1 (en) * 1997-01-10 2002-01-22 Lsi Logic Corporation Exclusive multiple queue handling using a common processing algorithm
US5996031A (en) * 1997-03-31 1999-11-30 Ericsson Inc. System and method for the real time switching of an isochronous data stream
US5886872A (en) 1997-04-23 1999-03-23 Compaq Computer Corporation Pivotable support and heat sink apparatus removably connectable without tools to a computer processor
US6049842A (en) 1997-05-01 2000-04-11 International Business Machines Corporation Efficient data transfer mechanism for input/output devices
US6397316B2 (en) * 1997-07-24 2002-05-28 Intel Corporation System for reducing bus overhead for communication with a network interface
US7284070B2 (en) 1997-10-14 2007-10-16 Alacritech, Inc. TCP offload network interface device
US6160554A (en) 1998-03-19 2000-12-12 Hewlett Packard Company Computer file content preview window
US6002804A (en) 1998-03-26 1999-12-14 Hewlett-Packard Company Tone dependent variable halftoning with adjustable algorithm selection
US6988274B2 (en) * 1998-06-12 2006-01-17 Microsoft Corporation Method, system, and computer program product for representing and connecting an underlying connection-oriented device in a known format
US6667978B1 (en) * 1998-07-09 2003-12-23 International Business Machines Corporation Apparatus and method for reassembling frame data into stream data
US6393457B1 (en) * 1998-07-13 2002-05-21 International Business Machines Corporation Architecture and apparatus for implementing 100 Mbps and GBPS Ethernet adapters
US6260127B1 (en) 1998-07-13 2001-07-10 Compaq Computer Corporation Method and apparatus for supporting heterogeneous memory in computer systems
US6034733A (en) 1998-07-29 2000-03-07 S3 Incorporated Timing and control for deinterlacing and enhancement of non-deterministically arriving interlaced video data
US7020712B1 (en) 1998-09-30 2006-03-28 Cisco Technology, Inc. Reducing CPU overhead in the forwarding process in an inbound/outbound controller for a router
US6768996B1 (en) 1998-10-08 2004-07-27 Hewlett-Packard Development Company, L.P. System and method for retrieving an abstracted portion of a file without regard to the operating system of the current host computer
US6425034B1 (en) 1998-10-30 2002-07-23 Agilent Technologies, Inc. Fibre channel controller having both inbound and outbound control units for simultaneously processing both multiple inbound and outbound sequences
US6308282B1 (en) * 1998-11-10 2001-10-23 Honeywell International Inc. Apparatus and methods for providing fault tolerance of networks and network interface cards
US6360241B1 (en) 1999-02-01 2002-03-19 Compaq Information Technologies Goup, L.P. Computer method and apparatus for division and square root operations using signed digit
AU4005100A (en) 1999-03-01 2000-09-21 Sun Microsystems, Inc. Method and apparatus for classifying network traffic in a high performance network interface
US6691208B2 (en) * 1999-03-12 2004-02-10 Diva Systems Corp. Queuing architecture including a plurality of queues and associated method for controlling admission for disk access requests for video content
US6466952B2 (en) 1999-04-08 2002-10-15 Hewlett-Packard Company Method for transferring and indexing data from old media to new media
US6502203B2 (en) 1999-04-16 2002-12-31 Compaq Information Technologies Group, L.P. Method and apparatus for cluster system operation
US6304945B1 (en) 1999-05-13 2001-10-16 Compaq Computer Corporation Method and apparatus for maintaining cache coherency in a computer system having multiple processor buses
US6760783B1 (en) * 1999-05-21 2004-07-06 Intel Corporation Virtual interrupt mechanism
US7318102B1 (en) 1999-05-24 2008-01-08 Hewlett-Packard Development Company, L.P. Reliable datagram
WO2001018654A1 (en) 1999-09-08 2001-03-15 Mellanox Technologies Ltd. Synchronization of interrupts with data packets
US20030222803A1 (en) 1999-12-28 2003-12-04 Shai Cohen Duty cycle adapter
US6557053B1 (en) * 2000-01-04 2003-04-29 International Business Machines Corporation Queue manager for a buffer
US6675200B1 (en) 2000-05-10 2004-01-06 Cisco Technology, Inc. Protocol-independent support of remote DMA
WO2001090838A2 (en) 2000-05-24 2001-11-29 Voltaire Advanced Data Security Ltd. Filtered application-to-application communication
US7103626B1 (en) 2000-05-24 2006-09-05 Hewlett-Packard Development, L.P. Partitioning in distributed computer system
US6735720B1 (en) 2000-05-31 2004-05-11 Microsoft Corporation Method and system for recovering a failed device on a master-slave bus
AU6420001A (en) 2000-06-02 2001-12-11 Mellanox Technologies Ltd. Dma doorbell
US7103888B1 (en) * 2000-06-06 2006-09-05 Intel Corporation Split model driver using a push-push messaging protocol over a channel based network
US6690757B1 (en) 2000-06-20 2004-02-10 Hewlett-Packard Development Company, L.P. High-speed interconnection adapter having automated lane de-skew
AU2001282477A1 (en) 2000-08-24 2002-03-04 Voltaire Advanced Data Security Ltd. System and method for highly scalable high-speed content-based filtering and load balancing in interconnected fabrics
US6765922B1 (en) 2000-09-08 2004-07-20 Hewlett-Packard Development Company, L.P. Speculative transmit for system area network latency reduction
US20020059052A1 (en) 2000-09-12 2002-05-16 Mellanox Technologies Ltd. Co-simulation of network components
US6725311B1 (en) * 2000-09-14 2004-04-20 Microsoft Corporation Method and apparatus for providing a connection-oriented network over a serial bus
US6349035B1 (en) 2000-09-29 2002-02-19 Compaq Information Technologies Group, L.P. Method and apparatus for tooless mating of liquid cooled cold plate with tapered interposer heat sink
US6718392B1 (en) 2000-10-24 2004-04-06 Hewlett-Packard Development Company, L.P. Queue pair partitioning in distributed computer system
AUPR108900A0 (en) 2000-10-28 2000-11-23 S4 Technology Pty Limited Modular digital transmission assembly
US7089335B2 (en) * 2000-10-30 2006-08-08 Microsoft Corporation Bridging multiple network segments and exposing the multiple network segments as a single network to a higher level networking software on a bridging computing device
US20040213220A1 (en) * 2000-12-28 2004-10-28 Davis Arlin R. Method and device for LAN emulation over infiniband fabrics
US6728743B2 (en) 2001-01-04 2004-04-27 Mellanox Technologies Ltd. Modulo remainder generator
US7254237B1 (en) 2001-01-12 2007-08-07 Slt Logic, Llc System and method for establishing a secure connection
US6950961B2 (en) 2001-02-13 2005-09-27 Hewlett-Packard Development Company, L.P. Highly available, monotonic increasing sequence number generation
JP2002251300A (ja) 2001-02-22 2002-09-06 Hitachi Ltd 障害監視方法及び装置
US20020129293A1 (en) 2001-03-07 2002-09-12 Hutton John F. Scan based multiple ring oscillator structure for on-chip speed measurement
US20020140985A1 (en) 2001-04-02 2002-10-03 Hudson Kevin R. Color calibration for clustered printing
US7543290B2 (en) 2001-04-11 2009-06-02 Mellanox Technologies Ltd. Multiple queue pair access with single doorbell
US8051212B2 (en) * 2001-04-11 2011-11-01 Mellanox Technologies Ltd. Network interface adapter with shared data send resources
US20020162021A1 (en) * 2001-04-30 2002-10-31 Audebert Yves Louis Gabriel Method and system for establishing a remote connection to a personal security device
US7042848B2 (en) 2001-05-04 2006-05-09 Slt Logic Llc System and method for hierarchical policing of flows and subflows of a data stream
US6904057B2 (en) 2001-05-04 2005-06-07 Slt Logic Llc Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification
US6944168B2 (en) 2001-05-04 2005-09-13 Slt Logic Llc System and method for providing transformation of multi-protocol packets in a data stream
US6901052B2 (en) 2001-05-04 2005-05-31 Slt Logic Llc System and method for policing multiple data flows and multi-protocol data flows
US6438130B1 (en) 2001-06-28 2002-08-20 Mellanox Technologies Ltd. Forwarding database cache
US6980328B2 (en) 2001-07-05 2005-12-27 Hewlett-Packard Development Company, L.P. Direction-dependent color conversion in bidirectional printing
US7136397B2 (en) 2001-08-20 2006-11-14 Slt Logic Llc Network architecture and system for delivering bi-directional xDSL based services
US7068604B2 (en) * 2001-08-23 2006-06-27 International Business Machines Corporation Managing memory resident queues to control resources of the systems using the queues
US7151744B2 (en) 2001-09-21 2006-12-19 Slt Logic Llc Multi-service queuing method and apparatus that provides exhaustive arbitration, load balancing, and support for rapid port failover
US7099275B2 (en) 2001-09-21 2006-08-29 Slt Logic Llc Programmable multi-service queue scheduler
US7161719B2 (en) 2001-09-26 2007-01-09 Hewlett-Packard Development Company, L.P. Generalized color calibration architecture and method
US6904534B2 (en) 2001-09-29 2005-06-07 Hewlett-Packard Development Company, L.P. Progressive CPU sleep state duty cycle to limit peak power of multiple computers on shared power distribution unit
US7023584B2 (en) 2001-10-02 2006-04-04 Hewlett-Packard Development Company, L.P. Color calibration method and apparatus
US20030065856A1 (en) * 2001-10-03 2003-04-03 Mellanox Technologies Ltd. Network adapter with multiple event queues
US7054035B2 (en) 2001-10-29 2006-05-30 Hewlett-Packard Development Company, L.P. Method and system for management of color through conversion between color spaces
GB0127865D0 (en) * 2001-11-21 2002-01-16 Sensaura Ltd Device driver system
US7240350B1 (en) 2002-01-07 2007-07-03 Slt Logic, Llc System and method for providing communications to processes
US7093168B2 (en) * 2002-01-22 2006-08-15 Honeywell International, Inc. Signal validation and arbitration system and method
JP3900413B2 (ja) * 2002-02-14 2007-04-04 Kddi株式会社 映像情報伝送方式およびプログラム
CN100541471C (zh) * 2002-02-15 2009-09-16 科学园株式会社 使用基于网络的输入装置的输入特征的个人鉴别方法、以及网络系统
US7719980B2 (en) 2002-02-19 2010-05-18 Broadcom Corporation Method and apparatus for flexible frame processing and classification engine
US7093158B2 (en) 2002-03-11 2006-08-15 Hewlett-Packard Development Company, L.P. Data redundancy in a hot pluggable, large symmetric multi-processor system
US7219121B2 (en) * 2002-03-29 2007-05-15 Microsoft Corporation Symmetrical multiprocessing in multiprocessor systems
US7245627B2 (en) 2002-04-23 2007-07-17 Mellanox Technologies Ltd. Sharing a network interface card among multiple hosts
US6705703B2 (en) 2002-04-24 2004-03-16 Hewlett-Packard Development Company, L.P. Determination of control points for construction of first color space-to-second color space look-up table
US6667918B2 (en) 2002-05-01 2003-12-23 Mellanox Technologies Ltd. Self-repair of embedded memory arrays
US7149227B2 (en) 2002-05-31 2006-12-12 Mellanox Technologies Ltd. Round-robin arbiter with low jitter
AU2003251492A1 (en) 2002-06-11 2003-12-22 Ashish A. Pandya High performance ip processor for tcp/ip, rdma and ip storage applications
US7263103B2 (en) 2002-07-23 2007-08-28 Mellanox Technologies Ltd. Receive queue descriptor pool
US7143412B2 (en) 2002-07-25 2006-11-28 Hewlett-Packard Development Company, L.P. Method and apparatus for optimizing performance in a multi-processing system
US7631106B2 (en) 2002-08-15 2009-12-08 Mellanox Technologies Ltd. Prefetching of receive queue descriptors
US8700724B2 (en) 2002-08-19 2014-04-15 Broadcom Corporation System and method for transferring data over a remote direct memory access (RDMA) network
GB0221464D0 (en) * 2002-09-16 2002-10-23 Cambridge Internetworking Ltd Network interface and protocol
US7386619B1 (en) 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7316017B1 (en) 2003-01-06 2008-01-01 Slt Logic, Llc System and method for allocatiing communications to processors and rescheduling processes in a multiprocessor system
US7190827B2 (en) 2003-01-22 2007-03-13 Hewlett-Packard Development Company, L.P. Color space conversion using interpolation
US8023520B2 (en) 2003-03-27 2011-09-20 Hewlett-Packard Development Company, L.P. Signaling packet
US7103744B2 (en) 2003-03-27 2006-09-05 Hewlett-Packard Development Company, L.P. Binding a memory window to a queue pair
US7502826B2 (en) 2003-03-27 2009-03-10 Hewlett-Packard Development Company, L.P. Atomic operations
US7554993B2 (en) 2003-03-27 2009-06-30 Hewlett-Packard Development Company, L.P. Method and apparatus for performing connection management with multiple stacks
US20040210754A1 (en) 2003-04-16 2004-10-21 Barron Dwight L. Shared security transform device, system and methods
US20040252685A1 (en) 2003-06-13 2004-12-16 Mellanox Technologies Ltd. Channel adapter with integrated switch
US7352893B2 (en) 2003-07-09 2008-04-01 Hewlett-Packard Development Company, L.P. Representing extended color gamut information
US7446901B2 (en) 2003-07-21 2008-11-04 Hewlett-Packard Development Company Conforming output intensities of pens
US7496903B2 (en) 2003-08-12 2009-02-24 Hewlett-Packard Development Company, L.P. Synthesizing application response measurement (ARM) instrumentation
US20050039171A1 (en) 2003-08-12 2005-02-17 Avakian Arra E. Using interceptors and out-of-band data to monitor the performance of Java 2 enterprise edition (J2EE) applications
US7484209B2 (en) 2003-08-12 2009-01-27 Hewlett-Packard Development Company, L.P. Instrumenting java code by modifying bytecodes
US7617376B2 (en) 2003-08-14 2009-11-10 Hewlett-Packard Development Company, L.P. Method and apparatus for accessing a memory
US7757232B2 (en) 2003-08-14 2010-07-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing work request lists
US7404190B2 (en) 2003-09-18 2008-07-22 Hewlett-Packard Development Company, L.P. Method and apparatus for providing notification via multiple completion queue handlers
US20050172181A1 (en) 2004-01-16 2005-08-04 Mellanox Technologies Ltd. System and method for production testing of high speed communications receivers
GB0404696D0 (en) 2004-03-02 2004-04-07 Level 5 Networks Ltd Dual driver interface
US7168784B2 (en) 2004-03-30 2007-01-30 Hewlett-Packard Development Company, L.P. Formation of images
US20050219278A1 (en) 2004-03-30 2005-10-06 Hudson Kevin R Image formation with a flexible number of passes
US7929161B2 (en) 2004-04-15 2011-04-19 Hewlett-Packard Development Company, L.P. Image processing system and method
US7650386B2 (en) 2004-07-29 2010-01-19 Hewlett-Packard Development Company, L.P. Communication among partitioned devices
US20060045098A1 (en) 2004-08-31 2006-03-02 Krause Michael R System for port mapping in a network
US7403535B2 (en) 2004-12-14 2008-07-22 Hewlett-Packard Development Company, L.P. Aggregation of network resources providing offloaded connections between applications over a network
US7551614B2 (en) 2004-12-14 2009-06-23 Hewlett-Packard Development Company, L.P. Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network
US7822837B1 (en) * 2004-12-30 2010-10-26 Packeteer, Inc. Adaptive correlation of service level agreement and network application performance
US20060193318A1 (en) 2005-02-28 2006-08-31 Sriram Narasimhan Method and apparatus for processing inbound and outbound quanta of data
US7674564B2 (en) 2005-04-11 2010-03-09 Hewlett-Packard Development Company, L.P. Color filter
US7580415B2 (en) 2005-04-27 2009-08-25 Hewlett-Packard Development Company, L.P. Aggregation of hybrid network resources operable to support both offloaded and non-offloaded connections
US7580495B2 (en) 2005-06-30 2009-08-25 Slt Logic Llc Mixer-based phase control
US7573967B2 (en) 2005-07-01 2009-08-11 Slt Logic Llc Input threshold adjustment in a synchronous data sampling circuit
US8645964B2 (en) 2005-08-23 2014-02-04 Mellanox Technologies Ltd. System and method for accelerating input/output access operation on a virtual machine
US7813460B2 (en) 2005-09-30 2010-10-12 Slt Logic, Llc High-speed data sampler with input threshold adjustment
US7285996B2 (en) 2005-09-30 2007-10-23 Slt Logic, Llc Delay-locked loop
US9104894B2 (en) 2005-12-16 2015-08-11 Hewlett-Packard Development Company, L.P. Hardware enablement using an interface
US7827442B2 (en) 2006-01-23 2010-11-02 Slt Logic Llc Shelf management controller with hardware/software implemented dual redundant configuration
US7518164B2 (en) 2006-03-29 2009-04-14 Mellanox Technologies Ltd. Current-triggered low turn-on voltage SCR
US9111602B2 (en) 2006-04-07 2015-08-18 Mellanox Technologies, Ltd. Accurate global reference voltage distribution system with local reference voltages referred to local ground and locally supplied voltage
US7514978B2 (en) 2006-05-08 2009-04-07 Mellanox Technologies Ltd. Terminated input buffer with offset cancellation circuit
US7567267B2 (en) 2006-07-31 2009-07-28 Hewlett-Packard Development Company, L.P. System and method for calibrating a beam array of a printer
US7822594B2 (en) 2006-08-07 2010-10-26 Voltaire Ltd. Service-oriented infrastructure management
US8948199B2 (en) 2006-08-30 2015-02-03 Mellanox Technologies Ltd. Fibre channel processing by a host channel adapter
US7801027B2 (en) 2006-08-30 2010-09-21 Mellanox Technologies Ltd. Auto-negotiation by nodes on an infiniband fabric
US8522042B2 (en) 2006-10-31 2013-08-27 Hewlett-Packard Development Company, L.P. Method and apparatus for enforcement of software licence protection
US8296849B2 (en) 2006-10-31 2012-10-23 Hewlett-Packard Development Company, L.P. Method and apparatus for removing homogeneity from execution environment of computing system
US20080115217A1 (en) 2006-10-31 2008-05-15 Hewlett-Packard Development Company, L.P. Method and apparatus for protection of a computer system from malicious code attacks
US8244825B2 (en) 2006-11-06 2012-08-14 Hewlett-Packard Development Company, L.P. Remote direct memory access (RDMA) completion
US8233380B2 (en) 2006-11-06 2012-07-31 Hewlett-Packard Development Company, L.P. RDMA QP simplex switchless connection
US20080135774A1 (en) 2006-12-08 2008-06-12 Asml Netherlands B.V. Scatterometer, a lithographic apparatus and a focus analysis method
US8909742B2 (en) 2006-12-18 2014-12-09 Hewlett-Packard Development Company, L.P. Distributed configuration of network interface cards
US7864787B2 (en) 2007-03-26 2011-01-04 Voltaire Ltd. Device, system and method of multicast communication
US7848322B2 (en) 2007-03-26 2010-12-07 Voltaire Ltd. Device, system and method of UDP communication
US7856488B2 (en) 2007-03-30 2010-12-21 Hewlett-Packard Development Company, L.P. Electronic device profile migration
US20090097200A1 (en) 2007-04-11 2009-04-16 Viswa Sharma Modular blade for providing scalable mechanical, electrical and environmental functionality in the enterprise using advancedtca boards
US8817817B2 (en) 2007-06-06 2014-08-26 Hewlett-Packard Development Company, L.P. Method for ethernet power savings on link aggregated groups
US7802071B2 (en) 2007-07-16 2010-09-21 Voltaire Ltd. Device, system, and method of publishing information to multiple subscribers
US20090165003A1 (en) 2007-12-21 2009-06-25 Van Jacobson System and method for allocating communications to processors and rescheduling processes in a multiprocessor system
WO2009134219A1 (en) 2008-04-28 2009-11-05 Hewlett-Packard Development Company, L.P. Adjustable server-transmission rates over fixed-speed backplane connections within a multi-server enclosure
US8248930B2 (en) 2008-04-29 2012-08-21 Google Inc. Method and apparatus for a network queuing engine and congestion management gateway
US8520686B2 (en) 2008-05-08 2013-08-27 Hewlett-Packard Development Company, L.P. Method for interfacing a fibre channel network with an ethernet based network
US8108538B2 (en) 2008-08-21 2012-01-31 Voltaire Ltd. Device, system, and method of distributing messages
US20100088437A1 (en) 2008-10-06 2010-04-08 Mellanox Technologies Ltd Infiniband adaptive congestion control adaptive marking rate
US7921178B2 (en) 2008-12-04 2011-04-05 Voltaire Ltd. Device, system, and method of accessing storage
US8201168B2 (en) 2008-12-25 2012-06-12 Voltaire Ltd. Virtual input-output connections for machine virtualization
US8370675B2 (en) 2009-01-28 2013-02-05 Mellanox Technologies Ltd. Precise clock synchronization
EP2392106B1 (en) 2009-01-29 2016-01-13 Hewlett-Packard Development Company, L.P. Connecting ports of one or more electronic devices to different subsets of networks based on different operating modes
US8000336B2 (en) 2009-04-21 2011-08-16 Voltaire Ltd. Spanning tree root selection in a hierarchical network
US8255475B2 (en) 2009-04-28 2012-08-28 Mellanox Technologies Ltd. Network interface device with memory management capabilities
US8407478B2 (en) 2009-07-07 2013-03-26 Mellanox Technologies Ltd. Control message signature for device control
US8365057B2 (en) 2009-07-30 2013-01-29 Mellanox Technologies Ltd Processing of data integrity field
US8644140B2 (en) 2009-09-09 2014-02-04 Mellanox Technologies Ltd. Data switch with shared port buffers
US8225182B2 (en) 2009-10-04 2012-07-17 Mellanox Technologies Ltd. Processing of block and transaction signatures
US7934959B2 (en) 2009-10-06 2011-05-03 Mellanox Technologies Ltd. Adapter for pluggable module
WO2011043768A1 (en) 2009-10-07 2011-04-14 Ziebel, As Combination injection string and distributed sensing string
US8576715B2 (en) 2009-10-26 2013-11-05 Mellanox Technologies Ltd. High-performance adaptive routing
US20120039036A1 (en) 2009-10-30 2012-02-16 Krause Michael R Thermal bus bar for a blade enclosure
CN102576313A (zh) 2009-11-02 2012-07-11 惠普发展公司,有限责任合伙企业 采用分布式嵌入式切换的多处理计算
US9110860B2 (en) 2009-11-11 2015-08-18 Mellanox Technologies Tlv Ltd. Topology-aware fabric-based offloading of collective functions
US8811417B2 (en) 2009-11-15 2014-08-19 Mellanox Technologies Ltd. Cross-channel network operation offloading for collective operations
US8213315B2 (en) 2009-11-19 2012-07-03 Mellanox Technologies Ltd. Dynamically-connected transport service
US20110173352A1 (en) 2010-01-13 2011-07-14 Mellanox Technologies Ltd Power Reduction on Idle Communication Lanes

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521177A (zh) * 2011-12-07 2012-06-27 福建星网锐捷网络有限公司 中断处理方法及装置、中央处理器以及处理设备
CN102521177B (zh) * 2011-12-07 2015-01-21 福建星网锐捷网络有限公司 中断处理方法及装置、中央处理器以及处理设备
CN109446102A (zh) * 2018-11-13 2019-03-08 郑州云海信息技术有限公司 一种基于事件的测试脚本调度方法及系统
CN109446102B (zh) * 2018-11-13 2022-10-25 郑州云海信息技术有限公司 一种基于事件的测试脚本调度方法及系统
CN110609499B (zh) * 2019-09-18 2021-06-29 深圳市航顺芯片技术研发有限公司 一种adc实时性采样与非实时性采样的切换方法及设备
CN116827880A (zh) * 2023-08-29 2023-09-29 珠海星云智联科技有限公司 一种缓存空间管理方法及装置
CN116827880B (zh) * 2023-08-29 2023-11-17 珠海星云智联科技有限公司 一种缓存空间管理方法及装置

Also Published As

Publication number Publication date
US11182317B2 (en) 2021-11-23
US11119956B2 (en) 2021-09-14
US7769923B2 (en) 2010-08-03
CN100474255C (zh) 2009-04-01
EP1725942B1 (en) 2015-09-23
WO2005086448A3 (en) 2006-04-27
GB0404696D0 (en) 2004-04-07
US9690724B2 (en) 2017-06-27
WO2005086448A2 (en) 2005-09-15
US20150006772A1 (en) 2015-01-01
US20170308490A1 (en) 2017-10-26
US7610413B2 (en) 2009-10-27
WO2005074611A3 (en) 2007-01-04
CN100549994C (zh) 2009-10-14
US20100192163A1 (en) 2010-07-29
EP1725942A2 (en) 2006-11-29
US20050183093A1 (en) 2005-08-18
US20070030859A1 (en) 2007-02-08
CN1934552A (zh) 2007-03-21
EP1721249A4 (en) 2007-11-07
WO2005074611A8 (en) 2005-10-13
US20050177657A1 (en) 2005-08-11
WO2005074611A2 (en) 2005-08-18
US8131895B2 (en) 2012-03-06
US20200364167A1 (en) 2020-11-19
EP1721249A2 (en) 2006-11-15
US8855137B2 (en) 2014-10-07

Similar Documents

Publication Publication Date Title
CN100474255C (zh) 用于多事件队列的中断管理
CN101198924B (zh) 在完成事件中包括描述符队列空事件的方法和系统
CN101365999B (zh) 发送完成事件批处理
CN101115054B (zh) 用于网络接口控制器的存储器映射的缓冲器
CA2349662C (en) Interrupt architecture for a non-uniform memory access (numa) data processing system
TWI239187B (en) System and method for managing and validating remote keys which correspond to outstanding data transactions
US6938253B2 (en) Multiprocessor communication system and method
US20050138249A1 (en) Inter-process communication mechanism
US6345345B1 (en) Data communications device and associated method for arbitrating access using dynamically programmable arbitration scheme and limits on data transfers
CN101421791B (zh) 用于主机和外围设备之间通信的队列深度管理的方法
EP3770759A1 (en) Wake-up and scheduling of functions with context hints
WO2005036313A2 (en) Queue register configuration structure
GB2409302A (en) Data Communication Mechanism
CN112445737B (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
ASS Succession or assignment of patent right

Owner name: SOLE FLAIR COMMUNICATIONS COMPANY

Free format text: FORMER OWNER: FIFTH-GRADE NETWORK COMPANY

Effective date: 20090612

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20090612

Address after: American California

Patentee after: Solarflare Comm Inc.

Address before: American California

Patentee before: Level 5 Networks Inc.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191220

Address after: California, USA

Patentee after: XILINX INC

Address before: California, USA

Patentee before: Solarflare Comm Inc.