CN101365999A - 发送完成事件批处理 - Google Patents

发送完成事件批处理 Download PDF

Info

Publication number
CN101365999A
CN101365999A CNA2006800088035A CN200680008803A CN101365999A CN 101365999 A CN101365999 A CN 101365999A CN A2006800088035 A CNA2006800088035 A CN A2006800088035A CN 200680008803 A CN200680008803 A CN 200680008803A CN 101365999 A CN101365999 A CN 101365999A
Authority
CN
China
Prior art keywords
descriptor
data buffer
queue
network interface
event
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
CNA2006800088035A
Other languages
English (en)
Other versions
CN101365999B (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 CN101365999A publication Critical patent/CN101365999A/zh
Application granted granted Critical
Publication of CN101365999B publication Critical patent/CN101365999B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9047Buffering arrangements including multiple buffers, e.g. buffer pools
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)

Abstract

本发明涉及发送完成事件批处理。提供了与主机和网络接口装置一起使用的管理数据发送队列的方法。概略地说,主机将数据缓冲区描述符写入发送描述符队列中,并且网络接口装置在完成对发送数据缓冲区的处理时写入事件以通知主机。每个发送完成事件描述符向主机通知多个发送数据缓冲区的完成。

Description

发送完成事件批处理
技术领域
本发明涉及网络接口,更具体地说,涉及使性能极大化的基于队列的网络发送和接收机制。
背景技术
当要在数据信道(例如网络)上在两个装置之间传送数据时,各装置必须具有合适的网络接口以使其可以穿过信道进行通信。通常,该网络基于以太网技术。要在网络上进行通信的装置设置有能够支持网络协议的物理和逻辑要求的网络接口。网络接口的物理硬件部分被称为网络接口卡(NIC),但是它们不需要是卡的形式:例如它们可以是直接安装在主板上的集成电路(IC)和连接器的形式,或者是与计算机系统的其他部件制造在单个集成电路芯片上的宏单元的形式。
大多数计算机系统包括操作系统(OS),用户级应用程序通过该操作系统与网络进行通信。操作系统的被称为内核的部分包括用于在应用程序和NIC特有的装置驱动程序之间翻译命令和数据的协议栈,并且该装置驱动程序用于直接控制NIC。通过在操作系统内核中提供这些功能,可以向用户级应用程序隐藏NIC的复杂性和NIC间的差别。此外,网络硬件和其他系统资源(例如存储器)可由许多应用程序安全地共享,并且能够保护系统免受错误或恶意应用程序的影响。
在典型内核栈系统的操作中,硬件网络接口卡在网络和内核之间进行连接。在内核中,装置驱动程序层直接与NIC进行通信,并且协议层与系统的应用级进行通信。
NIC针对提供给内核的输入数据和要施加给网络的输出数据,存储指向主机存储器中的缓冲区的指针。这些缓冲区被称为RX数据环和TX数据环。NIC对表示RX缓冲环上要由内核读取的下一数据的缓冲区指针进行更新。通过直接存储器存取(DMA)提供TX数据环,并且NIC对表示已被发送的输出数据的缓冲区指针进行更新。NIC可以使用中断向内核发送信号。
输入数据被内核从RX数据环中挑出并继而被处理。通常由内核自身来处理带外数据。利用指针将去往应用程序特有端口的数据添加到该端口所特有的缓冲队列中,该缓冲队列位于内核的私有地址空间中。
对于数据接收,在系统操作期间发生以下步骤:
1、在系统初始化期间,操作系统装置驱动程序创建内核缓冲区并将NIC的RX环初始化为指向这些缓冲区。还从配置脚本向OS通知其IP主机地址。
2、应用程序希望接收网络分组,并且通常创建绑定到端口的套接字,套接字是存在于操作系统内的类似于队列的数据结构。该端口对于给定的网络协议具有在主机内唯一的编号,从而使得以<主机:端口>为地址的网络分组可以传送到正确端口的队列。
3、分组到达网络接口卡(NIC)。NIC通过主机I/O总线(例如PCI总线)将该分组复制到由下一有效RX DMA环指针值所指向的存储器地址。
4、如果没有剩余的DMA指针可用或者到达预定的超时时间,则NIC断言(assert)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处理时,它在主机I/O总线上利用DMA周期访问由该槽的内容所指示的内核缓冲区,然后发送该数据。
过去已经认识到,发送操作和接收操作都会涉及过多的数据移动。已经提出了用来减少由这种数据移动所导致的性能降低的一些方案。例如,参见美国专利第6,246,683号,通过引用将其合并于此。在PCT国际公报第WO 2004/025477A2号中(通过引用将其合并于此),进一步认识到,发送操作和接收操作都会涉及过多的环境切换,这也引起显著的开销。其中描述了用于减少所需环境切换次数的技术。
在其中所描述的机制之中有这样的机制:使用事件队列在主机系统和NIC之间传送控制信息。当网络接口装置经由I/O总线(例如经由PCI总线)而连接到主机系统时,需要在处理器和NIC之间频繁地传送控制信息。通常,控制通信是通过由NIC发出的中断而发起的,该控制通信引起环境切换。此外,该通信经常需要主机系统经由PCI总线从NIC读取控制信息或向NIC写入控制信息,这会导致总线瓶颈。在数据分组通常较短从而导致作为全部网络处理工作的一部分的所需控制工作的量大的网络环境中,该问题尤其严重。
在该PCT公报中描述的实施方式中,“端口”被视为与应用程序绑定的操作系统特有实体,其具有地址码,并能够接收消息。以一端口为地址的一个或更多个输入消息形成一消息队列,该消息队列由操作系统进行处理。操作系统事先已存储了该端口和运行在该操作系统上的应用程序之间的绑定。该用于端口的消息队列中的消息由操作系统进行处理并被操作系统提供给与该端口绑定的应用程序。操作系统可以存储端口与应用程序的多个绑定,从而通过指定适当端口可将输入消息应用于适当的应用程序。端口存在于操作系统内,从而无论对应应用程序的状态如何都可以接收消息并对其进行安全的处理。
在操作系统的操作开始时,操作系统创建用于处理带外消息的队列。该队列可由NIC写入并可具有与该队列相关联的中断。当应用程序绑定到端口时,操作系统创建该端口并将该端口与该应用程序相关联。操作系统还创建用于仅处理该端口的带外消息的队列(事件队列)。然后将用于该端口的带外消息队列存储映射到应用程序的虚拟地址空间中,从而无需进行内核环境切换,该带外消息队列就可以使事件出队(dequeue)。
这些事件队列向NIC进行了登记,并且在NIC上存在与各队列相关联的控制块(并且该控制块被映射到OS或应用程序的地址空间之一或二者中)。
图1中例示了如在该PCT公报中所描述的具有控制块的队列。在所述的实现中,NIC 161经由PCI总线110连接到主机系统。事件队列159存储在NIC 161可以访问的主机存储器160中。与事件队列159相关联的是读指针(RDPTR)162a和写指针(WRPTR)163a,RDPTR 162a和WRPTR 163a指示队列中下一要读取和写入数据的点。指针162a存储在主机存储器160。指针163a存储在NIC 161中。这些指针的映射副本RDPTR’162b和WPTR’163b存储在NIC和存储器之中不同于原始指针的另一方中。在该系统的操作中:
1、NIC 161通过比较存储在本地的RDPTR’和WRPTR,可以确定可用于写入事件队列159的空间。
2、NIC 161生成带外数据并将该带外数据写入队列159。
3、当写入了该数据时,NIC 161更新WRPTR和WRPTR’,从而下一数据将被写在最后一个数据之后。
4、应用程序通过比较从存储器160访问的RDPTR和WRPTR’,来确定可用于读取的空间。
5、应用程序从队列159中读取带外数据并处理消息。
6、应用程序更新RDPTR和RDPTR。
7、如果应用程序需要中断,则它(或者由操作系统代替它)设置控制块164的IRQ 165a位和IRQ’165b位。该控制块存储在主机存储器160中并被映射到NIC中的对应存储器上。如果进行了设置,则NIC还会在上述步骤3生成中断。
通过在应用程序和OS已具有环境时频繁允许应用程序和OS轮询新事件,事件队列机制有助于改善性能;通过仅在需要时才生成中断,减少了环境切换。由于主机系统可以更频繁地从主机存储器中的事件队列中现有的事件而不是直接经由PCI总线从NIC中取得控制信息,因此还减轻了总线瓶颈。
事件队列的使用并没有完全消除I/O总线上的控制流量。具体地说,NIC仍需要生成用于向主机系统通知该NIC已完成了对数据缓冲区的处理以及数据缓冲区现在可以被释放以供重用的事件。各事件描述符不合需要地占用了I/O总线的时间。此外,主机系统对事件的处理仍需要一定的处理器时间,该处理器时间随着事件数量的增加而增加。
发明内容
根据本发明的一个方面,概略地说,已经认识到对于发送数据缓冲区,如果完成通知仅有的目的是非关键的,则可以使完成通知成为非关键功能。在一个实施方式中,仅由主机系统使用发送完成通知来触发相关发送完成缓冲区的释放,并使相关发送缓冲区描述符从发送描述符队列中出队。只要还有足够数量的数据缓冲区可供应用程序使用,并且发送描述符队列具有足够深度,发送完成事件通知就不紧急。因此,NIC累积发送缓冲区完成,并且仅写入一个发送缓冲区完成事件以向主机系统通知完成了多个发送数据缓冲区的传送。
在一个实施方式中,每个发送完成事件表示大于1的固定数量(例如64个)的发送数据缓冲区,并且使得该数量可编程。在不常见的情况下会出现一些例外。在另一实施方式中,使由每个发送完成事件表示的发送数据缓冲区的数量可变。
对发送完成事件通知进行批处理的额外好处是减少了主机系统进行事件处理所需的时间,因为事件处理循环的单次遍历处理了多个发送缓冲区完成。
附图说明
将参照附图针对本发明的具体实施方式对本发明进行描述,在附图中:
图1是如PCT国际公报第WO 2004/025477 A2号所述的具有控制块的队列的框图。
图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。主机子系统224包括:包括至少一个处理器的处理器子系统220、主机存储器子系统222和内核逻辑子系统224。内核逻辑子系统224在处理器子系统220、主机存储器子系统222和通信信道218之间提供桥接。主机子系统214还包括利用通信信道218进行通信的其他装置226。
网络接口卡216提供到外部网络的接口(包括到网络212的接口),并经由网络212与其他计算机系统中的相应接口装置连接。网络218可以包括许多互连的计算机系统和通信链路。这些通信链路可以是有线链路、光链路、无线链路或用于传送信息的任何其他机制。虽然在一个实施方式中网络218是互联网,但是在其他实施方式中,网络218可以是任何适合的计算机网络或网络的组合。在在此描述的一个实施方式中,网络218支持以太网协议。
主机存储器子系统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所指向的位置,并且NIC 216从发送缓冲区链表312中由NIC 216上的缓冲区链表读指针326(对应于主机存储器222中的缓冲区链表读指针316)所指向的位置处读取发送缓冲区描述符。发送缓冲区链表312是“卷绕(wrap-around)”型链表,即超过该链表末端连续增加的指针以类似环形的方式自动绕回到链表的前端。例如,如果该链表具有N个条目,则可以认为读指针和写指针“以N为模”增加。还可以认为这些指针“模增加(modulo increment)”,暗指以链表的长度为模。
与发送缓冲区链表312和发送数据缓冲区310相关联的还有同样具有卷绕结构的发送事件队列318。事件被写入发送事件队列318中由NIC216上的发送事件队列写指针332所确定的位置,并被主机子系统214从发送事件队列中由主机存储器222中的发送事件队列读指针320所确定的位置处读取。只要有可能,图2中的系统就将事件而不是中断用作硬件状态报告方法。为了改善事件传送延迟和总的总线效率,由NIC 216将事件写出到主机存储器222中,而不是由主机子系统214从NIC 216中的位置读取。
发送缓冲区链表312中的读指针316和写指针314在此处被称作“主机中心”的,因为它们表示由主机子系统214观察到的队列状态。在各种实施方式中,主机子系统214可以对这些指针进行比较,以检测队列溢出状况、队列满状况或者队列高或低水印状况,这取决于在该实施方式中需要什么样的队列深度管理。如下文所述,NIC 216还可以将读指针326和写指针324分别保持在发送数据队列310中。NIC上的读指针326和写指针324被称作“装置中心”指针,这是因为它们表示由NIC装置216观察到的队列状态。主机子系统以常规方式使用其主机中心缓冲区链表写指针314对发送缓冲区链表312进行写入,在写入后将主机中心缓冲区链表写指针314模增加,并通知NIC更新其装置中心缓冲区链表写指针324。类似地,NIC使用其装置中心缓冲区链表读指针326从发送缓冲区链表312进行读取,在读取后将装置中心缓冲区读指针326模增加,并通知主机子系统214更新其主机中心缓冲区链表读指针316。因此,虽然进行了努力以使主机中心缓冲区链表读指针与装置中心缓冲区链表读指针同步,并使主机中心缓冲区链表写指针与装置中心缓冲区链表写指针同步,但是仍然可能存在各对中的两个指针没有确切匹配的某些时间点。重要的是,在该简化实施方式中,主机子系统214不保持发送事件队列写指针332的主机中心副本。虽然NIC 216确实保持了发送事件队列读指针320的装置中心副本344,但是其并未用于事件队列深度管理。代替地,该装置中心副本344用于管理针对主机子系统的中断的产生,该中断用于激活发送事件处理程序,如下面更详细地描述的。
NIC 216还包括比较器346,该比较器346对装置中心发送事件队列写指针332中的值与装置中心发送事件队列读指针344中的值进行比较。当这两个值不相等时,比较器346的输出是活动的。NIC 216还包括中断使能寄存器位348和逻辑电路350,该逻辑电路350在中断使能寄存器位348和比较器346的输出都被激活的时候触发中断生成器352。中断产生部件的操作在下文中描述。
除了已经提及的部件之外,NIC216还保持有发送FIFO 340,NIC 216将其从发送数据缓冲区310取得的发送数据写入该发送FIFO 340中。通过物理网络接口(PHY)342将从发送FIFO 340输出的数据引导到网络212上。
网络接口卡216经由(除了别的以外的)I/O总线218与主机存储器222进行通信。I/O总线218优选地是PCI总线,更优选地是称为PCIexpress的这一版本的PCI。在PCI特殊兴趣组的2003年4月15日的“PCIExpress Base Specification 1.0a”中描述了PCI express,通过引用将其合并于此。尽管在主机子系统214和NIC 216之间的某些通信会涉及处理器子系统220,但大多数数据(包括来自发送数据缓冲区310的发送数据)通过内核逻辑子系统224使用直接存储器存取(DMA)协议经由I/O总线218进行通信的。
现在参照图4,与发送队列相似,接收队列存储在主机存储器222中的一系列接收数据缓冲区410中。这些接收数据缓冲区借助卷绕接收缓冲区链表412而链接在一起。当主机子系统214希望使另外的缓冲区可用于接受接收数据时,主机子系统214将新接收数据缓冲区的标识写入接收缓冲区链表412中由主机存储器222中的主机中心缓冲区链表写指针414所指向的位置。NIC 216从接收缓冲区链表412中由NIC 216上的装置中心缓冲区链表读指针426(对应于主机存储器222中的主机中心缓冲区链表读指针416)所指向的位置处读取接收缓冲区描述符。
与接收缓冲区链表412和接收数据缓冲区410相关联的还有卷绕接收事件队列418。事件被写入接收事件队列418中由NIC 216上的接收事件队列写指针432所确定的位置,并从接收事件队列418中由主机存储器222中的接收事件队列读指针420所确定的位置处读取。对于发送事件队列读指针和发送事件队列写指针,主机子系统以常规方式使用其主机中心缓冲区链表写指针414对接收缓冲区链表412进行写入,在写入后将主机中心缓冲区链表写指针414模增加,并通知NIC更新其装置中心缓冲区链表写指针424。类似地,NIC使用其装置中心缓冲区链表读指针426从接收缓冲区链表412进行读取,在读取后将装置中心缓冲区读指针426模增加,并通知主机子系统214更新其主机中心缓冲区链表读指针416。重要的是,在该简化实施方式中,主机子系统214不保持接收事件队列写指针432的主机中心副本。在发送侧,虽然NIC 216确实保持了接收事件队列读指针420的装置中心副本444,但是该装置中心副本444用于管理针对主机子系统的用于激活接收事件处理程序的中断的产生,而不是用于事件队列深度管理。
NIC 216还包括比较器446,该比较器446对装置中心接收事件队列写指针432中的值与装置中心接收事件队列读指针444中的值进行比较。当这两个值不相等时,比较器446的输出是活动的。NIC 216还包括中断使能寄存器位448和逻辑电路450,逻辑电路450在中断使能寄存器位448和比较器446的输出都被激活的时候触发中断产生器452。
除了图3的发送装置和上述的接收侧部件之外,NIC 216还保持有接收FIFO 440,NIC 216将从PHY 342接收的数据写入接收FIFO 440中。根据接收缓冲区链表412的当前条目,NIC 216将从接收FIFO 440输出的数据写入接收数据缓冲区410中。
发送队列操作,简化实施方式
在操作中,多个不同的功能并发地工作。图5、图6和图7是例示了为了采用图3的结构来发送数据而发生的功能的流程图。对于此处的所有流程图,应该理解,这些流程图中的许多步骤可以合并、并行地执行或按不同顺序执行,而不影响所实现的功能。此外,虽然此处所描述的功能发生在不同的“模块”中,但是应该理解,如果有可能的话,实际的实现不需要按同样的方式进行“模块化”。
在图5中,主机发送事件管理模块从更高级软件接收到发送数据缓冲区310中的一个或更多个新缓冲区准备好进行发送的指示(步骤510)。该模块还可以在轮询循环或定时器到期时被周期性地激活(步骤512)。通常基于对于理解本发明不重要的外部因素来决定推送(push)发送缓冲区的定时以及一次推送多少个发送缓冲区。并非仅在每当更高级软件填满一发送缓冲区时才推送该缓冲区。
在步骤514中,为了保证发送事件队列318不溢出,主机子系统214确定在发送事件队列318中当前可用的空间量。主机子系统214不会按将要产生的发送完成事件的最大数量来将多于发送事件队列318中所能容纳的用于发送的数据缓冲区入队。通常主机子系统214将进行入队以供发送的数据缓冲区的最大数量由B*(x-z)-y给出,其中,x是发送事件队列318中的条目总数;z是可能写入事件队列318中的其他类型事件(例如管理事件)的预定最大数量;y是先前入队并仍未解决的发送数据缓冲区的数量;并且B是可由发送事件队列318中的每个发送完成事件表示的发送数据缓冲区的最小数量。
在一个实施方式中,x的值(即发送事件队列318中的条目总数)是预定的并且是固定的。在另一实施方式中,主机子系统214可以根据以下因素来确定和修改发送事件队列的大小x:诸如在给定网络212上的数据率的情况下可以多快地生成事件,以及主机子系统214能够多快地处理接收到的事件。
在一个实施方式中,z的值是NIC 216被允许写入发送事件队列318中的未被清除的管理事件的预定最大数量。优选的是,根据NIC 216中的管理事件源的总数而给定z,假设各个源可以对不多于一个的未清除事件进行断言;来自该源的另外的事件被丢失或被延迟。更一般地,z是Ei之和,i=1...s,其中s是管理事件源的数量,并且Ei(对于i=1...s)是在任意给定时间点各个第i一个这样的源能够具有的未决事件的最大数量。
在一个实施方式中,B(可由发送事件队列318中的每个发送完成事件表示的发送数据缓冲区的最小数量)是单位数量(B=1)。即,传送到NIC 216的每个发送数据缓冲区生成一个对应的发送完成事件。在另一实施方式中,每个发送完成事件总是隐性地表示大于1的固定数量(例如64个)的发送数据缓冲区;在这种情况下,B是该固定数量。在这种实施方式中,传送到NIC 216的每组B个发送数据缓冲区生成一个对应的发送完成事件。在第三实施方式中,每个发送完成事件表示可变数量的完成的发送数据缓冲区,但该可变数量不大于预定最大值也不小于预定最小值;在这种情况下,B是该最小数量。发送完成事件本身指示其所表示的发送数据缓冲区的数量。甚至在该第三实施方式中,B可能小至1。
在一优选实施方式中,B可由主机子系统214编程,并且之后是固定的。与可变实施方式相比,该实施方式与上述“固定”实施方式更相似,因为由一个发送完成事件所表示的发送数据缓冲区的数量是恒定的,并且主机和NIC都知到该数量。没有引起可变实施方式的复杂性。
y的值(先前入队并仍未解决的发送数据缓冲区的数量)并不是基于对发送事件队列读指针和写指针进行任何比较来确定的,而是基于主机子系统214对主机子系统先前“授权”NIC 216写入的发送事件队列条目的数量的历史知识以及主机子系统对主机子系统已“消耗”的这种发送事件队列条目的数量的历史知识而确定的。主机通过指示NIC 216发送数据的行为,“授权”NIC 216写发送事件队列条目。主机通过将发送数据缓冲区描述符(其也可被视为DMA命令)推送到发送缓冲区链表312中来发出这种指示。因此,可以根据先前入队供发送的数据缓冲区的数量来确定主机对先前“授权”NIC 216写入的发送事件队列条目的数量的历史知识。具体地说,先前被授权的发送事件队列条目的数量等于1/B乘以先前入队供发送的发送数据缓冲区的数量。主机对主机子系统已“消耗”的发送事件队列条目的数量的历史知识仅仅是1/B乘以由实际接收到发送事件队列318中的发送完成事件所表示的发送数据缓冲区传送的数量,但是仅在每个发送完成事件所表示的发送数据缓冲区的数量固定的实施方式中才是这样的。在该情况下,主机子系统214将y确定为先前入队供发送的发送数据缓冲区的数量,该数量小于B乘以实际接收到发送事件队列318中的发送完成事件的数量。在一个实施方式中,通过从主机中心发送缓冲区链表写指针314中模减主机中心发送缓冲区链表读指针316,来确定y。
在其中由每个发送完成事件表示的发送数据缓冲区的数量可变的实施方式中,根据由实际接收到发送事件队列318中的发送完成事件所表示的任何固定数量的发送数据缓冲区传送,不能确定主机对主机子系统已消耗的发送事件队列条目的数量的历史知识。在该情况下采用另一机制进行该确定。
在确定了发送事件队列318中当前可用的空间量后,在步骤516中,主机子系统214确定一个数“M”,即,就绪的发送数据缓冲区的数量与如在步骤514中所确定的可由发送完成事件在发送事件队列318的可用空间中表示的发送数据缓冲区的最小数量二者中的较小者。
在步骤518中,确定M是否大于或等于某个最小阈值。在一个实施方式中,该阈值为1,这意味着每当一新发送数据缓冲区准备好进行发送并且在发送事件队列318中有任何可用空间时,针对发送事件队列318的事件将被授权。逐个地对事件进行授权会在I/O总线218上增加显著的额外开销,但因此在更优选的实施方式中,为该阈值选择一较大的数。如果M小于该阈值,则主机发送事件队列管理模块500只是停止活动以等待下一激活事件(步骤530)。
如果M大于或等于最小阈值,则在步骤520中,主机子系统214“授权”NIC将M/B个新发送事件写入发送事件队列318。该授权是通过将就绪的发送数据缓冲区描述符写入发送缓冲区链表312而隐性地发生的,因此该授权需要很少或不需要I/O总线218上的额外开销。具体地说,步骤520包括步骤522,在步骤522中主机子系统214将其主机中心缓冲区链表写指针314更新(模增加)M个条目。在步骤524中,主机子系统214将M个就绪的发送数据缓冲区描述符写入发送缓冲区链表312中的由主机中心缓冲区链表写指针314先前(在步骤522之前)指定的条目开始的位置。对主机中心缓冲区链表写指针的更新先于将M个发送数据缓冲区描述符入队,以避免竟态条件,由此主机子系统214在将新的发送数据缓冲区描述符入队之后潜伏起来,并且NIC 216在主机214返回来更新写指针之前取得发送数据缓冲区内容。在步骤526中,主机子系统214向NIC 216通知经更新的写指针,并且在步骤218中,NIC 216更新其自身的装置中心缓冲区链表写指针324。在一个实施方式中,步骤526和步骤528被合并成一个步骤,在该步骤中主机子系统214将经更新的写指针写入装置中心发送缓冲区链表写指针324的存储器映射位置。
在步骤530中,主机发送事件队列管理模块停止活动以等待下一激活事件。可以看到,NIC 216根据装置中心发送缓冲区链表读指针326和装置中心发送缓冲区链表写指针324之间的模差而隐含地知道发送事件队列318中的空间的可用性。NIC知道它可以将那么多的发送事件写入发送事件队列318而不会使其溢出,因为只有发送事件队列318中已有可用来容纳任何得到的发送完成事件的空间,主机子系统214才会将缓冲区描述符写入发送缓冲区链表312中。
图6是例示了在NIC 216上发起的用于向网络212发送数据的功能的流程图。NIC发送数据模块600在TX FIFO低水印(LWM)条件610下被激活。它还可以通过根据轮询循环或者定时器的届满而进行的选择而被周期性地激活(步骤612)。
在步骤620中,NIC 216首先确定位于发送缓冲区链表312中并准备好供获取的发送数据缓冲区描述符的数量。根据从装置中心缓冲区链表写指针324中按摸减去装置中心缓冲区链表读指针326,来进行该确定。NIC根据其自身的指向TX FIFO 340的读指针和写指针还知道在其自身的TX FIFO 340中的可用空间。在步骤622,NIC确定M,即,发送就绪缓冲区描述符的数量和TX FIFO 340中的可用空间二者中的较小者。因此,M是目前可以复制到TX FIFO 340中的发送数据缓冲区描述符的数量。
在步骤626中,NIC 216继续从发送缓冲区链表312中的从由装置中心缓冲区链表读指针326所指示的条目开始的位置读取M个缓冲区描述符。在步骤628中,NIC从主机存储器中的发送数据缓冲区310中的按这些缓冲区描述符所识别的缓冲区获取数据。由于从发送数据缓冲区310获取数据是利用DMA经由I/O总线218进行的,所以在本文中,发送缓冲区描述符有时被称为DMA描述符或DMA命令。M个缓冲区描述符自身的获取也是利用DMA经由I/O总线218实现的。
要注意,在一不同的实施方式中,M个缓冲区描述符的读取可以与发送数据的读取交织或流水线式地执行,而不是作为分立的原子步骤执行的。还要注意的是,从利用已在FIFO 340中的缓冲区描述符而识别的发送数据缓冲区获取数据,不用等到低水印或一阈值个数的缓冲区才获取。仅对从发送缓冲区链表312中获取缓冲区描述符进行延迟以供批处理;并且如果NIC 216已经用完了要发送的数据,则甚至不将它们延迟以供批处理。
在步骤630中,NIC更新装置中心缓冲区链表读指针326。在一实施方式中,NIC 216并不明确地更新相应的主机中心缓冲区链表读指针316,因为该通知作为完成事件传送的结果而隐性或显性地发生。
在图6的实施方式中,每个发送完成事件可以表示多个数据缓冲区完成。除了下述某些较为少见的情况之外,由每个发送完成事件所表示的数据缓冲区完成的数量是一可编程但之后固定的数B。因此,NIC 216将多个发送完成事件“分批”成一批,从而优化了I/O总线218的使用。此外,虽然在某些常规DMA命令队列实现中,直到控制器试图获取下一DMA命令并发现队列为空才会发生队列空警报的发现和报告,但是当NIC 216认为其已经使用了发送队列中的最后一个缓冲区描述符时就会检测并报告警报。该“所获取的最后一个缓冲区”条件与最后的成批发送完成事件合并到单个事件描述符中。在图6的随后步骤中例示了这两种优化。
具体地说,NIC 216在步骤640中确定其是否认为已经在步骤628中获取了利用发送缓冲区链表312中的描述符而识别的最后一个发送数据缓冲区。如果M(NIC在步骤626中从发送缓冲区链表中读取的缓冲区描述符的数量)等于步骤620中的发送缓冲区链表中的发送缓冲区描述符的数量,则该条件为真。如果不相等,即NIC知道在发送缓冲区链表312中还存在更多发送缓冲区描述符,则此时NIC写到发送事件队列318的任何发送完成事件都不设置tx_desc_q_empty标志。
在步骤642中,NIC将N与B进行比较,N是一个表示已从主机存储器获取的超过了在先前写到发送事件队列318的成批发送完成事件中已报告的量的发送缓冲区的数量的值。如果N<B,则NIC发送数据模块600只是停止活动以等待下一激活事件(步骤644)。未决发送缓冲区完成仅被累积并且直到下次写入发送完成事件时才报告给主机子系统214。另一方面,如果在步骤642中N>=B,则在步骤646中NIC 216将表示(总计)B的整数倍个发送数据缓冲区的成批发送完成事件写入发送事件队列318中从由装置中心发送事件队列写指针所确定的条目开始的位置。因此,在步骤646中写入的成批发送完成事件的数量将是N/B的整数部分,并且直到下次写入这种完成事件时才将任何余数报告给主机子系统214。发送完成事件描述符格式包括“tx_desc_q_empty”标志,但在步骤646中写入的发送完成事件中,并未设置该标志,这是因为NIC 216(在步骤640中)已确定在发送缓冲区链表312中仍有另外的发送缓冲区描述符。
在一个实施方式中,NIC确定N=B并且每当NIC的装置中心缓冲区链表写指针324是B的整数倍时写入成批发送完成事件。
要注意,当完成从主机存储器222到发送FIFO 340的数据传送时NIC 216将发送完成事件写入发送事件队列318中。由于通常较高级应用软件并不关心传输错误,因此NIC 216直到数据确实被发送到网络212上才等待。另一实施方式可能直到将数据发送到网络上的过程中出现后续步骤(例如网络接口装置完成了将数据发送到网络上),才向主机子系统通知“发送完成”。如此处所采用的那样,如果在一具体实施方式中这种下游步骤的通知暗示NIC已经完成了从发送数据缓冲区获取数据,则这种通知被认为“包括”如下步骤:向主机子系统通知网络接口装置完成了从发送数据缓冲区获得数据。
返回到步骤640,如果NIC 216认为在步骤628中已经获取了利用发送缓冲区链表312中的描述符而识别的最后一个发送数据缓冲区,则在报告发送完成事件之前,直到N>=B时NIC才等待。代替地,在步骤648中NIC将足够的成批发送完成事件写入发送事件队列318中从由装置中心发送事件队列写指针332开始的位置以覆盖所有N个未决缓冲区完成。因此,如果N是B的整数倍,则在步骤648中将N/B个发送完成事件写入,而如果N不是B的整数倍,则在步骤648中将INT(N/B)+1个发送完成事件写入。无论在步骤648中写入发送完成事件的数量是多少,将设置最后一个发送完成事件的tx_desc_q_empty标志。
应理解,在N不是B的整数倍的情况下,步骤648中写入最后一个发送完成事件将表示少于B个的发送缓冲区完成。要注意,在一个实施方式中,主机无需特殊的通知来了解这一点,因为主机已经知道其发送缓冲区链表的全深。主机知道每个发送完成事件表示B与发送缓冲区链表中剩余的描述符数量二者之中的较小者。然而,在另一实施方式中,唯独依靠发送缓冲区链表中剩余的描述符的数量来确定由最后一个完成事件所表示的缓冲区完成的数量可能产生竟态条件,例如在NIC 216最后在步骤626中从链表获取了缓冲区描述符之后主机将更多缓冲区描述符入队到发送缓冲区链表312中的情况。为了防止这种竟态条件,发送完成事件格式还包括字段(tx_desc_ptr),NIC 216将其装置中心缓冲区链表读指针326复制在该字段中。主机可以根据(1/B)乘以在发送完成事件中所报告的装置中心缓冲区链表读指针和主机中心缓冲区链表读指针316之间的差而得到的小数部分,来确定由最后一个完成事件所表示的缓冲区完成的数量。作为另一种选择,主机可以简单地根据在发送完成事件中所报告的装置中心缓冲区链表读指针来更新其主机中心缓冲区链表读指针316,而不单独计算由接收到的发送完成事件所表示的缓冲区完成的数量。
在各种实施方式中,除了发送描述符队列空条件以外的其他条件也可能导致NIC写入覆盖少于B个发送缓冲区的发送完成事件。一个这种其他条件可能是发送队列冲刷(flush)操作的完成。对于每个这种条件,提供了一种使得主机子系统能够知道发送缓冲区链表312中的哪些描述符被成批发送完成事件所覆盖的机制。此外在各种实施方式中,也可以对除了数据传送完成事件之外的其他重复事件进行批处理。示例候选项包括(但不限于)向主机子系统通知各种配置完成操作的事件,例如如下所述的更新缓冲区描述符表1310中的条目的主机命令。
如果在步骤646或648中向发送事件队列318中写入了任何发送完成事件,则在步骤634中NIC 216相应地更新其自身的发送事件队列写指针。在步骤634中更新装置中心发送事件队列写指针332可能会导致激活主机发送事件处理程序的中断的产生(步骤636),将参照图7进行讨论。从图3中的逻辑电路中可以看出,如果装置中心发送事件队列写指针332先前等于装置中心发送事件队列读指针344,则步骤634中的更新会使比较器346的输出转变到活动状态。如果这一事件发生时中断使能位348是活动的,则中断生成器352将产生中断。如果在步骤634中的更新发生时读指针和写指针先前不相等,则将不产生新的中断,这是因为比较器346的输出已经处于活动状态。要注意,写指针322的更新在某些情况下会使比较器346转变到不活动状态,尤其是写指针已经卷绕并即将追上读指针的情况。但这并非逻辑电路350需要处理的情况,因为如下所述,算法被设计成如果该情况发生则中断使能位348将总是不活动的。
在步骤636后,NIC发送数据模块600去激活(步骤644)。
如所提及的,无论需要多少发送完成事件来表示M个发送数据缓冲区的完成,NIC 216都知道它可以通过重复步骤632而将其写入发送事件队列318中,甚至无需参考装置中心发送事件队列读指针344。NIC 216知道这一点是因为主机子系统214只有在对于表示所有未决发送数据缓冲区的完成的足够数量的发送完成事件而言在发送事件队列318中已经有足够空间的情况下,才会将缓冲区描述符写入发送缓冲区链表312中。
此外如所提及的,NIC不明确地向主机子系统214通知经更新的发送事件队列写指针值,因为主机不保持发送事件队列写指针的本地版本。主机不是根据比较指向发送事件队列318的本地读指针和写指针,而是通过如前所述地比较指向发送缓冲区链表312的主机中心读指针316和主机中心写指针314来确定发送事件队列318中的可用空间。
图7是例示了主机发送事件处理程序模块700的有关功能的流程图。模块700在接收到在步骤636(图6)中产生的中断时被激活(步骤710),或者在通过轮询循环或定时器届满而进行周期性选择时被激活(步骤712)。
最初,主机发送事件处理程序实现故障保险机制以确保主机子系统214和NIC 216针对发送事件队列318的状态而正确地工作。具体地说,在特定时刻,发送事件队列318中的所有条目都被初始化为“清除状态”值。在一个实施方式中,清除状态为零,但在另一实施方式中,可以采用清除状态的不同表示。写入事件队列318中的事件描述符将不同于清除值。每当从事件队列318获取一事件并进行处理时,主机子系统214将清除状态值写入事件队列的该条目。然后,在处理下一事件之前,主机子系统214从刚处理的条目中重新获取值并检查该值是否仍处于清除状态。如果为否,则NIC 216已经或将要使发送事件队列318溢出。如果主机子系统214和NIC 216是都准确地遵循本文所述协议的SW,则这种情况应该从不发生,但是在某些实施方式中希望有这种故障保险机制。
因此,在步骤714中,主机子系统214首先获取在发送事件队列318中恰位于由事件队列读指针320当前指定的位置之前的位置处的事件描述符。这是发送事件队列318中的从其获取最后处理过的事件的位置。在步骤716中,确定该事件描述符是否保持在清除状态下。如果为否,则报告队列溢出状况(步骤718)。
如果重新获取的事件描述符保持在清除状态下,则在步骤720中,主机子系统214获取在事件队列中由发送事件队列读指针320指定的位置处的事件描述符。如果该新事件处于清除状态(步骤722),则发送事件队列318还不为空。在步骤726中,确定该新事件是否为发送完成事件。在一个实施方式中,发送事件队列318不能包含除了发送完成事件之外的任何事件,但在另一实施方式中则可以。因此,如果当前事件是除了发送完成事件之外的事件,例如管理事件,则在步骤728中对其进行处理
如果当前事件是发送完成事件,则依赖于实施方式,其可以表示针对固定或可变数量的发送数据缓冲区的数据传送的完成。在任一情况下,在步骤730中,主机子系统214将发送缓冲区链表312的主机中心缓冲区链表读指针316模增加当前发送完成事件中表示的缓冲区的数量。这是一种这样的机制,通过该机制主机子系统214了解NIC 216已经更新了其自身的装置中心缓冲区链表读指针326。然而,在一个实施方式中,NIC可以明确地在发送完成事件中指定其经更新的装置中心缓冲区链表读指针326。后一机制可以用来代替前一机制或除了前一机制之外也采用后一机制。
此外在步骤730中,一旦主机增加主机中心链表读指针316使其超过了特定发送数据缓冲区描述符,主机也将所标识的发送缓冲区释放回池中。最终,在缓冲区被较高级软件用新数据重新填满后,主机将数据缓冲区描述符重新写入发送缓冲区链表312中以将其重新入队以供经由NIC 216进行发送。
在步骤732中,由于先前所描述的原因,主机子系统214将发送事件队列318中利用当前发送事件队列读指针所识别的位置处的事件描述符清除,并且在步骤734中,主机子系统214将发送事件队列读指针320模增加。随后该模块循环回到步骤720以获取下一事件描述符并如此进行下去,直到获取了清除的条目并且该模块停止活动为止(步骤724)。
如果在步骤722中确定了所获取的下一事件描述符被清除,则此时发送事件队列318不再包含待处理事件。在一个实施方式中,主机发送事件处理程序700随后仅停止活动以等待下一激活触发(步骤724)。至少出于队列深度管理的目的,主机子系统214无需向NIC 216通知经更新的主机中心发送事件队列读指针,这是因为NIC不是通过比较指向发送事件队列318的本地读指针和写指针,而是通过如前所述地使得(主机)不授权将多于当时可用的空间能够容纳的量的事件描述符写入发送事件队列318中,来避免使发送事件队列318溢出。
然而,在一个优选实施方式中,如下文中更详细地描述的,主机存储器子系统却这样做来通知NIC 216,作为管理事件队列中断的手段。因此,在步骤723中,如果主机中心发送事件队列读指针320已经发生改变,则主机将经更新的指针值写入NIC的装置中心发送事件队列写指针。然后,在步骤724中,主机发送事件处理程序700停止活动。
接收队列操作,简化实施方式
图8至图11是例示了采用图4的结构来实现接收数据的功能的流程图。接收队列操作在许多方面与如上所述的发送队列操作类似,因此此处将省略已描述过的操作的一些方面。在图8中,主机接收事件管理模块从较高级软件接收到在数据缓冲区410中有新数据缓冲区为空并可用于接收数据的指示(步骤811)。该模块也响应于主机接收到如下所述的接收缓冲区链表空事件而被激活(步骤810)。该模块也可以在轮询循环或定时器届满时被周期性地激活(步骤812)。在步骤814中,主机子系统214确定接收事件队列418中当前可用的空间量。对于发送事件队列318,推送接收缓冲区的定时主要取决于对于理解本发明并不重要的外部因素。主机子系统214按照此处描述的方式根据这些(但是有限的)因素将请求的那么多的接收缓冲区推送到接收缓冲区链表412上,以保证接收事件队列418不会溢出。因此,主机子系统214不会按将要产生的接收完成事件的最大数量来将多于接收事件队列418中所能容纳的用于接收数据的数据缓冲区入队。通常,主机子系统214将入队的用于接收数据的数据缓冲区的最大数量由B×(x-z)-y给出,其中x是接收事件队列418中的条目总数,z是可写入事件队列418中的其他类型事件的预定最大数量,y是先前入队但仍未解决的接收数据缓冲区的数量,并且B是可以由接收事件队列418中的每个接收完成事件表示的接收数据缓冲区的最小数量。
在各种实施方式中,可以与上述针对发送队列的操作类似地构造x,y,z和B的值。它们不需要具有相同的值。具体地说,针对y(先前入队但仍未解决的接收数据缓冲区的数量),该值并不基于接收事件队列读指针和写指针的任何比较而确定,而是基于主机子系统214对主机子系统先前授权NIC 216写入的接收事件队列条目的数量的历史知识以及主机子系统对主机子系统已经消耗的这种接收事件队列条目的数量的历史知识来确定的。可以根据主机先前入队用于接收的数据缓冲区的数量来确定主机对先前授权NIC 216写入的接收事件队列条目的数量的历史知识。因此,主机子系统214将y确定为先前入队用于接收的数据缓冲区的数量,该数量小于由实际接收到接收事件队列418中的接收完成事件所表示的数据缓冲区的数量。在一个实施方式中,通过从主机中心缓冲区链表写指针414中模减主机中心缓冲区链表读指针416来确定y。
在确定了接收事件队列418中当前可用的空间量后,在步骤816中主机子系统214确定一个数“M”,即,可用于将接收数据入队的数据缓冲区的数量和可由接收完成时间在如步骤814中所确定的接收事件队列418中的可用空间中表示的接收数据缓冲区的最小数量二者中的较小者。
在步骤818中,确定M是否大于或等于某最小阈值。优选的是,该最小阈值是1,但是在其他实施方式中可以为该阈值选择一较大的值。如果M小于该阈值,则主机接收事件队列管理模块800只是停止活动以等待下一激活事件(步骤830)。
如果M大于或等于该最小阈值,则在步骤820中,主机子系统214“授权”NIC将M/B个新接收事件写入接收事件队列418。该授权是通过将就绪的接收数据缓冲区描述符写入接收缓冲区链表412中而隐性地实现的,因此需要很少或不需要I/O总线218上的额外开销。具体地说,步骤820包括步骤822,在步骤822中主机子系统214将其主机中心缓冲区链表写指针414更新(模增加)M个条目。在步骤824中,主机子系统214将M个可用接收数据缓冲区描述符写入接收缓冲区链表412中从由主机中心缓冲区链表写指针414先前(在步骤822之前)指定的条目处开始的位置。像在发送侧那样,对主机中心缓冲区链表写指针的更新先于将M个接收数据缓冲区描述符入队,以避免竟态条件,由此主机子系统214在将新的接收数据缓冲区描述符入队之后潜伏起来,并且在主机214返回以更新写指针之前NIC 216将接收数据写入这些缓冲区。在步骤826中,主机子系统214向NIC 216通知经更新的写指针,并且在步骤828中,NIC 216更新其自身的装置中心缓冲区链表写指针424。在一个实施方式中,步骤826和步骤828被合并成一个步骤,在该步骤中主机子系统214将经更新的写指针写入装置中心接收缓冲区链表写指针424的存储器映射位置。
在步骤830中,主机接收事件队列管理模块停止活动以等待下一激活事件。可以看到,NIC 216根据指向接收缓冲区链表412的装置中心读指针426和写指针424之间的模差而隐含地知道接收事件队列418中的空间可用性。NIC知道它可以将那么多的接收事件写入接收事件队列418而不会使其溢出,因为主机子系统214只有在接收事件队列418中有可用以容纳任何得到的接收完成事件的空间的情况下,才会将缓冲区描述符写入接收缓冲区链表412中。
图9是例示了在从网络212接收到数据时在NIC 216上发起的功能的流程图。输入数据被置于RX FIFO 440中,当到达高水印时,NIC接收数据模块900被激活(步骤910)。与在发送侧不同,NIC 216并不将固定数量的接收数据缓冲区完成分批到各接收完成事件中。然而在一个实施方式中,NIC 216确实等待以在一分组完成时断言单个接收完成事件,即使该分组占用了多于一个的接收数据缓冲区。
在步骤912中,NIC 216从接收缓冲区链表412的由装置中心缓冲区链表读指针426指定的条目获取下一接收数据缓冲区的描述符和偏移量。在步骤914中,NIC 216更新(模增加)其装置中心缓冲区链表读指针。此时NIC并不向主机214通知该新的读指针,因为该通知将通过如下所述的事件传送而隐性或显性地实现。
在步骤916中,NIC 216将来自输入分组的数据写入由所获取的描述符指定的接收数据缓冲区中以指定偏移量开始的位置。利用DMA继续写入,直到到达当前数据缓冲区的末端或到达输入数据分组的末端,或者到达了两者为止。
像在发送侧那样,当NIC 216认为它已获取并使用了接收队列中的最后一个缓冲区描述符时,就检测到并报告队列空警报。该警报与接收完成事件被合并到单个事件描述符中,从而进一步优化了I/O总线218的使用。
具体地说,NIC 216在步骤918中确定它是否认为它已经使用了利用接收缓冲区链表312中的描述符所识别的最后一个接收缓冲区。NIC可以通过将其装置中心缓冲区链表读指针426与其装置中心缓冲区链表写指针424进行比较而确定此点。如果为否,即NIC知道在接收缓冲区链表412中还存在更多接收缓冲区描述符,则无需警报并且在步骤920中,NIC确定是否已经到达分组末端。如果为否,则NIC接收数据模块900返回到步骤912以获取下一接收数据缓冲区的描述符。在该方式中,没有断言指示接收数据缓冲区满的事件。主机214将基于接收缓冲区链表412中从主机中心RX队列读指针开始的连续识别的接收数据缓冲区来了解哪些接收数据缓冲区是满的。
如果步骤920确定已到达分组末端,则在步骤922中NIC 216断言接收完成事件以覆盖包含来自该分组的数据的所有接收数据缓冲区。像发送的情况那样,接收完成事件描述符格式包括接收描述符队列空标志(“rx_desc_q_empty”),但在步骤922中写入的接收完成事件中,由于NIC216已经(在步骤918中)确定在接收缓冲区链表412中仍存在另外的接收缓冲区描述符,因此并未设置该标志。要注意,在该实施方式中,即使分组数据跨越接收数据缓冲区410中的多个缓冲区,也仅断言一个接收完成事件。通过接收缓冲区链表412中的连续条目将多个缓冲区链接在一起。还要注意的是,如果分组末端与接收缓冲区的末端不一致,则不使用该缓冲区中的剩余空间。
返回到步骤918,如果NIC 216认为在步骤912中已经获取了利用接收缓冲区链表412中的描述符所识别的最后一个接收数据缓冲区,则NIC在报告接收完成事件之前,直到分组末端才等待。代替地,在步骤924中,NIC对覆盖包含来自该分组的数据的所有接收数据缓冲区的接收完成事件进行断言。在该接收完成事件中设置了rx_desc_q_empty标志。如果当此事件发生时在NIC的RX FIFO 440中仍有分组数据,则该分组数据丢失。主机子系统214可以通过将接收完成事件描述符中的接收分组字节数字段(其总是包含整个分组的字节数)与由接收完成事件覆盖的接收数据缓冲区中的字节数进行比较,来检测分组数据丢失。像在发送侧那样,(在一个实施方式中)主机知道接收完成事件所覆盖的接收数据缓冲区是利用接收缓冲区链表412中的如下描述符所识别的那些缓冲区,这些描述符开始于主机中心缓冲区链表读指针416所指向的条目并在主机中心缓冲区链表写指针414所指向的条目之前结束。在另一实施方式中,通过在接收完成事件描述符格式中包括一附加字段来包含NIC 216在步骤914中更新的装置中心缓冲区链表读指针426的副本,可以避免与上面针对发送侧描述的竞态条件相似的竞态条件。随后主机可以将接收完成事件所覆盖的接收数据缓冲区确定为利用接收缓冲区链表412中的如下描述符所识别的那些缓冲区,这些描述符位于在接收完成事件中所报告的主机中心缓冲区链表读指针416和装置中心缓冲区链表读指针之间。
在又一实施方式中,NIC支持多于一个的网络端口。由于相对于将接收缓冲区置入接收缓冲区链表412中的顺序,NIC可以不连续地对接收缓冲区进行填充,因此在这种实施方式中进行接收完成事件批处理更困难。即,NIC可以用来自网络端口1的部分分组来填充利用接收描述符N所识别的缓冲区,然后用来自网络端口2的完整分组来填充利用接收描述符N+1所识别的缓冲区。来自该网络端口1的分组的其他数据将进入下一数据缓冲区。如果要在该实施方式中对接收完成事件进行批处理,则NIC在断言来自网络端口1的分组的完成事件之前可能断言来自网络端口2的分组的完成事件。如果NIC的来自网络端口2的分组的接收完成事件要包括其经更新的接收缓冲区链表读指针以指示所采用的最后一个描述符,并且如果接收完成事件要指示利用接收缓冲区链表412中的如下描述符所识别的所有数据缓冲区的完成,这些描述符开始于主机中心缓冲区链表读指针416所指向的条目并结束于接收完成事件描述符中的装置中心接收缓冲区链表读指针所指向的条目,则主机可能错误地认为利用接收描述符N所识别的缓冲区和利用接收描述符N+1所识别的缓冲区都包含来自同一分组的数据。
为了避免这种情况,本实施方式不对接收完成事件进行批处理。接收完成事件不指示多于一个的接收数据缓冲区的完成。本实施方式支持:标准大小的数据分组,其中数据分组的最大长度相对较小并且接收数据缓冲区至少和最大数据分组长度一样大;和“巨大(jumbo)”数据分组,其中数据分组可以较长并可跨越多于一个的数据缓冲区。给定的接收队列或者是标准模式或者是巨大模式。如果队列是标准模式,则在不发生错误的情况下,所填充的每个接收数据缓冲区将包含分组末端,所以没有接收完成事件将指示多于一个的数据缓冲区的完成从而不会出现问题。如果队列是巨大模式,则由于NIC针对它填充的每个数据缓冲区写入一接收完成事件,因此仍然没有接收完成事件将指示多于一个的数据缓冲区的完成。接收完成事件格式包括NIC设定的“RX_Jumbo_Cont”位,该位用以向主机子系统通知对象数据缓冲区不包含分组末端(即,存在一延续缓冲区)。因此本实施方式不对接收完成事件进行批处理。接收完成事件仍包括NIC的经更新的装置中心接收缓冲区链表读指针426的副本,该装置中心接收缓冲区链表读指针426现在指向来自接收缓冲区链表412的特定描述符,该事件指示该特定描述符的数据缓冲区的完成。接收完成事件格式还指示从其接收分组的NIC端口号。
返回到图9的实施方式,在步骤924和922之后,一旦NIC已断言了接收完成事件,则NIC接收数据模块900返回到不活动状态(步骤926)。
在步骤924和922中,NIC断言包含特定信息的接收完成事件。图10是该步骤的细节的流程图。在步骤1010中,NIC 216将接收完成事件写入接收事件队列418中的开始于由装置中心接收事件队列写指针所确定的条目的位置。在步骤1012中,NIC 216相应地更新其自身的接收事件队列写指针。如所提及的,无论需要多少接收完成事件来表示M个接收数据缓冲区的完成,NIC 216都知道它可以将其写入接收事件队列418,甚至不需要参照装置中心接收事件队列读指针444。NIC 216知道这一点是因为主机子系统214只有在接收事件队列418中已经有可用于足够数量的接收完成事件的空间来表示所有未决接收数据缓冲区的完成的情况下,才会将缓冲区描述符写入接收缓冲区链表412中。
此外如所提及的,由于主机不保持接收事件队列写指针的本地版本,因此NIC不会向主机子系统214明确地通知经更新的接收事件队列写指针值。主机并非根据将指向接收事件队列418的本地读指针和写指针进行比较、而是通过如前所述地将指向接收缓冲区链表412的主机中心读指针416和写指针414进行比较,来确定接收事件队列418中的可用空间。
然而,像在发送侧那样,装置中心接收事件队列写指针432在步骤1012中的更新可能会导致激活主机接收事件处理程序的中断的产生(步骤1014),将针对图11进行讨论。从图4的逻辑电路中可以看出,如果装置中心接收事件队列写指针432先前等于装置中心接收事件队列读指针444,则步骤634中的更新将使比较器446的输出转变到活动状态。如果这一情况发生时中断使能位448是活动的,则中断生成器452将产生中断。如果步骤634中的更新发生时读指针和写指针先前并不相等,则由于比较器446的输出已经处于活动状态,因而不会产生新的中断。像在发送侧那样,逻辑电路450需要处理写指针432的更新使比较器446转变到不活动状态这种情况,因为算法被设计成如果该情况发生则中断使能位448将总是不活动的。
图11是例示了主机接收事件处理程序模块1100的有关功能的流程图。模块1100在接收到在步骤1014(图10)中产生的中断时被激活(步骤1110),或者通过轮询循环或定时器届满而进行在周期性选择时被激活(步骤1112)。
最初,主机接收事件处理程序实现与发送侧所实现的相同的故障保险机制,以确保主机子系统214和NIC 216针对接收事件队列418的状态而正确工作。因此在特定时刻,将接收事件队列418中的所有条目都初始化为清除状态值。在步骤1114中,主机子系统214获取接收事件队列418中恰恰位于事件队列读指针420当前指定的位置之前的位置处的事件描述符,并在步骤1116中,确定该事件描述符是否保持在清除状态。如果为否,则报告队列溢出状况(步骤1118)。
如果重新获取的事件描述符保持在清除状态,则在步骤1120中,主机子系统214在事件队列中由接收事件队列读指针420指定的位置处获取事件描述符。如果该新事件不处于清除状态(步骤1122),则接收事件队列418此时包含待处理事件。在步骤1126中,确定该新事件是否为接收完成事件。在一个实施方式中,接收事件队列418不能包含除了接收完成事件之外的任何事件,但在另一实施方式中可以。因此,如果当前事件是除了接收完成事件之外的事件,例如管理事件,则在步骤1128中对其进行处理。
如果当前事件是发送完成事件,则在步骤1140中主机214确定是否设置了接收缓冲区链表空标志。如果设置了接收缓冲区链表空标志,则该模块(在步骤1142中)触发主机接收事件队列管理模块800以用另外的接收数据缓冲区补充接收缓冲区链表412。在步骤1144中,主机214还确定接收完成事件描述符是否指示了各种错误类型中的任一个。如果为是,则在步骤1146中主机214处理该错误。要注意,实际上可以在步骤1140的接收缓冲区链表空测试之前或之后检测包含在步骤1144中的一些错误类型,一些错误类型可以暂时绕过(由步骤1142触发的)对接收缓冲区链表412中的接收缓冲区描述符的补充,并且一些错误类型可以绕过步骤1148中对数据分组的处理。这种错误处理的细节对于本发明的理解而言并不重要。
在步骤1148中,假设未检测到严重错误,主机214处理新接收到的分组数据。这可能需要将由连续的接收缓冲区链表条目所指定的多个接收数据缓冲区按顺序链接在一起。主机214根据接收缓冲区链表412中由主机中心缓冲区链表读指针416所指向的缓冲区描述符而知道分组的起始缓冲区和偏移量,并且根据接收完成事件中所识别的接收分组字节数、或者根据可能包括在接收完成事件中的装置中心缓冲区链表读指针426的副本而知道的该分组的末端。在处理了这些缓冲区中的分组数据后,主机可以将这些缓冲区释放回池以最终重写入接收缓冲区链表412中,以供不同的输入分组数据重用。
在步骤1150中,如果较高级软件是这样设计的,则主机子系统214可以利用新的可用接收数据缓冲区的描述符对主机中心缓冲区链表读指针416指向的接收缓冲区链表412条目进行重新编程,并可针对直到但不包括指向下一接收分组的数据的开始处的接收缓冲区链表条目的所有连续的后续接收缓冲区链表条目进行同样的操作。在步骤1130中,主机子系统214将接收缓冲区链表412的主机中心缓冲区链表读指针416模增加在当前接收完成事件中表示的缓冲区数量。像在发送侧那样,这是一种这样的机制,通过该机制主机子系统214了解NIC 216已经更新了其自身的装置中心缓冲区链表读指针426。然而,在一个实施方式中,NIC可以明确地在接收完成事件中指定其经更新的装置中心缓冲区链表读指针426。后一机制可以用来代替前一机制或除了前一机制之外还采用后一机制。
在步骤1132中,由于先前所描述的故障保险相关的原因,主机子系统214将接收事件队列418中利用当前接收事件队列读指针所识别的位置处的事件描述符清除,并且在步骤1134中,主机子系统214将接收事件队列读指针420模增加。随后该模块循环回到步骤1120以获取下一事件描述符,并这样运行下去,直到获取了清除的条目并且该模块停止活动为止(步骤1124)。
如果在步骤1122中确定了所获取的下一事件描述符被清除,则此时接收事件队列418不再包含待处理事件。在一个实施方式中,主机接收事件处理程序1100随后将只是停止活动以等待下一激活触发(步骤1124)。至少出于队列深度管理的目的,主机子系统214不需要向NIC 216通知经更新的主机中心接收事件队列读指针,这是因为NIC不是通过比较指向接收事件队列418的本地读指针和写指针、而是通过如前所述地使得(主机)不授权将多于当时可用的空间能够容纳的量的事件描述符写入发送事件队列418中,来避免使接收事件队列418溢出。
然而,在一个优选实施方式中,主机存储器子系统却这样做来通知NIC 216,作为管理事件队列中断的手段。因此,在步骤1123中,如果主机中心接收事件队列读指针420已经发生改变,则主机将经更新的指针值写入NIC的装置中心接收事件队列读指针。然后,在步骤1124中,主机接收事件处理程序1100停止活动。
中断管理
如所提及的,虽然一个实施方式可以通过从不更新主机存储器子系统222中或NIC装置216上的事件队列读指针或写指针的影子副本来利用本发明的多个方面,视情况而定,在另一实施方式中,实际上NIC 216确实针对发送事件队列318和接收事件队列418中的每一个保持了装置中心事件队列读指针344或444。然而,这些读指针仅用于如下文所述的中断管理;NIC 216并不依靠它们来进行事件队列深度管理。此外,在一个实施方式中,将这些读指针用于中断管理仅是主机子系统214的选项。出于下述原因,主机可以仅使用装置中心接收事件队列读指针444,而完全不使用装置中心发送事件队列读指针344。在这种实施方式中,主机从不将事件队列读指针的更新写入装置中心发送事件队列读指针344(即,省略了图7中的步骤723)。
图15是例示了主机子系统214和NIC 216之间的用于管理由NIC216进行的中断产生(用于激活图11的主机接收事件处理程序)的交互的流程图。该交互被设计成所需中断的数量最小化同时还避免可能出现竞态条件。图15中的一些步骤复制了也作为其他流程图的一部分的步骤,但在图15中汇集这些步骤将有助于例示它们与中断管理的关系。
在主机接收事件处理程序1100中,在处理了其从接收事件队列418获取的一个或更多个接收事件后,可以将经更新的接收事件队列读指针写入NIC 216上的装置中心接收事件队列读指针444(步骤1123)。该步骤示为图15中的步骤1508。通过写入这样的值,主机将其观点指示给NIC,即接收事件队列418现在为空。如果NIC 216认为是真,则装置中心接收事件队列读指针434和写指针432现在将是相等的。因此NIC在步骤1510中(用比较器446)比较这两个值,并且如果这两个值相等,则NIC还通过将中断使能位448设定为活动状态来重新使能用于接收事件队列418的中断(步骤1512)。响应于并且自动伴随装置中心接收事件队列读指针的更新,实现中断的重新使能;该经更新值的写入构成了针对利用该新值更新装置中心接收事件队列读指针以及重新使能中断这两者的单个结合指令。随后,随着中断的使能,NIC 216上的接收事件队列中断管理模块停止活动(步骤1514),直到NIC将新的接收完成事件写入接收事件队列418(步骤1010)并相应地更新装置中心接收事件队列写指针432(步骤1012)。现在装置中心接收事件队列读指针444和写指针432不相等,并且在步骤1516中,由于自步骤1512开始的中断仍然使能,所以NIC接收数据模块产生使图11的主机接收事件处理程序激活的中断(如步骤1014中所述)。NIC 216还通过重置中断使能位448而自动禁用(抑制)另外的接收事件队列中断的产生,从而暂时允许NIC接收数据模块将另外的事件写入接收事件队列418中而不产生另外的中断。随后接收事件队列中断管理模块返回步骤1508,等待主机对另一经更新的接收事件队列读指针的下一写入。当该情况发生时,如前所述,NIC再次比较装置中心读指针和写指针是否相等(步骤1510),并随着中断被禁用而再次等待,直到NIC将另一事件写入接收事件队列418(步骤1514)。
如果在步骤1510中NIC 216确定装置中心事件队列读指针和写指针不相等,则这表示NIC 216并不共享主机的关于接收事件队列418现在为空的观点。这是可能发生的,例如,NIC在将更多接收完成事件写入接收事件队列418中(NIC接收数据模块的步骤1010)而主机在主机接收事件处理程序的步骤1122中确定下一获取的事件描述符为空的情况。如果出现该竞态条件,则NIC 216将通过在步骤1510中确定这两个指针并不相等(即,装置中心接收事件队列写指针432在装置中心接收事件队列读指针444之前)而对其进行检测。在该情况下NIC将保持中断为禁用,并将立即产生另一用于激活主机接收事件处理程序的中断(步骤1518)。这使得主机在步骤1122中做出接收事件队列418为空的错误确定的时候有机会处理该进程中的事件。
要注意,NIC接收数据模块可以继续将更多事件写入接收事件队列418中,并且如果主机接收事件处理程序在步骤1122中检测到这些事件,则这些事件将被处理。如果当主机下次向NIC写入经更新的接收事件队列读指针时(步骤1123)这些另外事件中的任何事件仍未解决,则在步骤1510中将再次检测到该新的竞态条件,从而将产生又一中断;依此类推。
如果在一特定实施方式中在发送侧采用事件队列中断管理模块,则与用于发送的机制的实现与上面针对接收事件队列中断管理模块描述的机制(图15)相似。然而,如上面所指出的,在另一实施方式中,中断管理模块仅用于接收侧而不用于发送侧。这是因为在接收侧期望低延迟,但在发送侧低延迟就不那么重要了。在发送侧,减少中断要比迅速接收发送完成事件更重要。在这种实施方式中,上述用于中断管理的所有硬件可以保持在NIC 216上,但主机发送事件处理程序700从不更新装置中心发送事件队列读指针344。因此中断使能位348从不变为活动的,无论读/写指针比较器346的输出为何值,中断生成器352从不产生中断。代替地,仅在定时器届满时或被装置驱动程序中的轮询循环选择时(步骤712),主机发送事件处理程序700才被激活。这使得主机子系统可以做出有关何时以及以何频率对发送事件队列418中的新事件进行轮询的其自身基于软件的决策,而不是通过NIC产生的中断来管理。
在许多实施方式中,步骤1512和步骤1516中的中断的使能和禁用不必是应用于全部外围装置216的功能那样的总体功能。例如,可以通过屏蔽机制实现这些功能。在该意义下,此处所采用的术语“禁用”和“使能”可以与诸如中断屏蔽和中断去屏蔽、以及允许中断和抑制中断之类的术语互换。此外,由于主机事件处理程序通常在将其经更新的事件队列读指针写入NIC 216之后去激活(见步骤1124,图11),等待新的中断以重新激活(步骤1110),因此事件队列读指针的写入也可以被看作是中断请求。本文中,使能中断和中断请求之间并没有差别。
多队列实施方式
本发明在部分协议栈位于操作系统内核和被用户级应用程序直接调用的传输库两者中的网络接口架构中特别有用。在2004年4月21提交的题为“User Level Stack”的第GB048876A0号英国专利申请中描述了这种架构的示例,通过引用将其合并于此。在这种架构中,可以支持许多协议栈,每个协议栈都具有其自身的发送和接收数据结构集合,并且所有的协议栈都得到NIC上的硬件中执行的功能的辅助。
图12是利用NIC 1210上的硬件辅助来支持多协议栈的系统的简化框图。NIC 1210不仅包括常规硬件NIC部分1212,而且还包括多个“虚拟”NIC部分(VNIC)1214。对于操作系统而言,NIC 1210看上去是具有如下两个装置驱动程序的双重功能装置:与常规NIC部分1212通信的常规装置驱动程序1216和与VNIC 1214通信的用户装置驱动程序1218。一般来说,内核1220中的常规协议栈(未示出)使用常规装置驱动程序1216,多个用户级协议栈1222中的每一个使用用户装置驱动程序1218。为多个用户级用户程序(或进程)1224中的每一个创建单独的用户特有协议栈1222。用户级应用程序可以通过调用内核1220与网络212通信,但优选的是它们通过其各自的用户级协议栈1222与网络212通信。
图12的系统比图3和图4的系统更复杂,但对于各单独的发送或接收队列,操作是类似的。这两个实施方式的主要差异来自于图12的实施方式在跟踪多队列的特征和状态方面的复杂性提高。现在将描述这些差异的有关细节。
图13是图12的系统所采用的用以支持各个VNIC 1214的单独的发送队列的各种数据结构的框图。该图表示在主机存储器222中存在哪些结构以及在NIC 216上存在哪些结构。所有发送队列的发送数据缓冲区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而链接在一起成为单个逻辑上相邻的空间。条目1318、1320和1322由主机214进行写入和管理并被视为卷绕环。所以例如,如果主机希望定义具有64k个发送数据缓冲区描述符条目的发送缓冲区链表312,并且每个缓冲区的大小为4k,则主机将在缓冲区描述符表1310中为该发送缓冲区链表分配物理相邻的16个条目的序列。类似地,一个发送事件队列318可能占用主机存储器222中的缓冲区1326、1328和1330。这些缓冲区是不连续的并且可能在主机存储器中是无序的,但是这些缓冲区通过缓冲区描述符表1310中物理相邻的条目1332、1334和1336而链接在一起成为单个逻辑上相邻的卷绕空间。缓冲区描述符表1310按“缓冲区ID”进行索引,并且除了别的以外,其各个条目识别对应缓冲区在主机存储器222中的基地址。
为了跟踪可能同时与LAN 212进行通信的许多用户级应用程序的多个发送缓冲区链表和发送事件队列中的每一个的状态,NIC 216包括发送队列描述符表1340和事件队列描述符表1342。各发送队列(包括其发送数据缓冲区、其发送缓冲区链表及其发送事件队列)具有相应的发送队列ID,该发送队列ID被用作发送队列描述符表1340中的索引。从NIC 216的观点看,发送队列描述符表1340中的指定条目是用于描述该特定发送队列的状态和其他特征的起始点。除了别的以外,每个这种条目识别:
*该队列是内核队列、用户队列还是另一种队列;
*发送缓冲区链表312的大小(其可以包含的发送数据缓冲区描述符的数量);
*与该发送队列相关联的发送事件队列的ID;
*作为发送完成事件的一部分的要返回事件队列的队列“标签”;
*该发送队列在发送缓冲区链表312中的基缓冲区的缓冲区ID;
*该发送队列的指向发送缓冲区链表312的装置中心读指针326和写指针324。
为了从主机存储器222中的特定发送队列获取当前发送数据,NIC216首先使用该特定发送队列的ID在发送队列描述符表1340中查找包含该特定发送队列的发送缓冲区链表312的基缓冲区的缓冲区ID。NIC 216还从相同位置获得指向发送缓冲区链表312的当前装置中心缓冲区链表读指针316。随后其将基缓冲区ID用作缓冲区描述符表1310中的基础,并将装置中心缓冲区链表读指针的高位用作偏移量,以获得包含该特定发送缓冲区链表312的缓冲区在主机存储器222中的基地址。然后,NIC使用该基地址作为基础,并将装置中心缓冲区链表读指针的低位乘以每个描述符所占用的字节数的积作为偏移量,以从主机存储器222中获取该特定发送缓冲区链表312的当前条目。要注意,为了减少对主机存储器222的访问,在一个实施方式中,NIC 216对部分发送缓冲区链表312进行高速缓存。
除了别的之外,该特定发送缓冲区链表312的当前条目包括:
*当前发送数据缓冲区的缓冲区ID;
*当前发送数据缓冲区中的字节偏移量;以及
*要从当前发送数据缓冲区发送的字节数。
随后,NIC 216将当前发送数据缓冲区的缓冲区ID用作缓冲区描述符表1310中的另一索引,以获取包含当前发送数据的缓冲区的缓冲区描述符。要注意,该缓冲区描述符是缓冲区描述符表1310中的单独条目;与包含发送队列或发送事件队列的缓冲区的描述符不同,该缓冲区描述符不是环的一部分。NIC 216获得当前发送数据缓冲区在主机存储器222中的物理地址,然后将该物理地址用作基础,并将来自发送缓冲区链表条目的字节偏移量用作偏移量,以确定当前要发送的数据在主机存储器222中的起始物理地址。
如前所述,由发送队列ID指定的发送队列描述符表1340条目还包括与该特定发送队列相关联的发送事件队列的ID。所有应用程序1224的所有发送事件队列都由发送事件队列描述符表1342中的对应条目进行描述。在NIC 216看来,发送事件队列描述符表1342中的利用来自发送队列描述符表1340中的发送队列ID而识别的条目是用于描述该特定发送事件队列318的状态和其他特征的起始点。除了别的以外,每个这种条目识别:
*该特定发送事件队列318的大小(这是主机在计算发送事件队列318中可用的空间量时所使用的x的值);
*组成该特定事件队列318的基缓冲区的缓冲区ID;
*对应于图3中的中断使能位348的char_ev_enable位;
*该特定事件队列318的发送事件队列写指针332;以及
*该特定事件队列318的发送事件队列读指针。
因此,为了将事件写入与特定发送队列相关联的发送事件队列318,NIC216使用从发送队列描述符表1340中的对应条目获得的发送事件队列ID,在发送事件队列描述符表1342中查找包含该特定发送队列的发送事件队列318的基缓冲区的缓冲区ID。NIC 216还从相同位置获得指向该发送事件队列318的当前发送事件队列写指针332。随后,NIC 216将该基缓冲区ID用作缓冲区描述符表1310中的基础,并将发送事件队列写指针的高位乘以每个描述符所占用的字节数的积用作缓冲区描述符表1310中的偏移量,来获得包含该特定发送事件队列318的当前条目的缓冲区在主机存储器222中的基地址。随后,NIC将该基地址用作基础,并将发送事件队列写指针的低位用作偏移量,以将所期望的事件描述符写入该特定发送事件队列318在主机存储器222中的当前条目中。
注意如图13所示,虽然缓冲区描述符表1310中所示的每个槽(例如1332、1334、1318)表示一个描述符,但是主机存储器222中的每个槽(例如1326、1328、1314)可以表示一内存“页”的信息。例如,一页可以是4k或8k字节长,所以如果发送队列中的一个发送数据缓冲区描述符占据4字节或8字节,则如图13所示的各个槽1312、1314或1316可以容纳512、1k或2k个发送数据缓冲区描述符。
图14是图12的系统所采用的用以支持各VNIC 1214的单独的接收队列的各种数据结构的框图。该图类似于关于发送侧的图,因而此处将不再描述某些类似特征。
像在发送侧那样,所有接收队列的接收数据缓冲区410、接收缓冲区链表412和接收事件队列418都驻留在主机存储器222中并由主机存储器222中彼此不连续并分散的一般化缓冲区组成。在图14中,组成接收数据缓冲区410的缓冲区被表示为“RX DATA BUF #n”,并且组成接收缓冲区链表412的缓冲区被表示为“RX QUEUE BUF #n”。组成接收事件队列418的缓冲区被表示为“RX EV QUEUE BUF #n”。优选的是,将所有协议栈的发送事件队列318和接收事件队列418都组合在一个总的事件队列池中。即,优选的是,将发送事件队列描述符表1342和接收事件队列描述符表1442仅实现为单个表。
此外,像在接收侧那样,可以借助缓冲区描述符表1410中物理相邻的描述符将单独的缓冲区链接在一起成为逻辑上相邻的序列。缓冲区描述符表1410按“缓冲区ID”进行索引,并且除了别的以外,其各条目识别相应缓冲区在主机存储器222中的基地址。
为了跟踪可能同时与LAN 212进行通信的许多用户级应用程序的多个接收缓冲区链表和接收事件队列中的每一个的状态,类似于发送事件队列描述符表1340,NIC 216包括接收队列描述符表1440和事件队列描述符表1442。各接收队列(包括其接收数据缓冲区、其接收缓冲区链表及其接收事件队列)具有相应的接收队列ID,该接收队列ID被用作接收队列描述符表1440中的索引。从NIC 216看来,接收队列描述符表1440中的指定条目是用于描述该特定接收队列的状态和其他特征的起始点。每个这种条目识别大致与以上针对发送队列描述符表1340中的条目所述相同的有关接收队列的信息。
如前所述,由接收队列ID指定的接收队列描述符表1440条目还包括与该特定接收队列相关联的接收事件队列的ID。所有应用程序1224的所有接收事件队列都由接收事件队列描述符表1442中的对应条目进行描述。在NIC 216看来,接收事件队列描述符表1442中的利用来自接收队列描述符表1440的接收队列ID所识别的条目是用于描述该特定接收事件队列418的状态和其他特征的起始点。每个这种条目识别大致与以上针对发送事件队列描述符表1342中的条目所述相同的有关接收事件队列的信息。像在发送侧那样,至少出于事件队列深度管理的目的,该信息不需要包括任何接收事件队列418的装置中心接收事件队列读指针。
除了接收侧的与发送侧结构相对应的结构之外,接收侧还包括过滤表和逻辑块1450。由于NIC 216可以支持用户级应用程序1224和LAN212上的远程代理之间的多个同时连接,并且由于NIC 216采用多个发送和接收队列对这些连接进行支持,因此NIC 216执行的一个功能是将各输入数据分组导向正确的接收队列。除了要注意过滤表和逻辑1450保持分组报头信息和目的接收队列ID之间的对应关系之外,NIC 216做出该确定所采用的机制对于理解本发明并不重要。因此,过滤表和逻辑1450使用来自输入分组的报头信息来确定正确目的接收队列的ID,并使用该接收队列ID在接收队列描述符表1440中进行索引。如以上针对发送侧所述的那样,接收队列ID是NIC 216获得与目的接收队列有关的所有所需信息以正确转发分组数据的起始点。
管理事件
如所提及的,在此处所述的实施方式中将事件用作主要的状态报告方法。事件是从NIC 216中的各种源收集的状态字。如上面针对简化实施方式所描述的,事件可以产生中断,但是如下所述,在图12至图14的实施方式中的中断产生包括另外的间接层级。使中断最小化以减少中断延迟和CPU开销。
此外,如所提及的,发送事件队列描述符表1342和接收事件队列描述符表1442优选地仅被实现为单个表。在一个这种实施方式中,统一的事件队列支持多达4k个事件队列。事件队列0至3专用于最多四个用于内核网络接口驱动程序(称为NET驱动程序)的分组传送的队列,并且事件队列4专用于负责在所有用户队列及其相应协议栈之间进行总体管理和协调的第二内核驱动程序(称为CHAR驱动程序)。
事件具有由事件描述符中的事件代码字段标识的不同类型。事件描述符的其余字段取决于事件类型。已描述的两种事件类型是发送完成事件和接收完成事件;如前所述,它们被分别发送到在发送队列描述符表1340或接收队列描述符表1440中所编程的任一事件队列。其他事件类型是其他非IP LAN协议所特有的。各事件队列还在NIC 216中具有关联定时器,并且这些定时器也可以产生针对其对应事件队列的事件。特定事件(包括大多数管理事件)严格地为CHAR驱动程序事件。这些事件仅被发送到CHAR驱动程序且不被发送到任一用户事件队列。还有另一些事件是CHAR驱动程序或内核驱动程序负责处理的全局事件。事件也可以由CHAR驱动程序或NET驱动程序生成。CHAR驱动程序和NET驱动程序可以生成任何事件队列的任何期望类型的事件。
NIC 216使用单个事件FIFO(未示出)对等待写出到存储器的事件进行缓冲。事件FIFO的深度要小以确保低延迟的传送。当该FIFO满时,所有代理都受到后方压力(get back-pressured)。此外,当从各种源收集事件时,在某些情况下NIC 216能够将多于一个的事件累积到单个事件描述符中。例如这可能是如下情况:用单个事件描述符格式中的不同标志来表示两个不同事件。该过程(此处称为事件“聚合”)有助于减少要写入主机存储器222中的事件队列中的事件描述符的数量。然而,由于主机不能依赖于发生的任何聚合,所以聚合的可能性没有减小主机子系统计算事件队列中可用于容纳发送或接收完成事件的空间量时的值“z”。主机仍需如上所述地在任意给定单时间点根据管理事件源的数量和每个这种源能够具有的未决事件的最大数量来确定z。另一实施方式能够假设一定量的聚合,从而减小z的值。
共享事件队列实施方式
在图3、图4、图13和图14的实施方式中,针对各发送和接收数据队列示出了单独的事件队列。然而,在一优选实施方式中,主机子系统214可以指定单个事件队列来接收与多个不同数据队列有关的事件。指定给单个事件队列的数据队列可以是发送队列、接收队列或这二者。例如,主机子系统可能运行充当网络212上的几束TCP连接的端点的程序线程。该线程通常对于各个连接束会具有单独的发送队列和单独的接收队列,但是通常将仅有一个事件队列用于接收与所有这些发送队列和接收队列相关的事件。作为另一实施例,一个程序线程可能具有多于一个的事件队列,或者几个程序线程可能共用一个事件队列。所有这些变型得到支持。此外,在多队列实施方式中,优选的是,将诸如1342和1442的发送事件队列描述符表和接收事件队列描述符表同样仅实现为单个表。
如所提及的,特定数据队列(分别为发送队列或接收队列)的队列描述符表1340或1440中的条目包括用于识别事件队列ID的字段,在该字段中应写有与特定队列相关的事件。当NIC 216从特定数据队列中消耗了发送数据缓冲区或接收数据缓冲区并希望将完成事件写入适当的事件队列时,NIC 216从该特定数据队列的队列描述符表条目中的该字段中获取适当的事件队列ID。特定数据队列在队列描述符表中的条目还包括队列“标签”,NIC 216将该队列“标签”作为数据包括在完成事件描述符中。通常负责该特定数据队列的程序线程会将一代码写入该标签字段,该线程以后能够(在接收到完成事件时)使用该代码来识别该事件所属的特定数据队列ID。
在共享事件队列实施方式中,当主机发送事件管理模块确定相关事件队列中当前可用于接收属于特定发送队列的接收完成事件的空间量时,z的值是可以写入该相关事件队列的来自其他源的事件的最大数量,这些事件包括属于其他数据队列的可以写入该同一相关事件队列的完成事件。类似地,当接收事件管理模块确定相关事件队列中当前可用于接收属于特定接收队列的完成事件的空间量时,z的值是可以写入该相关事件队列的来自其他源的事件的最大数量,这些事件包括属于其他数据队列的可以写入该同一相关事件队列的完成事件。
换言之,如果将z视为局限于除了完成事件以外的事件,则主机子系统214在任意给定时间入队供发送或接收的数据缓冲区的最大数量由B×(x-z)-y给出(如上所述),其中x是相关事件队列中的条目总数,且B是相关事件队列中的每个完成事件可表示的数据缓冲区的最小数量。然而,现在z的值是可以写入事件队列中的非完成事件的最大数量,且y是先前入队且仍未解决的数据缓冲区的总数。y的值是y1,y2,...yN的和,其中各yi表示先前入队在与特定事件队列相关联的一个对应的不同数据队列中且仍未解决的数据缓冲区的数量。
多队列实施方式中的中断管理
在多队列实施方式中,如以上针对简化实施方式所述地对NET内核队列的中断进行管理。取决于硬件,或者每个内核队列具有其自身的中断,或者两个或更多个内核队列共用一个中断。在后一情况下,共用的中断激活所有进行共用的驱动程序,各进行共用的驱动程序迅速确定其是否负责处理该中断。CHAR驱动程序也可以与一个或更多个NET队列共用一个中断。
然而,用户队列并非操作系统的一部分并且不能接收中断。在本发明的一方面中,可以通过加入一间接层来实现类似的功能。具体地说,在步骤636(对于发送)和步骤1014(对于接收)中,对应的NIC发送和接收数据模块并不直接中断主机中的对应发送和接收事件处理程序。代替地,它们将“用户事件队列唤醒事件”(其包括(通过事件队列ID)识别需要激活的事件队列的字段)写入CHAR驱动程序的事件队列中。在简化实施方式中,由中断使能位348、448对中断进行限制;在多队列实施方式中,通过需要激活的用户级事件队列的事件队列描述符中的char_ev_enable位来限制:将用户事件队列唤醒事件写入CHAR驱动程序的事件队列中。
CHAR驱动程序队列在其忽略了其char_ev_enable位这一方面与用户级队列不同,并且与简化实施方式的不同在于其事件队列包含涉及另一队列的驱动程序的唤醒事件而不是数据传送完成事件(虽然在一个实施方式中CHAR驱动程序事件队列也可以包含数据传送完成事件)。CHAR驱动程序队列与简化实施方式相似,因为它仍在NIC上包括中断使能位。利用该位对中断进行的使能和禁用大致如以上参照图3和图4所述的那样工作。
因此,结合将用户事件队列唤醒事件写入CHAR驱动程序事件队列,仅当CHAR驱动程序中断在那时被使能时NIC 216才针对运行在主机子系统214中的CHAR驱动程序产生中断。随后迅速关闭CHAR驱动程序队列的中断使能位,从而使写入CHAR事件队列的其他用户事件队列唤醒事件不会产生中断。(也不会将其他种类的事件写入CHAR事件队列)。换言之,CHAR事件队列直到CHAR驱动程序请求中断才会产生另外的中断。然而,由于所有中断事件队列以独立的方式工作,因此NET驱动程序队列仍能够产生中断。如以上参照图3和图4所述,当主机中的CHAR驱动程序认为其已清空了CHAR驱动程序事件队列时,CHAR驱动程序将其经更新的装置中心CHAR事件队列读指针写回到NIC 216,NIC 216将该装置中心CHAR事件队列读指针与装置中心写指针进行比较以确定是否重新使能CHAR驱动程序中断(如果这两个指针相等的话)或断言一新的中断(如果这两个驱动程序不相等的话)。从而避免了在以下情况下本来会出现的竟态条件:NIC正在将更多用户事件队列唤醒事件写入CHAR驱动程序事件队列,而主机中的CHAR驱动程序正确定CHAR驱动程序事件队列中的下一获取的描述符为空。
当CHAR驱动程序事件处理程序从CHAR驱动程序事件队列获取用户事件队列唤醒事件时,其继续激活负责在该用户事件队列唤醒事件中标识的事件队列的主机事件处理程序。
在用于中断队列(NET驱动程序队列和CHAR驱动程序队列)的中断管理机制和用于非中断队列(用户队列)的中断管理机制之间存在双重性。如所提及的,用于中断队列的驱动程序使能和禁用(抑制)针对特定队列的中断,而用于非中断队列的驱动程序使能和禁用NIC针对特定队列的唤醒事件写入。这两个过程稍有不同,对于中断队列而言默认状态是将发生中断的状态;在不希望发生中断的时段内需要对中断进行抑制。另一方面,对于非中断队列而言,默认状态是不写入唤醒事件的状态。唤醒事件必须经请求才能发生。然而,在上述实施方式的这两种情况下,使能或禁用中断的机制类似于使能或禁用唤醒事件的机制:结合中断/唤醒事件的发生而禁用/抑制/阻止它们,并且通过将经更新的事件队列读指针写入NIC而重新使能/允许/请求它们。因此在本文中,短语“使能中断”、“允许中断”或“请求中断”并无差别。类似地,此本文中,短语“使能唤醒事件”、“允许唤醒事件”或“请求唤醒事件”没有差别。甚至在用于中断队列的机制和用于非中断队列的机制不同的实施方式中,这些术语在此也没有差别。
可以看出,即使用户级驱动程序无法实际接收中断,通过向CHAR驱动程序发送唤醒事件而提供的用于协调中断的另外的间接层也允许用户级队列及其驱动程序按照和中断操作系统队列大体同样的方式工作。即使在存在可以接收中断的多个驱动程序的实施方式中,该另外的间接层仍是有益的,这是因为它不但有助于使单独针对各事件队列的中断最小化,而且有助于使普遍地针对所有事件队列的中断最小化。
外围装置的向中间事件队列写入事件(“引用”事件)、调用中间事件队列处理程序执行针对不同(“被引用”)事件队列的功能的技术并不限于用于激活被引用队列的处理程序的唤醒事件,其中该处理程序被有意地阻当等待唤醒事件。也不限于中间队列是中断队列而被引用队列不是中断队列的情况。作为示例,在2004年2月3日提交的题为“Dual DriverInterface”的第0404696.7号英国专利申请(通过引用将其合并于此)中描述的一个实施方式中,支持多个内核事件队列。外围装置能够检测到事件已经在队列(被引用队列)中停留了较久时长的情况,这表示该被引用队列被卡住。例如,如果应用程序、驱动程序或者与该队列相关联的传输库发生故障或者终止或者被调度出内存(de-schedule),则队列可能被卡住。响应于这种检测,不发出要由该被引用队列与之相关联的实体进行处理的中断,网络接口装置而是向另一队列(优选地是控制信道的队列)发出一事件(和可选的相关中断)。该“引用”事件表示被卡住队列的性质(即该被卡住队列的指示)和标识。与控制信道相关联的实体(优选地是诸如驱动程序之一的控制实体)优选地被设置为通过访问和释放所指示的队列而对这种消息进行响应。中间队列技术的许多其他用途是明显的。根据所指示的队列被卡住的原因,现在释放的事件队列的处理程序随后可能获取和处理该队列上的一个或更多个事件。
中断假警报的避免
某些I/O总线(例如PCI2.0和PCI-X)支持电平触发中断,其中外围装置通过使信号线进入活动状态而引起中断。在使用电平触发中断的系统中,存在能够产生“假警报”中断的边界条件。考虑如下的情况:外围装置通过使中断信号线进入活动状态而引起中断,并且仅当从主机接收到中断确认时才使其返回不活动电平。如果在向外围装置写入中断确认后,主机中断服务例程在外围装置能够去激活中断信号线之前退出,则主机会将持续活动的信号线解释为新的中断并再次激活事件队列处理程序。如果此时事件队列仍为空,则该新的“假警报”中断将会使主机进行环境切换,而这是不需要的。
因此,在使用电平触发中断的实施方式中,可以如下地使这种假警报的可能性最小化。响应于中断,主机子系统读取NIC上的寄存器以确定多个源中的哪一个发起了该中断。NIC响应于主机子系统对中断源寄存器的读取而将中断线去激活。如果在对中断源寄存器进行读取后产生了更多事件,则NIC可以产生另外的中断,但是不会有中断丢失。在主机子系统将其事件队列读指针写回时中断线是不活动的,因此也不会产生假警报中断。
在上述的多队列实施方式中,就不需要与NIC通信来对唤醒事件解除断言(de-assert)这一方面而言,唤醒事件与电平触发中断相比更类似于边沿触发中断。在主机事件处理程序将其自身去激活之后NIC仍使唤醒事件保持活动是没有风险的,这是因为主机能够以协同的方式停用唤醒事件以及将其自身去激活。因此,根据其性质,假设事件处理程序是正确设计的,在唤醒事件的环境中无需引发假警报问题。然而,针对CHAR驱动程序中断仍可能出现该问题。在这种情况下,一个实施方式针对CHAR驱动程序事件队列采用上述假警报预防机制,并且针对用户事件队列采用上述竞态条件检测和矫正机制。在使用(如在PCI-ExperssI/O总线上的)消息信号中断(MSI)的实施方式中,所有队列仅使用上述竞态条件机制。
如本文所使用的,一项信息的“识别”不一定需要直接指明该项信息。可以按照通过一个或更多个间接层来简单引用实际信息、或者通过识别在一起足以确定实际信息项(例如通过公知算法)的一项或更多项不同信息,而在一字段中“识别”信息。此外,本文中所使用的术语“指示”的意思与“识别”相同。
此外,如本文所使用的,指向存储器中特定位置的“指针”是“识别”存储器中特定位置的信息。在一个实施方式中,该指针包括:用于识别缓冲区描述符表中的条目的第一值,该条目进而识别主机存储器中的缓冲区的基地址;和用于识别到该缓冲区的偏移量的第二值;并且还可包括用来唯一地识别存储器中特定位置所需的其他参数。要注意,由于上述的对“识别”的定义,任何用于识别队列中要读取或写入的“下一”位置的读指针或写指针,也识别了最后读取或最后写入的位置,反之亦然。
如本文所使用的,如果在先信号、事件或值影响了给定信号、事件或值,则该给定信号、事件或值“响应”于该在先信号、事件或值。如果存在插入的处理元素、步骤或时段,则该给定信号、事件或值仍“响应”于该在先信号、事件或值。如果插入的处理元素、步骤或时段结合了多于一个的信号、事件或值,则认为该处理元素或步骤的信号输出“响应”于各个所述信号、事件或值输入。如果给定信号、事件或值与在先信号、事件或值相同,则这仅是仍认为该给定信号、事件或值“响应”于该在先信号、事件或值的退化情况。类似地定义给定信号、事件或值与另一信号、事件或值的“相关性”。
出于例示和说明的目的,已提供了对本发明的优选实施方式的上述描述。并不旨在穷举或将本发明限制为所公开的确切形式。显然,对本领域技术人员来说许多修改和变型是显而易见的。具体地说,不加限制地,在本专利申请的背景技术部分中描述、提出或通过引用而并入的任何和所有变型都通过引用而明确地合并到本文对本发明实施方式的说明中。选择和描述的本文所述的实施方式是为了最好地解释本发明的原理及其实际应用,从而使本领域技术人员能够针对适于所构想的具体用途的各种实施方式和各种变型来理解本发明。本发明的范围旨在由所附权利要求及其等同物来限定。

