具有减少时延的分组处理的套接字管理的制作方法

文档序号:6623536阅读:208来源:国知局
具有减少时延的分组处理的套接字管理的制作方法
【专利摘要】一般地,本公开内容提供用于管理套接字和设备队列以便得到减少时延的分组处理的系统、方法和计算机可读介质。该方法可以包括维护特殊列表,所述特殊列表包括标识设备队列以及用于设备队列中的每一个的关联特殊套接字的条目,所述特殊套接字选自被配置为接收各分组的多个套接字;在特殊列表上忙碌轮询设备队列;从所述多个套接字中的一个接收分组;以及响应于检测到由中断处理模块提供所接收分组,更新特殊列表。所述更新可以包括:标识与所述已接收的分组相关联的设备队列;标识与所述已接收的分组相关联的套接字;以及如果所述已标识的设备队列不在特殊列表上的各条目中的一个上,则在特殊列表上创建新条目,该新条目包括所述已标识的设备队列和所述已标识的套接字。
【专利说明】具有减少时延的分组处理的套接字管理

【技术领域】
[0001] 本公开内容涉及分组处理,且尤其涉及具有增加数量的网络连接的、用于减少时 延的分组处理的套接字和关联设备队列的管理。

【背景技术】
[0002] 网络接口通常提供在网络和主控系统之间的数据分组传递能力。主控系统可以在 网络接口和操作系统或产生和使用数据分组的用户应用/程序的更高层之间采用驱动程 序模块。网络接口通常向驱动程序模块生成中断,以便发送可能要求驱动程序模块注意的 条件,例如数据传递的完成和/或设备队列中新近接收的各分组的可用性。驱动程序模块 中的网络栈处理然后处理在设备队列和更高层之间的分组的传输。在一些实例中,驱动器 调度可以是基于计时器的而非由中断驱动的。在一些环境中,网络连接可以作为被称为网 络套接字(或仅称为套接字)的抽象由系统呈现给用户应用。
[0003] 中断常常在网络接口和用户应用之间的分组的传输中引入附加时延,这是因为它 涉及上下文切换(常见的栈处理通常被设计为用于较高的吞吐量而非较低的时延)。减少 时延的一些实现在与套接字相关联的设备队列上通过系统调用处理(或用户应用或代表 应用的用户空间库)采用了忙碌轮询。然而,在尝试服务多个套接字/连接时,忙碌轮询的 效果随着套接字的数量线性下降,且随着套接字的数量增加(例如高于几百个套接字)而 变得不切实际地低效。

【专利附图】

【附图说明】
[0004] 随着以下【具体实施方式】继续,并且经过参考附图,将明显看出所要求保护的主题 的多种实施方式的特征和优点,附图中相似标号描绘相似部件,附图中:
[0005] 图1阐释与本公开内容一致的一种示例实施方式的最高级系统图;
[0006] 图2阐释与本公开内容一致的一种示例实施方式的框图;
[0007] 图3(a)阐释与本公开内容一致的另一示例实施方式的框图;
[0008] 图3(b)阐释与本公开内容一致的另一示例实施方式的框图;
[0009] 图4阐释与本公开内容一致的一种示例实施方式的操作的流程图;
[0010] 图5阐释与本公开内容一致的另一示例实施方式的操作的流程图;以及
[0011] 图6阐释与本公开内容一致的另一示例实施方式的操作的流程图。
[0012] 尽管下列【具体实施方式】将参考说明性实施方式而进行,但是,本领域中的技术人 员将明显看出许多替代方案、修改以及其变体。