Claims (28)

1.一种用于管理数据传输的方法,该方法用于能够经由通信信道彼此进行通信的主机子系统和网络接口装置,所述主机子系统具有第一发送描述符队列和第二发送描述符队列,所述方法包括以下步骤:
所述网络接口装置从所述第一发送描述符队列获取第一数据缓冲区描述符,每个所述第一描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从所述第二发送描述符队列获取第二数据缓冲区描述符,每个所述第二描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从利用所获取的各个所述第一数据缓冲区描述符所识别的发送数据缓冲区获取数据;
所述网络接口装置从利用所获取的各个所述第二数据缓冲区描述符所识别的发送数据缓冲区获取数据;
所述网络接口装置将多个第一发送完成事件描述符写入所述主机子系统可访问的第一事件队列中,每个所述第一发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的多个所述发送数据缓冲区获取数据;以及
所述网络接口装置将多个第二发送完成事件描述符写入所述第一事件队列中,每个所述第二发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第二数据缓冲区描述符所识别的多个所述发送数据缓冲区获取数据。
2.根据权利要求1所述的方法,该方法还包括以下步骤:所述主机子系统将数据缓冲区描述符写入所述第一发送描述符队列中,所述主机子系统根据所述第一事件队列中可用于写入第一发送完成事件描述符的空间,来限制其写入所述第一发送描述符队列中的数据缓冲区描述符的数量。
3.根据权利要求1所述的方法,该方法还包括以下步骤:
所述主机子系统从利用第一发送描述符队列写指针所识别的所述第一发送描述符队列中的位置开始将所述第一数据缓冲区描述符写入所述第一发送描述符队列中;
所述主机子系统根据所写入的第一数据缓冲区描述符的数量来更新所述第一发送描述符队列写指针;以及
所述主机子系统响应于所述第一发送完成事件描述符中的通知,更新第一发送描述符队列读指针。
4.根据权利要求3所述的方法,其中,所述第一发送描述符队列包括一卷绕结构,所述方法还包括以下步骤:响应于所述第一发送描述符队列读指针和所述第一发送描述符队列写指针之间的比较,所述主机子系统报告由队列溢出状况、队列满状况、队列高水印状况和队列低水印状况组成的组中的一个成员。
5.根据权利要求1所述的方法,该方法还包括以下步骤:所述主机子系统响应于所述通知之一,使由所述通知表示的多个第一数据缓冲区描述符从所述第一发送描述符队列中出队。
6.根据权利要求5所述的方法,该方法还包括以下步骤:将在所述出队步骤中出队的数据缓冲区描述符重新写入所述第一发送描述符队列中。
7.根据权利要求1所述的方法,其中,利用在所述网络接口装置获取第一数据缓冲区描述符的步骤中获取的第一数据缓冲区描述符所识别的每个所述发送数据缓冲区是所述主机子系统中的存储器的一个对应相邻区域。
8.根据权利要求7所述的方法,其中,存储器的两个所述相邻区域的大小相同。
9.根据权利要求1所述的方法,其中,由每个所述第一发送完成事件描述符表示的发送数据缓冲区的数量是常数。
10.根据权利要求9所述的方法,该方法还包括以下步骤:
对所述常数进行编程;并且随后
所述主机子系统将所述第一数据缓冲区描述符写入所述第一发送描述符队列中。
11.根据权利要求1所述的方法,该方法还包括以下步骤:所述主机子系统将所述第一数据缓冲区描述符写入所述第一发送描述符队列。
12.根据权利要求1所述的方法,其中,所述网络接口装置从利用所获取的各个所述第一数据缓冲区描述符所识别的发送数据缓冲区获取数据的步骤,以及所述网络接口装置从利用所获取的各个所述第二数据缓冲区描述符所识别的发送数据缓冲区获取数据的步骤,共同包括以下步骤:
所述网络接口装置从利用所述第一数据缓冲区描述符中的第一一个所识别的发送数据缓冲区获取数据;
所述网络接口装置随后从利用所述第二数据缓冲区描述符中的第一一个所识别的发送数据缓冲区获取数据;
所述网络接口装置随后从利用所述第一数据缓冲区描述符中的第二一个所识别的发送数据缓冲区获取数据;
利用所述第一数据缓冲区描述符中的第一一个和第二一个两者所识别的发送数据缓冲区都包括在单个所述第一发送完成事件描述符中。
13.根据权利要求1所述的方法,其中,所述主机子系统还具有接收描述符队列,所述方法还包括以下步骤:
所述网络接口装置从所述接收描述符队列获取第三数据缓冲区描述符,所述第三描述符用于识别所述主机子系统中的接收数据缓冲区;
所述网络接口装置将数据写入利用所获取的所述接收数据缓冲区描述符所识别的接收数据缓冲区中;以及
所述网络接口装置将接收完成事件描述符写入所述第一事件队列中,所述接收完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了将数据写入利用所述接收数据缓冲区描述符所识别的接收数据缓冲区中。
14.根据权利要求1所述的方法,其中,所述主机子系统还具有第三发送描述符队列,所述方法还包括以下步骤:
所述网络接口装置从所述第三发送描述符队列获取第三数据缓冲区描述符,每个所述第三描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从利用所获取的各个所述第三数据缓冲区描述符所识别的发送数据缓冲区获取数据;以及
所述网络接口装置将多个第三发送完成事件描述符写入第二事件队列中,每个所述第三发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第三数据缓冲区描述符所识别的至少一个发送数据缓冲区获取数据。
15.一种对能够经由通信信道彼此进行通信的主机子系统和网络接口装置之间的数据传送进行管理的方法,所述主机子系统具有至少一个发送描述符队列,所述方法包括以下步骤:
所述网络接口装置从所述发送描述符队列中的第一一个获取第一数据缓冲区描述符,每个所述第一描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从利用所获取的各个所述第一数据缓冲区描述符所识别的发送数据缓冲区获取数据;以及
所述网络接口装置将多个第一发送完成事件描述符写入所述主机子系统可访问的第一事件队列中,每个所述第一发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的至少一个发送数据缓冲区获取数据,
并且所述第一发送完成事件描述符中的每一特定一个都包含这样的信息,该信息用于识别所述网络接口装置从其获取第一数据缓冲区描述符的所述发送描述符队列,所述第一数据缓冲区描述符用于识别由该特定第一发送完成事件描述符所覆盖的多个发送数据缓冲区。
16.根据权利要求15所述的方法,其中,每个所述发送描述符队列与一个对应队列标签相关联,
并且其中,所述网络接口装置写入多个第一发送完成事件描述符的步骤包括以下步骤:所述网络接口装置将如下的发送描述符队列的队列标签复制到所述第一发送完成事件描述符中的每一特定一个中,所述网络接口装置从该发送描述符队列获取第一数据缓冲区描述符,所述第一数据缓冲区描述符用于识别由该特定第一发送完成事件描述符所覆盖的多个发送数据缓冲区。
17.根据权利要求16所述的方法,该方法还包括所述主机子系统将所述第一数据缓冲区描述符写入所述第一发送描述符队列的步骤。
18.根据权利要求15所述的方法,其中,每个所述第一发送完成事件描述符向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的多个所述发送数据缓冲区获取数据。
19.一种对能够经由通信信道彼此进行通信的主机子系统和网络接口装置之间的数据传送进行管理的方法,所述主机子系统具有至少一个发送描述符队列,每个所述发送描述符队列与一个对应可编程信息字段相关联,所述方法包括以下步骤:
所述网络接口装置从所述发送描述符队列中的第一一个获取第一数据缓冲区描述符,每个所述第一描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从利用所获取的各个所述第一数据缓冲区描述符所识别的发送数据缓冲区获取数据;以及
所述网络接口装置将多个第一发送完成事件描述符写入所述主机子系统可访问的第一事件队列中,每个所述第一发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的至少一个发送数据缓冲区获取数据,
并且所述第一发送完成事件描述符中的每一特定一个都包含从与如下的发送描述符队列相关联的所述可编程信息字段中复制的信息,所述网络接口装置从该发送描述符队列获取所述第一数据缓冲区描述符,所述第一数据缓冲区描述符用于识别由该特定第一发送完成事件描述符所覆盖的多个发送数据缓冲区。
20.根据权利要求19所述的方法,该方法还包括以下步骤:利用能够在至少所有发送描述符队列中唯一地识别所述第一发送描述符队列的信息,对与所述第一发送描述符队列相关联的所述可编程信息字段进行编程。
21.根据权利要求19所述的方法,其中,每个所述第一发送完成事件描述符向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的多个所述发送数据缓冲区获取数据。
22.根据权利要求21所述的方法,该方法还包括以下步骤:所述主机子系统将所述第一数据缓冲区描述符写入所述第一发送描述符队列。
23.一种用于管理数据传输的方法,该方法用于能够经由通信信道彼此进行通信的主机子系统和网络接口装置,所述主机子系统具有第一发送描述符队列和第二描述符队列,所述方法包括以下步骤:
所述网络接口装置从所述第一发送描述符队列获取第一数据缓冲区描述符,每个所述第一描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;
所述网络接口装置从所述第二描述符队列获取第二数据缓冲区描述符,每个所述第二描述符用于识别所述主机子系统中的一个对应数据缓冲区;
所述网络接口装置从利用所获取的各个所述第一数据缓冲区描述符所识别的发送数据缓冲区获取数据;
所述网络接口装置利用通过所获取的各个所述第二数据缓冲区描述符所识别的数据缓冲区来传送数据;
所述网络接口装置将多个第一发送完成事件描述符写入所述主机子系统可访问的第一事件队列中,每个所述第一发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符所识别的多个所述发送数据缓冲区获取数据;以及
所述网络接口装置将多个第二完成事件描述符写入所述第一事件队列中,每个所述第二完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了利用通过所述第二数据缓冲区描述符所识别的至少一个所述数据缓冲区来传送数据。
24.根据权利要求23所述的方法,其中,所述网络接口装置利用通过所获取的各个所述第二数据缓冲区描述符所识别的数据缓冲区来传送数据的步骤包括以下步骤:所述网络接口装置将数据写入利用所获取的各个所述第二数据缓冲区描述符所识别的数据缓冲区中。
25.根据权利要求23所述的方法,其中,所述网络接口装置利用通过所获取的各个所述第二数据缓冲区描述符所识别的数据缓冲区来传送数据的步骤包括以下步骤:所述网络接口装置从利用所获取的各个所述第二数据缓冲区描述符所识别的数据缓冲区获取数据。
26.一种计算装置,该计算装置具有主机子系统,用于与经由外围总线与所述主机子系统进行通信的网络接口装置一起使用,所述主机子系统包括:
第一发送描述符队列,所述第一发送描述符队列具有多个第一数据缓冲区描述符,每个所述第一数据缓冲区描述符用于识别所述主机子系统中的一个对应发送数据缓冲区;和
第一事件队列,所述第一事件队列具有多个第一发送完成事件描述符,每个所述第一发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第一数据缓冲区描述符中的先前多个所识别的多个所述发送数据缓冲区获取数据。
27.根据权利要求26所述的装置,其中,由每个所述第一发送完成事件描述符表示的发送数据缓冲区的数量是常数。
28.根据权利要求26所述的装置,其中,所述主机子系统还包括第二发送描述符队列,所述第二发送描述符队列具有多个第二数据缓冲区描述符,每个所述第二数据缓冲区描述符用于识别所述主机子系统中的一个对应发送数据缓冲区,
其中所述第一事件队列还具有多个第二发送完成事件描述符,每个所述第二发送完成事件描述符用于向所述主机子系统通知:所述网络接口装置完成了从利用所述第二数据缓冲区描述符中的先前多个所识别的多个所述发送数据缓冲区获取数据。
CN2006800088035A 2005-02-03 2006-01-31 发送完成事件批处理 Active CN101365999B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/050,483 US7562366B2 (en) 2005-02-03 2005-02-03 Transmit completion event batching
US11/050,483 2005-02-03
PCT/US2006/003358 WO2006083836A2 (en) 2005-02-03 2006-01-31 Transmit completion event batching

Publications (2)

Publication Number Publication Date
CN101365999A true CN101365999A (zh) 2009-02-11
CN101365999B CN101365999B (zh) 2010-09-22

Family

ID=36758152

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800088035A Active CN101365999B (zh) 2005-02-03 2006-01-31 发送完成事件批处理

Country Status (4)

Country Link
US (1) US7562366B2 (zh)
EP (2) EP1856610B1 (zh)
CN (1) CN101365999B (zh)
WO (1) WO2006083836A2 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102209042A (zh) * 2011-07-21 2011-10-05 迈普通信技术股份有限公司 一种避免先入先出队列溢出的方法及设备
CN103460202A (zh) * 2011-03-31 2013-12-18 英特尔公司 至少部分地通过电路来促进对至少一个控制器命令接口的访问
CN103618809A (zh) * 2013-11-12 2014-03-05 华为技术有限公司 一种虚拟化环境下通信的方法、装置和系统
CN107171929A (zh) * 2017-04-11 2017-09-15 广州市食蚁兽网络技术有限公司 一种情绪发泄实时安抚服务系统
CN108694078A (zh) * 2017-03-31 2018-10-23 慧与发展有限责任合伙企业 基于最近中断请求指示符和工作确认的中断
CN111382109A (zh) * 2018-12-29 2020-07-07 上海寒武纪信息科技有限公司 数据通信方法、装置及相关产品
CN111930650A (zh) * 2020-09-23 2020-11-13 新华三半导体技术有限公司 一种网络流量转发方法及设备
CN113422738A (zh) * 2021-05-18 2021-09-21 上海赫千电子科技有限公司 一种智能主机的mcu通信服务方法

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US8660137B2 (en) * 2005-09-29 2014-02-25 Broadcom Israel Research, Ltd. Method and system for quality of service and congestion management for converged network interface devices
US8635388B2 (en) 2006-03-31 2014-01-21 Broadcom Corporation Method and system for an OS virtualization-aware network interface card
US7496707B2 (en) * 2006-08-22 2009-02-24 International Business Machines Corporation Dynamically scalable queues for performance driven PCI express memory traffic
US8447918B2 (en) 2009-04-08 2013-05-21 Google Inc. Garbage collection for failure prediction and repartitioning
US8566508B2 (en) 2009-04-08 2013-10-22 Google Inc. RAID configuration in a flash memory data storage device
US8032673B2 (en) * 2009-12-14 2011-10-04 Apple Inc. Transaction ID filtering for buffered programmed input/output (PIO) write acknowledgements
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8615622B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Non-standard I/O adapters in a standardized I/O architecture
US8683108B2 (en) 2010-06-23 2014-03-25 International Business Machines Corporation Connected input/output hub management
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8918573B2 (en) 2010-06-23 2014-12-23 International Business Machines Corporation Input/output (I/O) expansion response processing in a peripheral component interconnect express (PCIe) environment
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8745292B2 (en) 2010-06-23 2014-06-03 International Business Machines Corporation System and method for routing I/O expansion requests and responses in a PCIE architecture
US8645606B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Upbound input/output expansion request and response processing in a PCIe architecture
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US8645767B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Scalable I/O adapter function level error detection, isolation, and reporting
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8510599B2 (en) 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8505032B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Operating system notification of actions to be taken responsive to adapter events
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8364813B2 (en) 2010-11-02 2013-01-29 International Business Machines Corporation Administering incident pools for event and alert analysis
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
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
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
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
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
US20130097272A1 (en) 2011-10-18 2013-04-18 International Business Machines Corporation Prioritized 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
CN102780626B (zh) * 2012-07-27 2015-08-19 福建星网锐捷网络有限公司 一种数据转发方法、装置及网络设备
US8976801B2 (en) * 2012-08-01 2015-03-10 Broadcom Corporation Short packet transmission
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
US9459910B1 (en) 2013-03-13 2016-10-04 Emc Corporation Controlling a layered driver
US9436621B1 (en) 2013-03-13 2016-09-06 Emc Corporation Layered device driver
US9378046B1 (en) * 2013-03-13 2016-06-28 Emc Corporation Manipulating hardware using a layered device driver
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
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
US11061840B2 (en) * 2013-09-24 2021-07-13 Red Hat Israel, Ltd. Managing network interface controller-generated interrupts
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
US20150281109A1 (en) * 2014-03-30 2015-10-01 Sachin Saxena System for en-queuing and de-queuing data packets in communication network
KR20160146055A (ko) * 2015-06-11 2016-12-21 현대자동차주식회사 차량 네트워크에서 통신 노드의 동작방법
GB2546343A (en) * 2016-01-15 2017-07-19 Stmicroelectronics (Grenoble2) Sas Apparatus and methods implementing dispatch mechanisms for offloading executable functions
US11671382B2 (en) 2016-06-17 2023-06-06 Intel Corporation Technologies for coordinating access to data packets in a memory
US10341264B2 (en) * 2016-06-30 2019-07-02 Intel Corporation Technologies for scalable packet reception and transmission
US10999209B2 (en) 2017-06-28 2021-05-04 Intel Corporation Technologies for scalable network packet processing with lock-free rings
US20190044809A1 (en) 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
EP3850493A4 (en) 2018-09-10 2022-06-08 GigaIO Networks, Inc. METHOD AND APPARATUS FOR HIGH SPEED DATA BUS CONNECTION AND TISSUE MANAGEMENT
EP3942749A4 (en) 2019-05-23 2023-06-07 Hewlett Packard Enterprise Development LP OPTIMIZED ADAPTIVE ROUTING TO REDUCE THE NUMBER OF JUMPS
US11403247B2 (en) 2019-09-10 2022-08-02 GigaIO Networks, Inc. Methods and apparatus for network interface fabric send/receive operations
US11593288B2 (en) 2019-10-02 2023-02-28 GigalO Networks, Inc. Methods and apparatus for fabric interface polling
EP4049143A4 (en) 2019-10-25 2024-02-21 Gigaio Networks Inc METHODS AND APPARATUS FOR DMA ENGINE DESCRIPTORS FOR HIGH-SPEED DATA SYSTEMS
CN112506676B (zh) * 2020-12-02 2024-04-05 深圳市广和通无线股份有限公司 进程间的数据传输方法、计算机设备和存储介质

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69328320T2 (de) * 1992-01-09 2000-11-30 Cabletron Systems Inc Vorrichtung und Verfahren zur Datenübertragung zu und von einem Wirtrechnersystem
US5751951A (en) * 1995-10-30 1998-05-12 Mitsubishi Electric Information Technology Center America, Inc. Network interface
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
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US7237036B2 (en) * 1997-10-14 2007-06-26 Alacritech, Inc. Fast-path apparatus for receiving data corresponding a TCP connection
US6009478A (en) * 1997-11-04 1999-12-28 Adaptec, Inc. File array communications interface for communicating between a host computer and an adapter
US6246683B1 (en) * 1998-05-01 2001-06-12 3Com Corporation Receive processing with network protocol bypass
US6393457B1 (en) * 1998-07-13 2002-05-21 International Business Machines Corporation Architecture and apparatus for implementing 100 Mbps and GBPS Ethernet adapters
US6718370B1 (en) * 2000-03-31 2004-04-06 Intel Corporation Completion queue management mechanism and method for checking on multiple completion queues and processing completion events
US6988160B2 (en) * 2001-02-12 2006-01-17 P-Cube Ltd. Method and apparatus for efficient messaging between memories across a PCI bus
US7363389B2 (en) * 2001-03-29 2008-04-22 Intel Corporation Apparatus and method for enhanced channel adapter performance through implementation of a completion queue engine and address translation engine
US20030050990A1 (en) * 2001-06-21 2003-03-13 International Business Machines Corporation PCI migration semantic storage I/O
US7245627B2 (en) * 2002-04-23 2007-07-17 Mellanox Technologies Ltd. Sharing a network interface card among multiple hosts
US6988268B2 (en) * 2002-04-30 2006-01-17 Microsoft Corporation IO completion architecture for user-mode networking
US20040010594A1 (en) * 2002-07-11 2004-01-15 International Business Machines Corporation Virtualizing the security parameter index, marker key, frame key, and verification tag
US7307998B1 (en) * 2002-08-27 2007-12-11 3Com Corporation Computer system and network interface supporting dynamically optimized receive buffer queues
GB0221464D0 (en) * 2002-09-16 2002-10-23 Cambridge Internetworking Ltd Network interface and protocol
US7191241B2 (en) * 2002-09-27 2007-03-13 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
US7346026B2 (en) * 2003-01-21 2008-03-18 Texas Instruments Incorporated 4X design for wireless local area network throughput enhancement
US20040252709A1 (en) * 2003-06-11 2004-12-16 Fineberg Samuel A. System having a plurality of threads being allocatable to a send or receive queue
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
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
US20050135395A1 (en) * 2003-12-22 2005-06-23 Fan Kan F. Method and system for pre-pending layer 2 (L2) frame descriptors
US20050141434A1 (en) * 2003-12-24 2005-06-30 Linden Cornett Method, system, and program for managing buffers
US20050249228A1 (en) * 2004-05-05 2005-11-10 Linden Cornett Techniques for providing scalable receive queues
US20050286544A1 (en) * 2004-06-25 2005-12-29 Kitchin Duncan M Scalable transmit scheduling architecture

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103460202A (zh) * 2011-03-31 2013-12-18 英特尔公司 至少部分地通过电路来促进对至少一个控制器命令接口的访问
CN103460202B (zh) * 2011-03-31 2017-02-15 英特尔公司 至少部分地通过电路来促进对至少一个控制器命令接口的访问
CN102209042A (zh) * 2011-07-21 2011-10-05 迈普通信技术股份有限公司 一种避免先入先出队列溢出的方法及设备
CN102209042B (zh) * 2011-07-21 2014-04-16 迈普通信技术股份有限公司 一种避免先入先出队列溢出的方法及设备
CN103618809A (zh) * 2013-11-12 2014-03-05 华为技术有限公司 一种虚拟化环境下通信的方法、装置和系统
CN108694078A (zh) * 2017-03-31 2018-10-23 慧与发展有限责任合伙企业 基于最近中断请求指示符和工作确认的中断
CN108694078B (zh) * 2017-03-31 2022-12-09 慧与发展有限责任合伙企业 计算资源和用于处理中断的系统和方法
CN107171929A (zh) * 2017-04-11 2017-09-15 广州市食蚁兽网络技术有限公司 一种情绪发泄实时安抚服务系统
CN111382109A (zh) * 2018-12-29 2020-07-07 上海寒武纪信息科技有限公司 数据通信方法、装置及相关产品
CN111382109B (zh) * 2018-12-29 2022-12-09 上海寒武纪信息科技有限公司 数据通信方法、装置及相关产品
CN111930650A (zh) * 2020-09-23 2020-11-13 新华三半导体技术有限公司 一种网络流量转发方法及设备
CN113422738A (zh) * 2021-05-18 2021-09-21 上海赫千电子科技有限公司 一种智能主机的mcu通信服务方法
CN113422738B (zh) * 2021-05-18 2023-07-21 上海赫千电子科技有限公司 一种智能主机的mcu通信服务方法