【具体实施方式】
[0013] 通常,本公开内容提供用来管理用于减少的分组处理时延的套接字和关联设备队 列的系统、方法和计算机可读介质。一种系统可以被配置为提供用于确定诸如数据分组的 可用性等的网络事件的多个路径。这些路径可以包括减少时延的忙碌轮询路径和较高时延 (但增加吞吐量)的、中断或计时器驱动的路径。另外,系统调用模块可以被配置为维护被 称为"特殊列表"的列表,该列表把各套接字映射到特殊活动设备队列。计算系统平台,例 如,主控多个用户上下文应用的计算系统平台,可以具有相对大量的开放套接字和相对大 量的硬件设备队列。然而,对于由单个处理器(或可用处理器的子集)提供服务的套接字, 在任何时刻通常仅可以使用若干设备队列。因此,例如,尽管套接字的数量可以超过数千, 但每个处理器中这些套接字可以仅由可能存在的多个设备队列(可能是数百或甚至数千) 中的一个或两个设备队列提供服务。特殊列表给设备队列中的每一个提供在该设备队列和 选自与该队列相关联的多个套接字的一个套接字(例如,通过该队列提供分组)之间的链 路。然后,忙碌轮询可以限于该特殊列表上的设备队列以便增加效率和减少时延,因为不必 要的队列的轮询消耗了额外的时间,如下面将更详细地解释的。
[0014] 减少时延的忙碌轮询模块可以被配置为忙碌轮询设备队列以便以减少的时延把 事件"输入"到栈和系统调用模块。当不存在当前可用事件时,响应于来自用户上下文应用 的请求,例如Linux OS环境(或其他合适的操作系统)中的epoll系统调用,系统调用模 块可以直接忙碌轮询队列,直到事件变得可用,因而减少了沿着这一路径的时延。
[0015] 尽管在本公开内容中描述的各实施方式涉及从网络接口接收的分组,但应明白, 在此描述的概念适用于相对高的吞吐量的任何输入/输出(I/O)系统,诸如例如盘I/O。
[0016] 图1阐释与本公开内容一致的一种示例实施方式的最高级系统图100。网络接口 104被配置为在主控系统106和网络102之间传递数据。网络接口 104通常可以包括处理 介质访问控制(MAC)层协议和物理(PHY)层协议的电路或模块。网络接口 104通常也可以 包括直接存储器访问(DM)引擎。数据传递可以是双向的(S卩,数据被传送到网络和/或从 网络接收收据)。主控系统106可以是任何类型的计算系统或通信设备,例如包括台式机、 工作站、膝上型计算机、平板计算机、电话或智能手机或任何类型的有线或无线平台。主控 系统106可以包括任何数量的处理器(CPU) 108U10或处理器核心。可以驻留在主控存储 器中的减少时延的设备驱动程序模块112可以提供在操作系统(OS)或在主控系统106上 运行的其他软件和网络接口 104之间的接口。
[0017] 如将下面更详细地描述的,通过使用数据描述符、控制寄存器组和/或控制、通信 和/或用于事件发布的任何其他合适的装置,驱动程序模块112可以与网络接口 104连接。 网络接口 104可以包括被配置为完成在主控系统106和网络102之间的数据的传送和接收 的硬件、固件(包括任何类型的可编程电路)和/或软件的任何组合。
[0018] 图2阐释与本公开内容一致的一种示例实施方式的框图200。网络接口 104被示 出为包括一组或多组控制电路202和数据队列204。在一些实施方式中,数据队列可以驻留 在主控系统106上的存储器中。数据队列可以是环形缓冲器或被配置为保存可以包括数据 分组或描述符的数据的其他合适的数据结构,该描述符包括指向数据分组的指针以及与数 据分组相关联的其他信息。每一组控制电路202和数据队列204可以与主控系统106上的 一个或多个相应的处理器108、110相关联。
[0019] 每一处理器108可以主控设备驱动程序模块112,设备驱动程序模块112还可以 包括中断处理程序206、中断或计时器驱动的栈处理模块208和减少时延的忙碌轮询模块 218。处理器108还可以包括网络栈模块212,网络栈模块212被配置为在驱动程序模块112 和系统调用模块214和用户上下文应用处理模块216之间充当接口。网络栈模块212可以 被配置为实现诸如例如传输控制协议(TCP)或用户数据报协议(UDP)等的联网协议。与网 络栈以及用户上下文应用处理模块216结合,系统调用模块214可以被配置为服务于用户 请求并监视用于事件的套接字,下面将更详细地描述这些操作。在一些实施方式中,中断/ 计时器驱动的栈处理模块208可以结合Linux OS的实现来采用半轮询状态机,半轮询状态 机采用有时被称为NAPI (New API的首字母简略词)。基于NAPI的系统可以被配置为取决 于系统负载在中断和计时器驱动的处理之间动态地切换。
[0020] 系统调用模块214提供了一种机制,使得当应用感兴趣的套接字上存在活动(例 如,网络事件)时可以通知用户上下文应用216。网络事件可以由网络栈模块212提供,且 可以包括套接字的标识符以及关于分组到该套接字的路径的信息(例如,模块208或模块 218)。
[0021] 出于下列讨论的目的,将使用Linux OS系统调用epoll来描述与本公开内容一致 的各种实施方式,但本公开内容不限于这种具体的系统调用实现或操作系统。
[0022] 在用户应用和epoll系统调用之间的接口提供了用户应用可以添加到其中并从 其移除要监视的各个文件描述符的虚拟文件。例如,这些文件可以是感兴趣的套接字。尽 管用户感兴趣的各个套接字的身份和数量可以随时间改变,但epoll虚拟文件将通常是引 用所监视的某种数量的文件描述符/套接字的永久性上下文。这种永久性上下文允许使用 更复杂的数据结构和更高效的处理,如下面将描述的。
[0023] 减少时延的忙碌轮询模块218可以被配置为:对于从所支持的设备接收各分组的 每一套接字,监视套接字最近从中接收分组的设备队列。在来自用户应用的读取或轮询请 求没有事情要报告时,这种信息被用来激活对该队列的忙碌轮询。由系统调用模块214例 如以循环方式重复检查已经激活了忙碌轮询的队列,以便得到新的分组、事件或其他数据 的可用性。
[0024] 图3(a)阐释与本公开内容一致的另一示例实施方式的框图300a。系统调用模块 214可以被配置为例如通过诸如以上所描述的epoll等的机制处理网络事件并与网络栈中 的套接字处理交互。系统调用模块214可以使用处理选项1302来实现,处理选项1302对 每一 epoll上下文米用散列表306。该散列表的每一条目与设备队列204中的一个相关联 (如果该设备队列具有正在受到监视的套接字的话),且被链接到特殊套接字308和冲突列 表310,下面将结合图4中所阐释的流程图解释这些操作。
[0025] 图3(b)阐释与本公开内容一致的另一示例实施方式的框图300b。系统调用模块 214可以使用处理选项2304来实现,处理选项2304采用把每一设备队列204链接到特殊套 接字标识符308的特殊列表312,下面将结合图5中阐释的流程图解释这些操作。
[0026] 应明白,在一些实施方式中,代替散列表或列表,可以使用其他类型的数据结构。 可以使用任何合适的数据结构,或者例如可以使用两级散列表,或者一种实现可以使用列 表而不是散列表。
[0027] 图4阐释与本公开内容一致的一种示例实施方式的操作的流程图400。300a的 处理选项1302被阐释为例如由epoll响应于网络事件的到达而执行的操作的流程图400。 此实施方式标识与每一 epoll实例相关联的套接字且维护散列表306,具有用于输入正在 监视的套接字中的一个或多个的每一设备队列的一个条目。这些条目把设备队列映射到特 殊套接字308和冲突列表310。该列表可以被实现为链表,例如,当各条目在列表中的位置 已知时,链表为添加和删除条目提供增加的效率,在这一实施方式中将是这种情况。在通过 epoll登记新套接字时,标识该套接字相关联的设备队列。如果还不存在用于该队列的散 列条目,则创建一个并将其添加到表,且把套接字链接到它。这一套接字变成用于该队列的 "特殊"套接字308。替代地,如果已经存在用于该队列的散列条目,那么,把该套接字添加 到与该队列相关联的套接字的冲突列表310。
[0028] 在从epoll上下文移除套接字时,执行检查以便判断该套接字是否处于用于该设 备队列的冲突列表上,或者,判断套接字是否用于该队列的特殊套接字。如果该套接字处 于冲突列表上,则从该列表移除它。如果套接字是用于该队列的特殊套接字且用于该队列 的冲突列表上不存在其他套接字,那么,删除散列表中用于该队列的条目。然而,如果该冲 突列表上存在其他套接字,那么,从冲突列表移除那些套接字中的一个,并将其链接到散列 表,以便变成用于该队列的新的特殊套接字。
[0029] 减少时延的忙碌轮询模块218和/或系统调用模块214可以把轮询限制在散列表 306中所列出的设备队列。
[0030] 如果与套接字相关联的设备队列改变了,则可以首先移除该套接字,如上所述,且 然后使用新的队列重新登记该套接字。
[0031] 在操作402,分组从设备队列到达套接字上。在操作404,设备队列身份(ID)被验 证为是有效的。之所以这样做是因为,一些设备可能不被配置为支持在本公开内容中描述 的实施方式的特征,或者对于该设备可以简单禁用该选项(例如,由系统管理员关闭)。在 操作406,执行检查,以便判断套接字是否处于用于该队列的冲突列表上。如果不是,那么, 在操作408、410,找到用于该队列的散列表条目,且如果套接字不作为特殊套接字链接到该 队列,那么,在操作412把它被添加到冲突列表。如果不存在用于这一队列的散列表条目, 那么,在操作414添加新条目,且把套接字作为特殊套接字链接到它。
[0032] 例如在分组来自另一网络设备(例如,由于路由改变)时或在网络设备上的队列 指派改变时,套接字与队列的关联可以动态地改变。如在操作416判断的,如果与套接字相 关联的设备队列改变,那么,在操作418到428从该设备队列散列表条目或关联冲突列表移 除该套接字,且然后在操作410开始用新的队列ID重新登记该套接字。
[0033] 图5阐释与本公开内容一致的另一示例实施方式的操作的流程图500。300b的处 理选项2 304被阐释为例如由epoll响应于网络事件的到达而执行的操作的流程图500。在 这一实施方式中,在特殊列表312上仅标识和跟踪特殊套接字,这创建在活动的设备队列 和与那些队列相关联的套接字之间的特殊映射。换句话说,特殊列表312列出用于由epoll 上下文监视的套接字的特殊队列、把它们链接到由该队列支持(输入)的单个套接字。尽 管可以存在多个套接字,但对于期望分组或事件从任何设备队列到达的网络栈,仅跟踪对 于每一队列找到的第一套接字,即特殊套接字。在这一实施方式中,避免了对维护冲突列表 的需要。特殊列表312可以被实现为链表以便促进条目的增加和删除。
[0034] 在分组到达套接字时,做出关于分组是通过中断/计时器驱动的栈处理模块 208 (例如,第一路径)还是通过减少时延的忙碌轮询模块218 (例如,第二路径)到达的判 断。如果分组通过中断/计时器驱动的栈处理模块208到达,则做出检查以便判断该队列 是否处于特殊列表312上,且如果不是,则添加该队列和套接字。这种检查可以是计算上 相对昂贵的测试,这是由于可能需要检查大量的分组。已知通过减少时延的忙碌轮询模块 218的第二路径到达的分组来自正在被轮询的队列(激活忙碌轮询)且因此不需要被测试。 另外,在忙碌轮询活动时,大多数分组(通常多于99.9%的分组)将通过减少时延的忙碌 轮询模块218到达,这得到了增加的效率。因为存在通过中断/计时器驱动的栈处理模块 208到达的相对少量的分组,在忙碌轮询活动时,可以延期昂贵的套接字测试(搜索特殊列 表),直到分组连续两次通过中断路径(第一路径)。这可以把假阳性测试发生率从标称的 0. 1 %减少到标称的0. 0001%。
[0035] 如果与套接字相关联的设备队列改变,且该套接字在特殊列表上,则可以从该列 表移除它。如果存在使用该设备队列的其他套接字,随后将添加它们中的一个,作为在该套 接字上的处理的结果,这将检测到不是通过减少时延的路径(例如,通过中断路径连续两 次提供)来服务它。
[0036] 减少时延的忙碌轮询模块218和/或系统调用模块214可以把轮询限制在特殊列 表312中列出的设备队列。
[0037] 在操作502,分组从设备队列到达套接字上。在操作504、506,如果与该套接字相 关联的设备队列改变(例如,设备队列ID改变)且如果套接字处于特殊列表312上,那么, 在操作508,从列表移除旧的设备队列ID和关联的套接字,且在操作510,该过程继续。否 贝U,在操作516,如果分组未通过中断/计时器驱动的栈处理模块208到达,则该过程完成, 且分组将已经由减少时延的忙碌轮询模块218正确地处理。
[0038] 然而,如果分组通过中断/计时器驱动的栈处理模块208到达,那么,在操作510、 512,如果设备队列ID有效但不在该列表上,则在操作514,该设备队列和套接字将被添加 到列表,且该过程完成。
[0039] 流程图上的粗线条(例如520)指示对于大多数分组(例如多于90%的分组)将 通常执行的路径。
[0040] 在一些实施方式中,可以提供硬件支持,从而以较高效率轮询设备队列。每一 epoll实例可以与被链接到当前由该epoll实例使用的硬件数据队列的硬件事件队列相关 联。这些硬件数据队列是epoll对于它正在监视的套接字(例如特殊列表上的套接字)在 其上期望网络数据和事件到达的队列。该硬件事件队列可以被配置为接收在关联硬件数据 队列中的任何具有可用事件时生成的通知。当epoll添加和移除感兴趣的套接字时,可以 从用于该epoll实例的事件队列添加或移除硬件数据队列。可以维护要监视的数据队列的 列表,例如,如结合图3(a)和图3(b)所描述的。
[0041] 替代地,在一些实施方式中,可以通过可以由设备更新的状态寄存器(或其他数 据结构)提供硬件支持。可以在便于CPU/0S监视的主控存储器位置中复制寄存器的内容。 寄存器可以包含用于与给定的epoll实例(或处理器)相关联的硬件设备队列中的每一个 的状态位。当队列上存在活动(例如,事件)时,可以设置队列的状态位。在超时过期之 后,或者在驱动器已经得知该事件之后,可以通过对寄存器进行写入直接地自动清除该位, 或者通过利用传入分组的处理更新队列状态间接地自动清除该位。替代地,响应于事件,可 以切换状态位(从开到关,以及从关到开)。在这一实施方式中,仅轮询一个位置,即增加效 率的、有效地表示所有套接字的寄存器(或其值的主控存储器副本)。在这里,再次可以维 护要监视的数据队列的列表,例如,如结合图3(a)和图3(b)所描述的。
[0042] 在一些实施方式中,系统调用模块214可以在处理器上执行monitor和mwait指 令(操作码)。monitor和mwait指令可以被配置为把处理器置于空闲模式或睡眠模式,在 写入包含上面提到的状态数据结构的CPU高速缓存行时,可以触发空闲模式或睡眠模式以 便唤醒。这可以是对设备队列的忙碌轮询的更节能的替代。在一些实施方式中,mwait指令 可以是定时mwait指令。可以借助于时间限制机制配置定时mwait指令,诸如例如,以便在 时间阈值已经过期之后触发唤醒。尽管mwait指令可以被用来等待设备队列中的每一个, 但在提供了状态寄存器的各实施方式中,如上所述,mwait指令可以被用来仅等待状态寄存 器。
[0043] 图6阐释与本公开内容一致的另一示例实施方式的操作600的流程图。操作提供 用来管理用于减少分组处理时延的套接字和关联设备队列的方法。在操作610,维护特殊列 表。特殊列表包括标识设备队列和用于设备队列中的每一个的关联特殊套接字的条目,该 特殊套接字选自被配置为接收各分组的多个套接字。在操作620,忙碌轮询特殊列表上的 设备队列。在操作630,从所述多个套接字中的一个接收分组。在操作640,响应于检测到 由中断处理模块提供所述已接收的分组,更新特殊列表。在操作650,该更新包括:标识与 所述已接收的分组相关联的设备队列;标识与所述已接收的分组相关联的套接字;以及如 果所述已标识的设备队列不在特殊列表上的各条目中的一个上,则在特殊列表上创建新条 目,该新条目包括所述已标识的设备队列和所述已标识的套接字。
[0044] 附录A中给出源代码软件的一个说明性实施方式。
[0045] 在此描述的方法的实施方式可以在包括一个或多个存储介质的系统中实现,这些 存储介质上个别地或组合地存储有指令,这些指令在由一个或多个处理器执行时执行这些 方法。在这里,处理器可以包括,例如,系统CPU(例如,核心处理器)和/或可编程电路。因 而,根据在此描述的方法预期操作可以跨越多个物理设备(例如处于若干不同的物理位置 的处理结构)而分布。而且,可以个别地或以子组合执行预期方法操作,如本领域中的技术 人员将理解的。因而,并非每一流程图中的全部操作都需要执行,且本公开内容明确地预期 允许这样的操作的所有子组合,如本领域中的普通技术人员将理解的。
[0046] 存储介质可以包括任何类型的有形介质,例如,任何类型的盘,其包括软盘、光盘、 紧致盘只读存储器(⑶-ROM)、可重写紧致盘(⑶-RW)、数字多用盘(DVD)和磁光盘;半导体 设备,例如只读存储器(ROM)、诸如动态RAM和静态RAM等的随机存取存储器(RAM)、可擦除 可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪速存储器磁或光卡; 或适用于存储电子指令的任何类型的介质。
[0047] 在此处的任何实施方式中所使用的"电路"可以包括,例如,单独地或以任何组合 的硬布线的电路、可编程电路、状态机电路和/或存储由可编程电路执行的指令的固件。在 一些实施方式中,电路可以被实现为软件或任何合适的可编程操作的集合。应用可以被具 体化为可以在诸如主控处理器或其他可编程电路等的可编程电路上执行的代码或指令。在 此处的任何实施方式中所使用的模块可以被具体化为电路、固件、软件或其任何组合。电路 可以被具体化为集成电路,例如集成电路芯片。
[0048] 因而,本公开内容提供用来管理用于减少时延的分组处理的套接字和关联设备队 列的系统、方法和计算机可读介质。下列示例属于进一步的实施方式。
[0049] 该系统可以包括被配置为维护特殊列表的系统调用模块,该特殊列表包括标识设 备队列和用于设备队列中的每一个的关联特殊套接字的条目,该特殊套接字选自被配置为 接收各分组的多个套接字。这种示例的系统也可以包括减少时延的忙碌轮询模块,其被配 置为忙碌轮询特殊列表上的设备队列。这种示例的系统还可以包括网络栈模块,其被配置 为从所述多个套接字中的一个接收分组。这种示例的系统调用模块还可以被配置为响应 于检测到由中断处理模块提供所述已接收的分组更新特殊列表,该更新包括:标识与所述 已接收的分组相关联的设备队列;标识与所述已接收的分组相关联的套接字;以及如果所 述已标识的设备队列不是处于特殊列表上的各条目中的一个上,则在特殊列表上创建新条 目,该新条目包括所述已标识的设备队列和所述已标识的套接字。
[0050] 另一示例设备包括前述组件,且系统调用模块还被配置为延时特殊列表的更新, 直到检测到第二个连续接收到由中断处理模块提供的分组。
[0051] 另一示例设备包括前述组件,且系统调用模块还被配置为:检测在套接字和设备 队列之间的关联的改变;判断所改变的套接字是否处于特殊列表上的各条目中的一个上; 以及响应于该判断,从特殊列表移除包括所改变的套接字的条目。
[0052] 另一示例设备包括前述组件,且中断处理模块是计时器驱动的。
[0053] 另一示例设备包括前述组件,且还包括硬件事件队列,其被配置为响应于特殊列 表上的设备队列中的事件的可用性生成通知,且忙碌轮询包括接收通知。
[0054] 另一示例设备包括前述组件,且忙碌轮询包括在与包括硬件事件队列的高速缓存 行相关联的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使 得处理器过渡到睡眠状态,该睡眠状态响应于硬件事件队列的修改而终止。
[0055] 另一示例设备包括前述组件,且还包括状态寄存器,其包括状态位,状态位中的每 一个与特殊列表上的设备队列相关联,状态位被设置为指示特殊列表上的设备队列中的事 件的可用性,且忙碌轮询包括监视状态寄存器。
[0056] 另一示例设备包括前述组件,且忙碌轮询包括在与包括状态寄存器的高速缓存行 相关联的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使得 处理器过渡到睡眠状态,该睡眠状态响应于状态位的修改而终止。
[0057] 根据另一方面,提供了一种方法。该方法可以包括维护特殊列表,该特殊列表包括 标识设备队列和用于设备队列中的每一个的关联特殊套接字的条目,该特殊套接字选自被 配置为接收各分组的多个套接字。这种示例的方法也可以包括忙碌轮询特殊列表上的设备 队列。这种示例的方法还可以包括从所述多个套接字中的一个接收分组。这种示例的方法 还可以包括响应于检测到由中断处理模块提供所述已接收的分组更新特殊列表,该更新包 括:标识与所述已接收的分组相关联的设备队列;标识与所述已接收的分组相关联的套接 字;以及如果所述已标识的设备队列不是处于特殊列表上的各条目中的一个上,则在特殊 列表上创建新条目,该新条目包括所述已标识的设备队列和所述已标识的套接字。
[0058] 另一示例方法包括前述操作,且还包括延迟特殊列表的更新,直到检测到第二个 连续接收到由中断处理模块提供的分组。
[0059] 另一示例方法包括前述操作,且还包括检测在套接字和设备队列之间的关联的改 变;判断所改变套接字是否处于特殊列表上的各条目中的一个上;以及响应于该判断,从 特殊列表移除包括所改变的套接字的条目。
[0060] 另一示例方法包括前述操作,且忙碌轮询还包括从硬件事件队列接收通知,该硬 件事件队列被配置为响应于特殊列表上的设备队列中的事件的可用性生成通知。
[0061] 另一示例方法包括前述操作,且还包括在与包括硬件事件队列的高速缓存行相关 联的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使得处理 器过渡到睡眠状态,该睡眠状态响应于硬件事件队列的修改而终止。
[0062] 另一示例方法包括前述操作,且忙碌轮询还包括监视状态寄存器,该状态寄存器 包括状态位,状态位中的每一个与特殊列表上的设备队列相关联,状态位被设置为指示特 殊列表上的设备队列中的事件的可用性。
[0063] 另一示例方法包括前述操作,且还包括在与包括状态寄存器的高速缓存行相关联 的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使得处理器 过渡到睡眠状态,该睡眠状态响应于状态位的修改而终止。
[0064] 根据另一方面,提供了一种方法。该方法可以包括维护散列表,其被配置为把各设 备队列映射到特殊套接字和附加套接字的冲突列表,该特殊套接字和附加套接字与设备队 列相关联。这种示例的方法也可以包括忙碌轮询该散列表上的设备队列。这种示例的方法 还可以包括从轮询系统调用接收新套接字登记。这种示例的方法还可以包括标识与设备队 列相关联的新套接字。这种示例的方法还可以包括,如果所述已标识的设备队列不是处于 散列表中,则在散列表中为所述已标识的设备队列创建新条目,该新条目包括作为特殊套 接字的新套接字,且还包括空的冲突列表。这种示例的方法还可以包括,如果所述已标识的 设备队列处于散列表中,则把新套接字添加到散列表中的设备队列条目的冲突列表。
[0065] 另一示例方法包括前述操作,且还包括:检测在套接字和设备队列之间的关联的 改变;如果所改变的套接字是处于与设备队列相关联的冲突列表上,则从冲突列表移除所 改变的套接字;如果所改变的套接字是与设备队列相关联特殊套接字且与设备队列相关联 的冲突列表是空的,则在用于设备队列的散列表中删除该条目;以及如果所改变的套接字 是与设备队列相关联特殊套接字且与设备队列相关联的冲突列表是不空的,则用冲突列表 上的套接字中的一个代替与设备队列相关联特殊套接字。
[0066] 另一示例方法包括前述操作,且忙碌轮询还包括从硬件事件队列接收通知,该硬 件事件队列被配置为响应于特殊列表上的设备队列中的事件的可用性生成通知。
[0067] 另一示例方法包括前述操作,且还包括在与包括硬件事件队列的高速缓存行相关 联的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使得处理 器过渡到睡眠状态,该睡眠状态响应于硬件事件队列的修改而终止。
[0068] 另一示例方法包括前述操作,且忙碌轮询还包括监视状态寄存器,该状态寄存器 包括状态位,状态位中的每一个与特殊列表上的设备队列相关联,状态位被设置为指示特 殊列表上的设备队列中的事件的可用性。
[0069] 另一示例方法包括前述操作,且还包括在与包括状态寄存器的高速缓存行相关联 的处理器上执行monitor指令和mwait指令,monitor和mwait指令被配置为使得处理器 过渡到睡眠状态,该睡眠状态响应于状态位的修改而终止。
[0070] 根据另一方面,提供了其上存储有指令的至少一个计算机可读存储介质,在由处 理器执行时,这些指令引起处理器执行上面的示例中的任何中所描述的方法的操作。
[0071] 根据另一方面,提供了一种装置,包括执行上面的示例中的任何中所描述的方法 的装置。
[0072] 此处所使用的术语和表达被用作描述而不是限制的术语,并且,在使用这样的术 语和表达时,不预期排除所示出的和所描述的特征的任何等效内容(或其部分),且应该认 识到,在权利要求书的范围内的各种修改都是可能的。
[0073] 相应地,权利要求书预期涵盖所有这样的等效内容。此处已经描述了各种特征、方 面和各实施方式。本领域的技术人员应理解,各特征、方面和实施方式对彼此组合以及变更 和修改敏感。
[0074] 因此,应当认为本公开内容包含这样的组合、变更和修改。
[0075] 附录 A
[0076]