Also Published As

Publication number Publication date
WO2006083836A3 (en) 2008-01-17
EP1856610B1 (en) 2019-05-15
WO2006083836A2 (en) 2006-08-10
US7562366B2 (en) 2009-07-14
EP1856610A2 (en) 2007-11-21
US20060174251A1 (en) 2006-08-03
CN101365999B (zh) 2010-09-22
EP1856610A4 (en) 2009-03-18
EP2362298A1 (en) 2011-08-31

Similar Documents

Publication Publication Date Title
CN101365999B (zh) 发送完成事件批处理
CN100474255C (zh) 用于多事件队列的中断管理
CN101198924B (zh) 在完成事件中包括描述符队列空事件的方法和系统
JPH03126158A (ja) スケジユーリング方法及び装置
CN101115054A (zh) 用于网络接口控制器的存储器映射的缓冲器
EP2761454A1 (en) System and method for providing and managing message queues for multinode applications in a middleware machine environment
TW200901028A (en) Message queuing system for parallel integrated circuit architecture and related method of operation
EP2406723A1 (en) Scalable interface for connecting multiple computer systems which performs parallel mpi header matching
CN101421791B (zh) 用于主机和外围设备之间通信的队列深度管理的方法
CN103019823A (zh) 实现VxWorks与Qt通信的消息队列方法
CN102622271A (zh) 用于多线程处理的使用信号量的方法和设备
US20030014558A1 (en) Batch interrupts handling device, virtual shared memory and multiple concurrent processing device
US20050262055A1 (en) Enforcing message ordering
EP1936514B1 (en) Apparatus and method for controlling issue of requests to another operation processing device
CN107533458A (zh) 基于存储器寄存器中断的信令和消息传递
CN100450050C (zh) 有效的分组处理流水线装置和方法
JP3882791B2 (ja) 計算機システムのノード閉塞装置及びそのトランザクション制御方法
JPH02281361A (ja) プロセッサ間通信機構動作方法及び多重プロセスコンピュータシステム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
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
TA01 Transfer of patent application right

Effective date of registration: 20090612

Address after: American California

Applicant after: Solarflare Comm Inc.

Address before: American California

Applicant before: Level 5 Networks Inc.

C14 Grant of patent or utility model
GR01 Patent grant
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.