【权利要求】
1. 一种用于减少时延的分组处理的系统,所述系统包括: 系统调用模块,其被配置为维护特殊列表,所述特殊列表包括标识设备队列和用于所 述设备队列中的每一个的关联特殊套接字的条目,所述特殊套接字选自被配置为接收各分 组的多个套接字; 减少时延的忙碌轮询模块,其被配置为忙碌轮询所述特殊列表上的所述设备队列; 网络栈模块,其被配置为从所述多个套接字中的一个接收分组;以及 所述系统调用模块还被配置为响应于检测到由中断处理模块提供所述已接收的分组 更新所述特殊列表,所述更新包括: 标识与所述已接收的分组相关联的设备队列; 标识与所述已接收的分组相关联的套接字;以及 如果所述已标识的设备队列不是处于所述特殊列表上的所述各条目中的一个上,则在 所述特殊列表上创建新条目,所述新条目包括所述已标识的设备队列和所述已标识的套接 字。
2. 如权利要求1所述的系统,其特征在于,所述系统调用模块还被配置为延时所述特 殊列表的所述更新,直到检测到由所述中断处理模块提供的第二个续接收到的分组。
3. 如权利要求1所述的系统,其特征在于,所述系统调用模块还被配置为: 检测在套接字和设备队列之间的关联的改变; 判断所述已改变的套接字是否处于所述特殊列表上的所述各条目中的一个上;以及 响应于所述判断,从所述特殊列表移除包括所述已改变的套接字的所述条目。
4. 如权利要求1所述的系统,其特征在于,所述中断处理模块是计时器驱动的。
5. 如权利要求1所述的系统,进一步包括硬件事件队列,其被配置为响应于所述特殊 列表上的所述设备队列中的事件的可用性生成通知,其中所述忙碌轮询包括接收所述通 知。
6. 如权利要求5所述的系统,其特征在于,所述忙碌轮询包括在与包括所述硬件事件 队列的高速缓存行相关联的处理器上执行monitor指令和mwait指令,所述monitor和 mwait指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述硬件事件 队列的修改而终止。
7. 如权利要求1所述的系统,进一步包括状态寄存器,其包括状态位,所述状态位中的 每一个与所述特殊列表上的设备队列相关联,所述状态位被设置为指示所述特殊列表上的 所述设备队列中的事件的可用性,其中,所述忙碌轮询包括监视所述状态寄存器。
8. 如权利要求7所述的系统,其特征在于,所述忙碌轮询包括在与包括所述状态寄存 器的高速缓存行相关联的处理器上执行monitor指令和mwait指令,所述monitor和mwait 指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述状态位的修改而 终止。
9. 如权利要求1所述的系统,其特征在于,一种处理器被配置为实现所述网络栈模块, 且所述处理器被耦合到包括直接存储器访问(DMA)引擎的网络接口模块。
10. -种存储有指令的计算机可读存储介质,在由处理器执行时,所述指令引起用于减 少时延的分组处理的下列操作,所述操作包括: 维护特殊列表,所述特殊列表包括标识设备队列和所述设备队列中的每一个的关联特 殊套接字的条目,所述特殊套接字选自被配置为接收各分组的多个套接字; 忙碌轮询所述特殊列表上的所述设备队列; 从所述多个套接字中的一个接收分组;以及 响应于检测到由中断处理模块提供所述已接收的分组,更新所述特殊列表,所述更新 包括: 标识与所述已接收的分组相关联的设备队列; 标识与所述已接收的分组相关联的套接字;以及 如果所述已标识的设备队列不处于所述特殊列表上的所述各条目中的一个上,则在 所述特殊列表上创建新条目,所述新条目包括所述已标识的设备队列和所述已标识的套接 字。
11. 如权利要求10所述的计算机可读存储介质,进一步包括延迟所述特殊列表的所述 更新的操作,直到检测到由所述中断处理模块提供的第二连续接收到的分组。
12. 如权利要求10所述的计算机可读存储介质,进一步包括以下所述操作: 检测在套接字和设备队列之间的关联的改变; 判断所述已改变的套接字是否处于所述特殊列表上的所述各条目中的一个上;以及 响应于所述判断,从所述特殊列表移除包括所述已改变的套接字的所述条目。
13. 如权利要求10所述的计算机可读存储介质,其特征在于,所述中断处理模块是计 时器驱动的。
14. 如权利要求10所述的计算机可读存储介质,其特征在于,所述忙碌轮询包括从被 配置为响应于所述特殊列表上的所述设备队列中的事件的可用性生成所述通知的硬件事 件队列接收通知的操作。
15. 如权利要求14所述的计算机可读存储介质,进一步包括在与包括所述硬件事件队 列的高速缓存行相关联的处理器上执行monitor指令和mwait指令的操作,所述monitor 和mwait指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述硬件事 件队列的修改而终止。
16. 如权利要求10所述的计算机可读存储介质,其特征在于,所述忙碌轮询包括监视 状态寄存器的操作,所述状态寄存器包括状态位,所述状态位中的每一个与所述特殊列表 上的设备队列相关联,所述状态位被设置为指示所述特殊列表上的所述设备队列中的事件 的可用性。
17. 如权利要求16所述的计算机可读存储介质,进一步包括在与包括所述状态寄存器 的高速缓存行相关联的处理器上执行monitor指令和mwait指令的操作,所述monitor和 mwait指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述状态位的 修改而终止。
18. -种其上存储有指令的计算机可读存储介质,在由处理器执行时,所述指令引起用 于减少时延的分组处理的下列操作,所述操作包括: 维护被配置为把各设备队列映射到特殊套接字以及附加套接字的冲突列表的散列表, 所述特殊套接字和所述附加套接字与所述设备队列相关联; 在所述散列表上忙碌轮询所述设备队列; 从轮询系统调用接收新套接字登记; 标识与所述新套接字相关联的设备队列;以及 如果所述已标识的设备队列不处于所述散列表中,则 在用于所述已标识的设备队列的所述散列表中创建新条目,所述新条目包括作为所述 特殊套接字的所述新套接字,且进一步包括空的冲突列表; 如果所述已标识的设备队列处于所述散列表中,则 把所述新套接字添加到所述散列表中用于所述设备队列条目的所述冲突列表。
19. 如权利要求18所述的计算机可读存储介质,进一步包括以下操作: 检测在套接字和设备队列之间的关联的改变; 如果所述已改变的套接字处于与所述设备队列相关联的所述冲突列表上,则从所述冲 突列表移除所述已改变的套接字; 如果所述已改变的套接字是与所述设备队列相关联的所述特殊套接字,且与所述设备 队列相关联的所述冲突列表是空的,则删除所述散列表中用于所述设备队列的所述条目; 以及 如果所述已改变的套接字是与所述设备队列相关联的所述特殊套接字,且与所述设备 队列相关联的所述冲突列表不是空的,则用所述冲突列表上的所述套接字中的一个代替与 所述设备队列相关联的所述特殊套接字。
20. 如权利要求18所述的计算机可读存储介质,其特征在于,所述忙碌轮询包括从被 配置为响应于所述特殊列表上的所述设备队列中的事件的可用性生成所述通知的硬件事 件队列接收通知的操作。
21. 如权利要求20所述的计算机可读存储介质,进一步包括在与包括所述硬件事件队 列的高速缓存行相关联的处理器上执行monitor指令和mwait指令的操作,所述monitor 和mwait指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述硬件事 件队列的修改而终止。
22. 如权利要求18所述的计算机可读存储介质,其特征在于,所述忙碌轮询包括监视 状态寄存器的操作,所述状态寄存器包括状态位,所述状态位中的每一个与所述特殊列表 上的设备队列相关联,所述状态位被设置为指示所述特殊列表上的所述设备队列中的事件 的可用性。
23. 如权利要求22所述的所述计算机可读存储介质,进一步包括在与包括所述状态寄 存器的高速缓存行相关联的处理器上执行monitor指令和mwait指令的操作,所述monitor 和mwait指令被配置为使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述状态位 的修改而终止。
24. -种用于减少时延的分组处理的方法,所述方法包括: 维护特殊列表,所述特殊列表包括标识设备队列和所述设备队列中的每一个的关联特 殊套接字的条目,所述特殊套接字选自被配置为接收各分组的多个套接字; 忙碌轮询所述特殊列表上的所述设备队列; 从所述多个套接字中的一个接收分组;以及 响应于检测到由中断处理模块提供所述已接收的分组,更新所述特殊列表,所述更新 包括: 标识与所述已接收的分组相关联的设备队列; 标识与所述已接收的分组相关联的套接字;以及 如果所述已标识的设备队列不处于所述特殊列表上的所述各条目中的一个上,则在 所述特殊列表上创建新条目,所述新条目包括所述已标识的设备队列和所述已标识的套接 字。
25. 如权利要求24所述的方法,进一步包括延迟所述特殊列表的所述更新,直到检测 到由所述中断处理模块提供的第二连续接收到的分组。
26. 如权利要求24所述的方法,进一步包括: 检测在套接字和设备队列之间的关联的改变; 判断所述已改变的套接字是否处于所述特殊列表上的所述各条目中的一个上;以及 响应于所述判断,从所述特殊列表移除包括所述已改变的套接字的所述条目。
27. 如权利要求24所述的方法,其特征在于,所述忙碌轮询包括从被配置为响应于所 述特殊列表上的所述设备队列中的事件的可用性生成所述通知的硬件事件队列接收通知。
28. 如权利要求27所述的方法,进一步包括在与包括所述硬件事件队列的高速缓存行 相关联的处理器上执行monitor指令和mwait指令,所述monitor和mwait指令被配置为 使得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述硬件事件队列的修改而终止。
29. 如权利要求24所述的方法,其特征在于,所述忙碌轮询包括监视状态寄存器,所述 状态寄存器包括状态位,所述状态位中的每一个与所述特殊列表上的设备队列相关联,所 述状态位被设置为指示所述特殊列表上的所述设备队列中的事件的可用性。
30. 如权利要求29所述的方法,进一步包括在与包括所述状态寄存器的高速缓存行相 关联的处理器上执行monitor指令和mwait指令,所述monitor和mwait指令被配置为使 得所述处理器过渡到睡眠状态,所述睡眠状态响应于所述状态位的修改而终止。
【文档编号】G06F17/30GK104376036SQ201410401396
【公开日】2015年2月25日 申请日期:2014年8月14日 优先权日:2013年8月14日
【发明者】E·塔米尔, E·露兹欧恩, M·R·威尔考克斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1