CN107924330B - 用于集成的线程调度的计算设备和方法 - Google Patents

用于集成的线程调度的计算设备和方法 Download PDF

Info

Publication number
CN107924330B
CN107924330B CN201680048794.6A CN201680048794A CN107924330B CN 107924330 B CN107924330 B CN 107924330B CN 201680048794 A CN201680048794 A CN 201680048794A CN 107924330 B CN107924330 B CN 107924330B
Authority
CN
China
Prior art keywords
thread
scheduling engine
computing device
scheduler
dependencies
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.)
Active
Application number
CN201680048794.6A
Other languages
English (en)
Other versions
CN107924330A (zh
Inventor
J·迪南
M·弗拉伊斯利克
T·圣约翰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN107924330A publication Critical patent/CN107924330A/zh
Application granted granted Critical
Publication of CN107924330B publication Critical patent/CN107924330B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/484Precedence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/485Resource constraint

Abstract

用于集成的线程调度的技术包括具有网络接口控制器(NIC)的计算设备。NIC被配置为检测和挂起正被一个或多个通信操作阻塞的线程。NIC的线程调度引擎被配置为将挂起的线程从系统线程调度器的运行队列移动到线程调度引擎的未决队列。线程调度引擎还被配置为在确定任何依赖和/或阻塞通信操作已经完成时,将挂起的线程从未决队列移动到线程调度引擎的就绪队列。描述和要求保护其他实施例。

Description

用于集成的线程调度的计算设备和方法
政府权利条款
本发明是在政府支持下根据国防部授予的合同号H98230-13-D-0124进行的。政府对本发明有一定的权利。
相关申请的交叉引用
本申请要求于2015年9月26日提交的标题为“TECHNOLOGIES FOR INTEGRATEDTHREAD SCHEDULING”的序号为14/866,572的美国专利申请的优先权。
技术领域
本申请总体上涉及计算机系统领域,并且更具体地涉及用于集成的线程调度的计算设备和方法。
背景技术
现代计算设备已成为个人、商业和社会用途的无处不在的工具。因此,许多现代计算设备能够连接到各种数据网络,包括因特网和企业内联网,以通过各种数据网络以不同的速率发送和接收数据通信。为了促进远程定位的计算设备之间的通信,数据网络通常包括一个或多个网络计算设备(例如,网络交换机、网络路由器、服务器、其他计算和/或存储计算设备等)以通过数据网络处理和路由网络通信(即,网络分组)。诸如数据中心之类的某些网络基础设施可以包括以并行和/或分布式计算架构(例如高性能计算(HPC)网络架构)部署的数万或更多的这样的计算设备,其能够实现高速、低延迟的互连,例如集群计算网络架构和/或网格计算网络架构(例如,结构计算网络架构)。
例如在等待本地发出的通信操作完成或者在等待数据作为远程执行的通信操作的结果到达的同时,运行在这样的巨大网络基础设施上的应用(即,线程、进程等)可能被阻塞。阻塞的线程可以由调度器(即系统线程/进程调度器)取消调度,该调度器然后可以调度就绪的线程以依靠先前被取消调度的阻塞的线程占用的资源执行。线程调度的常规方法利用软件调度器,其通常使用软件技术来确定未决线程是否已准备好执行。附加的软件技术可以利用轮询、存储器监视或基于中断的通知来指示通信操作已经完成或者数据已经被写入计算设备的本地存储器。然而,这样的软件技术会在计算设备的存储器中产生显著的软件归属开销和/或影响局部性。
发明内容
本公开的一个方面涉及一种用于集成的线程调度的计算设备,所述计算设备包括:网络接口控制器,其包括具有存储于其中的多个指令的数据存储设备,所述指令当由所述网络接口控制器执行时,使所述网络接口控制器用于:检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞;响应于检测到所述线程的所述处理被阻塞而挂起所述线程;将挂起的线程从所述计算设备的系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎;识别所述线程是否具有一个或多个依赖;确定所述一个或多个通信操作中的每一个通信操作是否已经完成;响应于确定所述线程具有所述一个或多个依赖,确定所述一个或多个依赖是否已经被满足;以及响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成并且(ii)所述一个或多个依赖中的每一个依赖已经被满足,将所述线程从所述线程调度引擎移动到所述系统线程调度器。
本公开的另一个方面涉及一种用于过滤接收的消息的计算设备,所述计算设备包括:用于检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞的单元;用于响应于检测到所述线程的所述处理被阻塞,由所述计算设备的系统线程调度器挂起所述线程的单元;用于将挂起的线程从所述系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎的单元;用于由所述线程调度引擎识别所述线程是否具有一个或多个依赖的单元;用于由所述线程调度引擎确定所述一个或多个通信操作中的每一个通信操作是否已经完成的单元;用于由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖,来确定所述一个或多个依赖是否已经被满足的单元;以及用于响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成以及(ii)所述一个或多个依赖中的每一个依赖已经被满足,由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元。
本公开的另一个方面涉及一种用于集成的线程调度的方法,所述方法包括:由计算设备检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞;响应于检测到所述线程的所述处理被阻塞,由所述计算设备的系统线程调度器挂起所述线程;由所述计算设备将挂起的线程从所述系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎;由所述线程调度引擎识别所述线程是否具有一个或多个依赖;由所述线程调度引擎确定所述一个或多个通信操作中的每一个通信操作是否已经完成;由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖,来确定所述一个或多个依赖是否已经被满足;以及响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成以及(ii)所述一个或多个依赖中的每一个依赖已经被满足,由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器。
附图说明
本文描述的概念在附图中以示例而非限制的方式进行示出。为了说明的简单和清楚,图中所示的元件不一定按比例绘制。在认为适当的地方,附图标记已经在图中重复以指示对应或类似的元件。
图1是用于集成的线程调度的系统的至少一个实施例的简化框图,该系统包括通过网络通信地耦合到远程计算设备的计算设备;
图2是可以由图1的系统的计算设备建立的环境的至少一个实施例的简化框图;
图3和图4是可以由图1和图2的计算设备执行的用于集成的线程调度的方法的至少一个实施例的简化流程图;以及
图5是可以由图1和图2的计算设备实现的与网络端口条目表中的网络端口条目相对应的一组匹配列表条目的实现的至少一个实施例的简化框图。
具体实施方式
虽然本公开的概念易于进行各种修改和替代形式,但是其具体实施例已经在附图中通过示例的方式示出,并且将在本文中进行详细描述。然而,应当理解,不意图将本公开的概念限制为所公开的特定形式,而是相反,意图是覆盖与本公开和所附权利要求一致的所有修改方案、等同方案和替代方案。
说明书中对“一个实施例”、“实施例”、“示出性实施例”等的提及指示本文所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以或不可以必然包括该特定的特征、结构或特性。此外,这样的短语不一定指代同一实施例。此外,当结合实施例描述特定特征、结构或特性时,认为结合其他实施例来实现这样的特征、结构或特性在本领域技术人员的知识内,无论是否明确描述。此外,应当意识到,列表中以“A、B和C中的至少一个”的形式包括的项目可以表示(A);(B);(C):(A和B);(A和C);(B和C);或(A,B和C)。类似地,以“A、B或C中的至少一个”的形式列出的项目可以表示(A);(B);(C):(A和B);(A和C);(B和C);或(A、B和C)。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合实现。所公开的实施例还可以被实现为由一个或多个暂时性或非暂时性机器可读(例如,计算机可读)存储介质承载或存储的指令,所述指令可由一个或多个处理器读取和执行。机器可读存储介质可以被体现为用于以机器可读的形式存储或发送信息的任何存储设备、机构或其他物理结构(例如,易失性或非易失性存储器、介质盘或其他介质设备)。
在附图中,可以以具体的布置和/或顺序示出一些结构或方法特征。然而,应当意识到,可以不需要这种具体的布置和/或排序。相反,在一些实施例中,这些特征可以以与示意性图中所示的不同的方式和/或顺序布置。另外,在特定附图中包括结构或方法特征并不暗示在所有实施例中都需要这样的特征,并且在一些实施例中可以不包括这些特征或者可以将其与其它特征组合。
现在参考图1,在示出性实施例中,用于集成的线程调度的系统100包括通过网络120通信地耦合到远程计算设备122的计算设备102。在使用中,计算设备102处理消息(例如,网络通信、网络分组等)和消息将发送到远程计算设备122,以及接收和处理来自远程计算设备122的消息。应当理解的是,尽管在图1中示出了单个远程计算设备122,但是,在其他实施例中,系统100可以包括多个远程计算设备。
如将在下面进一步详细描述的,计算设备102被配置为将由一个或多个通信操作阻塞的线程从系统线程调度器(例如,图2的系统线程调度器模块260)移动到计算设备102的网络接口控制器(NIC)114的线程调度引擎116的未决队列(例如,图2的未决队列224)。因此,当通信操作中的一个完成时,NIC 114内部的完成跟踪机制(例如,图2的线程依赖跟踪模块230)可以向NIC 114内的线程调度引擎116提供通信操作完成的指示(例如,发送通知),由此减少了与传统的基于软件的线程调度管理技术相关联的软件归属开销。
线程调度引擎116可以确定已完成的通信操作是否解决了阻塞的线程的任何依赖。这样,线程调度引擎116可以在确定通信操作和/或其他依赖已经完成时向系统线程调度器通知先前阻塞的线程准备好被调度以用于执行。此外,线程调度引擎116可以将不再阻塞的线程从未决队列移动到线程调度引擎116的就绪队列(例如,图2的就绪队列228)。应当意识到,在一些实施例中,如下面进一步详细描述的,线程调度引擎116的未决和就绪队列可以使用各种技术来实现,所述各种技术诸如本地管理的偏移、一个或多个匹配列表条目和事件队列等。
如图1所示,示出性计算设备102包括处理器104、输入/输出(I/O)子系统106、存储器108、数据存储设备110、通信电路112以及一个或多个外围设备118。当然,在其他实施例中,计算设备102可以包括其他或附加组件,诸如在网络设备中常见的组件(例如,交换机、服务器、计算节点等)。另外,在一些实施例中,示出性组件中的一个或多个可以并入另一个组件,或以其他方式形成另一个组件的一部分。例如,在一些实施例中,存储器108或其部分可以被并入处理器104中。此外,在一些实施例中,可以从计算设备102中省略示出性组件中的一个或多个。
处理器104可以体现为能够执行在本文描述的功能的任何类型的处理器。例如,处理器104可以体现为单核或多核处理器、数字信号处理器、微控制器、或其他处理器或处理/控制电路。类似地,存储器108可以体现为能够执行在本文描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在操作中,存储器108可以存储在计算设备102的操作期间使用的各种数据和软件,诸如操作系统、应用、程序、库和驱动程序。
存储器108经由I/O子系统106通信地耦合到处理器104,I/O子系统106可以体现为促进与处理器104、存储器108和计算设备102的其他组件的输入/输出操作的电路和/或组件。例如,I/O子系统106可以体现为或者以其他方式包括存储器控制器集线器、输入/输出控制集线器、固件设备、通信链路(即,点对点链路、总线链路、线、电缆、光导、印刷电路板迹线等)和/或促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统106可以形成片上系统(SoC)的一部分并且与处理器104、存储器108以及计算设备102的其他组件一起并入单个集成电路芯片。
数据存储设备110可以体现为被配置用于数据的短期或长期存储的任何类型的设备或多个设备,例如存储设备和电路、存储卡、硬盘驱动器、固态驱动器或其他数据存储设备。数据存储设备110和/或存储器108(例如,计算机可读存储介质)可以如本文所述的存储在计算设备102的操作期间能够由计算设备102的处理器(例如,处理器104)执行的各种数据,包括操作系统、应用、程序、库、驱动程序、指令等。
通信电路112可以体现为能够通过网络(例如,网络120)在计算设备102和其他远程计算设备(例如,远程计算设备122)之间进行通信的任何通信电路、设备或其集合。通信电路112可以被配置为使用任何一种或多种通信技术(例如无线或有线通信技术)和相关联的协议(例如,以太网、
Figure GDA0003305875390000061
WiMAX、LTE、5G等)来实现这种通信。在一些实施例中,通信电路112被配置为执行与其他计算设备(例如,远程计算设备122)的高速通信(例如,在高性能计算(HPC)集群中)。
示出性通信电路112可以体现为NIC 114或以其他方式包括NIC 114。NIC 114可以体现为一个或多个附加板、子卡、网络接口卡、控制器芯片、芯片组或可由计算设备102使用的其它设备。例如,在一些实施例中,NIC 114可以与处理器104集成,NIC 114体现为通过扩展总线(例如,快速PCI)耦合到I/O子系统108的扩展卡,作为包括一个或多个处理器的SoC的一部分,或包括在也包含一个或多个处理器的多芯片封装上。另外地或替代地,在一些实施例中,NIC 114的功能可以在板级、套接字级别、芯片级别和/或其它级别被集成到计算设备102的一个或多个组件中。
如前所述,NIC 114另外包括线程调度引擎116。换句话说,线程调度引擎116可以体现为NIC 114的硬件电路。因此,应该进一步意识到,在一些实施例中,NIC 114可以包括NIC 114本地的处理器(未示出)和/或存储器(未示出)。在这样的实施例中,NIC 114的处理器能够执行所描述的卸载的功能。另外地或可选地,在这样的实施例中,NIC 114的存储器能够存储NIC 114本地的数据,使得计算设备102的存储器108不受影响(即,不引入软件延迟)。
线程调度引擎116可以体现为能够进行集成的线程调度以及执行本文描述的其他功能中的任何的任何软件、硬件组件和/或电路。如前所述,线程调度引擎116被配置为管理阻塞的线程并跟踪通信操作的完成以及阻塞的线程的任何其它依赖。
网络120可以体现为任何类型的有线或无线通信网络,包括蜂窝网络(例如全球移动通信系统(GSM)、3G、4G(长期演进(LTE)、全球微波接入互操作性(WiMAX))等)、数字用户线(DSL)网络、缆线网络(例如,同轴网络、光纤网络等)、电话网络、局域网(LAN)或广域网(WAN)、全球网络(例如因特网)或其任何组合。另外,网络120可以包括任何数量的可以在诸如服务器、交换机、路由器、接入点、网络控制器等网络中常见的物理和/或虚拟的附加计算设备(即联网设备),所述网络为了描述的清楚起见没有示出。应该意识到,在一些实施例中,网络120可以体现为能够进行高速、低延迟互连的任何类型的并行和/或分布式计算架构(例如,高性能计算(HPC)网络架构),例如,集群计算网络架构和/或网格计算网络架构(例如,结构计算网络架构)。
类似于计算设备102,远程计算设备122可体现为能够执行本文中所描述的功能的任何类型的计算或计算设备,包括但不限于服务器(例如,独立式、机架式、刀片式等)、网络装置(例如,物理或虚拟)、web设备、分布式计算系统、基于处理器的系统、多处理器系统、智能电话、移动计算设备、平板计算机、膝上型计算机、笔记本计算机和/或任何其他计算/通信设备。因此,应该意识到,远程计算设备122可以包括与图1的示出性计算设备102相同和/或类似的组件,为了清楚起见,本文中没有描述。
现在参考图2,在示出性实施例中,计算设备102在操作期间建立环境200。示出性环境200包括网络通信模块210、线程调度模块220、通信操作跟踪模块240、系统线程调度器接口模块250、以及系统线程调度器模块260。环境200的模块、逻辑和其他组件中的每个可以体现为硬件、软件、固件或其组合。例如,环境200的模块、逻辑和其他组件中的每个可以形成处理器104或计算设备102的其他硬件组件的一部分或以其他方式由其建立。因此,在一些实施例中,环境200的模块中的一个或多个可以体现为电路或电气设备集合(例如,网络通信电路210、线程调度电路220、通信操作跟踪电路240、系统线程调度器接口电路250、以及系统线程调度器电路260等)。附加地或替代地,在一些实施例中,示出性模块中的一个或多个可以形成可以体现为单独模块或独立模块的另一模块和/或示出性模块和/或子模块中的一个或多个的一部分。
如示出性环境200中所示,网络通信模块210、线程调度模块220、通信操作跟踪模块240、以及系统线程调度器接口模块250中的一个或多个可以被集成到NIC 114中。因此,与采用引入开销的软件的现有技术不同,硬件卸载的线程管理可减少本技术的软件归属开销。应该意识到,计算设备102可以包括在网络的计算设备中常见的其他附加的和/或替代的组件、子组件、模块、子模块、电路和/或设备,为了清楚起见,在图2中没有示出。
网络通信模块210被配置为促进(例如处理和路由)往向和从计算设备102的入站和出站网络通信(例如,消息、网络业务、网络分组、网络流等)。为此,网络通信模块210被配置为接收并处理来自经由网络120通信地耦合到计算设备102的其他计算设备(例如,远程计算设备122)的网络通信。另外,网络通信模块210被配置为生成网络通信并且将该网络通信发送到经由网络120通信地耦合到计算设备102的另一个计算设备(例如,远程计算设备122)。应当意识到,在一些实施例中,网络通信模块210的功能的至少一部分可以由通信电路112执行,并且更具体地由NIC 114执行。
线程调度模块220被配置为管理由于通信操作而阻塞的线程的调度。为此,示出性线程调度模块220包括用于管理未决队列224的未决线程队列管理模块222、用于管理就绪队列228的就绪线程队列管理模块226以及线程依赖跟踪模块230。示出性线程调度模块220另外包括可以用来存储与阻塞的线程的依赖(即,依赖关系)有关的数据的依赖跟踪数据232。应当意识到,线程调度模块220的至少一部分可以在计算设备102的硬件中执行,诸如由图1的线程调度引擎116执行。
未决线程队列管理模块222被配置为管理当前阻塞的线程的未决队列224。为了管理未决队列224,未决线程队列管理模块222被配置为从系统线程调度器(例如,系统线程调度器模块260)取回或接收阻塞的线程或线程标识数据。另外,未决线程队列管理模块222还被配置为经由就绪线程队列管理模块226将不再阻塞的线程发送到就绪队列228。在使用中,当未决队列224中的线程中的一个的通信操作和/或依赖完成时,未决线程队列管理模块222从线程依赖跟踪模块230接收通知。相应地,在将线程从未决队列发送到就绪队列之前,未决线程队列管理模块222可以基于接收的通知来确定哪个或哪些线程可以从未决队列移动到就绪队列。
就绪线程队列管理模块226被配置为管理不再被阻塞(即准备好由诸如系统线程调度器模块260之类的系统线程调度器调度)的线程的就绪队列228。如前所述,就绪线程队列管理模块226被配置为从未决队列224接收或取回由未决线程队列管理模块222确定的不再阻塞的线程或线程标识数据。为此,在一些实施例中,就绪线程队列管理模块226可以从未决线程队列管理模块222接收指示哪个线程不再由通信操作或依赖阻塞的通知。因此,通知可以包括线程的标识符(例如,线程控制块(TCB))。另外,就绪线程队列管理模块226可以进一步被配置为向系统线程调度器模块260提供指示,该指示指示就绪队列228已经被更新以包括可用于执行的另一个线程。在一些实施例中,该指示可以经由系统线程调度器接口模块250从就绪线程队列管理模块226发送到系统线程调度器模块。
线程依赖跟踪模块230被配置为确定是否存在在线程可以从未决队列224移动到就绪队列228之前需要完成的任何依赖(例如,其他线程、进程和/或通信操作)。为了这样做,线程依赖跟踪模块230被配置为跟踪未决队列224中的线程的依赖。因此,线程依赖跟踪模块230可以被配置为,例如,在未决线程队列管理模块222接收到线程阻塞的指示时,从未决线程队列管理模块222接收通知。通知可以向线程依赖跟踪模块230提供由线程依赖跟踪模块230可使用的信息来标识线程以及线程的任何依赖以及所识别的依赖中的每个的当前状态。相应地,在使用中,线程依赖跟踪模块230可以向未决线程队列管理模块222提供指示线程的依赖中的一个或多个何时已经完成的指示。在一些实施例中,依赖及其状态可被存储在依赖跟踪数据232中。
通信操作跟踪模块240被配置为跟踪计算设备102的通信操作。通信操作可以包括由计算设备102或者更具体地由NIC 114进行的涉及网络通信的任何类型的操作,诸如发送或接收操作、排序通信操作等。应当意识到,例如,计算设备102的其他网络相关的通信条件可以使得线程被阻塞,例如等待数据通过网络120到达。通信操作跟踪模块240还被配置为向线程调度模块220(例如,经由系统线程调度器接口模块250向线程依赖跟踪模块230)提供指示当前在未决队列224中的线程的通信操作或依赖已经完成的通知。
系统线程调度器接口模块250被配置为提供线程调度模块220和系统线程调度器模块260之间的接口(即,促进通信)。为此,系统线程调度器接口模块250可以被配置为从系统线程调度器模块260接收指示线程被阻塞(例如受阻塞通知事件)或通信操作完成(例如,完成通知事件)的通知。另外,系统线程调度器接口模块250可以进一步被配置为从就绪线程队列管理模块226发送指示线程已经被移动到线程调度模块220的就绪队列228并且因此处于要被移动到系统线程调度器模块260的队列的状态的通知。
系统线程调度器模块260被配置为基于计算设备102的可用资源来调度线程以用于执行。为了这样做,示出性系统线程调度器模块260包括针对等待执行、但是可以被阻塞和/或具有在线程可以被执行之前需要完成的一个或多个依赖的线程的未决队列262、针对准备好以用于在计算设备102的资源变得可用时执行的线程的就绪队列264、以及针对当前由计算设备102执行的线程的运行队列266。因此,系统线程调度器模块260可以被配置为向线程调度模块220提供识别当前由通信操作阻塞的线程的通知。应该意识到的是,在一些实施例中,系统线程调度器模块260的一个或多个功能可以由计算设备102的处理器104执行。还应该意识到的是,虽然图2的示出性计算设备102包括线程调度模块220的就绪队列228和系统线程调度器模块260的就绪队列264,在其他实施例中,可以采用可由线程调度模块220和系统线程调度器模块260中的每一个访问的单个就绪队列。
现在参照图3和图4,在使用中,计算设备102可以执行用于集成的线程调度的方法300。应该意识到的是,在一些实施例中,方法300可以体现为存储在计算机可读介质(例如,存储器108、数据存储装置110、或其他介质)上并且可以由执行的各种指令。
应当理解的是,方法300的至少一部分可以被卸载到计算设备102的线程调度引擎116并且由计算设备102的线程调度引擎116执行。方法300以框302开始,其中计算设备102确定是否从计算设备102的线程调度器接收到指示正在执行的线程的处理被至少一个通信操作阻塞的通知。阻塞正在执行的线程的通信操作可以响应于已经执行了阻塞通信操作(例如,发送或接收操作)的线程、已经执行了调用通信操作当中的排序的功能的线程、已经执行了在线程可以继续之前需要完成未决操作的一个或多个功能的线程、已经从远程计算设备(例如,图1的远程计算设备122)请求数据和/或已经执行了需要来自远程计算设备122的数据的功能的线程。
如果未收到通知,则方法300返回到框302以继续确定是否接收到通知。否则,如果接收到通知,则方法300前进到框304,其中计算设备102(例如,图1的计算设备102的处理器104)挂起阻塞的线程。应该意识到的是,当阻塞的线程挂起时,可以将不同的、准备就绪的线程放入运行队列中。在框306中,计算设备102将阻塞的线程从系统线程调度器(例如,图2的系统线程调度器模块260)移动到NIC 114的线程调度引擎116。为此,在一些实施例中,在框308中,计算设备102可将阻塞的线程从系统线程调度器的运行队列移动到线程调度引擎116的未决队列(例如,未决队列224)。可替代地,在一些实施例中,在框310中,计算设备102将对应于线程的句柄附加到线程调度引擎116的未决队列。
在框312中,计算设备102识别线程是否具有任何依赖。应意识到的是,线程具有至少一个依赖(即,阻塞通信操作)。因此,在框314中,计算设备102识别一个或多个阻塞通信操作。另外,在一些实施例中,在框316中,计算设备102识别阻塞的线程是否依赖于任何其他当前正在执行的线程。附加地或可选地,在一些实施例中,在框318中,计算设备102识别阻塞的线程是否依赖于当前由计算设备102正在执行的一个或多个其他通信操作。
方法300从框312前进到框320,其中计算设备102在前进到框322之前将所识别的依赖发送到线程依赖跟踪模块。应当意识到的是,在一些实施例中,系统线程调度器可以将线程的一个或多个依赖记录到线程调度引擎116,或者更具体地,在向线程调度引擎116通知阻塞的线程时,该线程的一个或多个依赖被记录到向线程调度模块220的线程依赖跟踪模块230。
如果在框312中识别出没有线程的依赖,则方法300分支到框322,其中计算设备102确定在通信操作的完成时是否接收到通信操作完成通知,例如来自图2的通信操作跟踪模块240的通信操作完成通知。应该意识到,例如,完成通知可以基于任何类型的通信操作的完成来生成,所述通信操作例如本地发起的发送操作或远程发起的发送操作。通信操作完成通知可以包括通信操作已经完成的任何识别信息,使得计算设备102可以识别相对应的通信操作。
如果计算设备102确定没有接收到通信操作完成通知,则该方法循环回到框322以继续等待接收通信操作完成通知。否则,如果接收到通信操作完成通知,则方法300前进到框324,其中计算设备102处理完成通知,诸如通过计算设备102的线程依赖跟踪模块230来处理。在框326中,计算设备102确定线程是否仍然被阻塞(例如,一个或多个依赖仍在执行、一个或多个通信操作仍然未决和/或正被执行,等等)。
例如,计算设备102可以确定完成通知是否满足线程调度引擎116的未决队列(例如,线程调度模块220的未决队列224)的中线程的任何线程的依赖。此外,计算设备102可以确定完成通知是否满足线程调度引擎116的未决队列的中的线程的任何线程的最终依赖(例如,阻塞或非阻塞操作、一系列消息的最后一个等)。如果线程仍然被阻塞,则方法300返回到框322以确定是否接收到另一通信操作完成通知。否则,如果线程不再被阻塞,则方法300前进到框328。
在框328中,计算设备102将线程从线程调度引擎116移动到系统线程调度器。为此,在框330中,计算设备102将线程从线程调度引擎116的未决队列移动到线程调度引擎116的就绪队列(例如,线程调度模块220的就绪队列228)。另外,在一些实施例中,在框332中,计算设备可以将线程从线程调度引擎116的就绪队列移动到系统线程调度器的运行队列(例如,系统线程调度器模块260的运行队列266)。可替换地,在一些实施例中,在框332中,当由计算设备102确定执行先前阻塞的线程所需要的计算设备102的资源可用时,计算设备102可以向系统线程调度器提供指示:先前阻塞的线程可以被调度以用于执行。应该意识到的是,在一些实施例中,线程可以在被移动到系统线程调度器的运行队列之前经过附加的和/或替换的队列。例如,在这样的实施例中,线程可以在被移动到系统线程调度器的就绪队列之前从线程调度引擎116的就绪队列移动到系统线程调度器的运行队列。
应该意识到,在一些实施例中,方法300可以体现为存储在计算机可读介质上的各种指令,所述指令可以由处理器104、网络接口控制器114和/或计算设备102的其他组件执行以使计算设备102执行方法300。计算机可读介质可以体现为能够被计算设备102读取的任何类型的介质,包括但不限于存储器108、数据存储装置110、网络接口控制器114的本地存储器、计算设备102的其他存储器或数据存储设备、计算设备102的外围设备可读的便携式介质,和/或其他介质。
现在参考图5,示出性实现方式包括用于指导逻辑网络端口的消息传递的网络端口条目502的表500。例如,这样的网络端口条目502可以在消息传递接口(MPI)通信协议中使用来将给定逻辑网络端口上的传入消息引导到正确的存储器缓冲器。例如,在使用端口4.0网络编程接口的实施例中,表500可以是端口表,其包括与网络端口条目502中的每个相关联的多个匹配列表条目506(参见例如优先级列表504和溢出列表508的匹配列表条目506)。应该意识到的是,在一些实施例中,替代和/或附加或更少的元素在其他实现方式(例如,事件队列、意外列表等)中可用。
匹配列表条目506中的每一个可以包括描述符510以用于匹配由计算设备102接收的消息的描述符,例如响应于“放入”消息操作。在一些实施例中,消息的描述符可以体现为或者包括指示消息的特性或者一系列消息(例如,网络流)的特性的任何类型的数据,诸如一个或多个“匹配”比特、消息的发送者、消息的大小、消息的目的地计算设备、与该消息相关联的标签、和/或可以包括在接收的消息的报头中的任何其他信息。匹配列表条目506中的每个另外包括操作512,该操作512描述了在匹配描述符510时要被执行的动作。例如,操作512可以指示响应于“放入”消息操作,是否响应于接收到该消息而生成事件,所述消息可以包括指向适用线程的TCB的指针。
在采用端口4接口的这种实施例中,用于线程中的每个的TCB可以被保存在存储器(例如,图1的存储器108)中。TCB可以包括能够用于识别线程的属性的任何数据,诸如线程的当前状态、指向TCB的指针等。在端口4的实现方式中,线程调度引擎116的未决队列可以在触发的操作列表的顶部实现。因此,当阻塞的线程被附加到未决队列时,可以建立端口触发的放入操作。在这样的实施例中,放入的目的地可以是计算设备102本身,并且源数据可以是TCB指针。
触发的放入操作可以用计数器(例如,端口事件计数器)进行记录,该计数器的值可以被监视,并与识别的依赖的数量进行比较。例如,在阻塞的线程依赖于五个本地发出的放入操作的实施例中,在放入操作中的每个完成时(例如,在由线程调度引擎116接收到由通信操作跟踪模块140生成的通知时),计数器可以递增,并且其值可以与放入操作的总数相比较。在这样的实施例中,线程依赖跟踪模块230可以维护和管理计数器,和/或在一些实施例中执行在依赖的数量和计数器的值之间的比较。
为了促进端口4的实现,可以通过接收由触发的放入操作生成的消息来实现就绪队列(例如,图2的线程调度模块220的就绪队列228),如上所述。在一些实施例中,接收操作可以通过将匹配列表条目506附加到NIC 114处的表500的端口表条目502中的一个来针对每个未决线程发出。在这样的实施例中,匹配列表条目506可以被配置为当收到相对应的消息时,生成完全解除链接事件。另外,在一些实施例中,可以使用端口事件队列来实现线程调度引擎116的就绪队列。因此,在这样的实施例中,系统线程调度器可以检查端口事件队列以确定是否有任何之前阻塞的线程准备好用于执行(即,可以由系统线程调度器调度以执行)。此外,线程的TCB指针可以由系统线程调度器接收,使得系统线程调度器可以定位该现在就绪的线程的任何信息。可替代地,在一些实施例中,本地管理的偏移匹配列表条目可通过消除全部事件的使用(即,接收缓冲器可充当线程调度引擎116的就绪队列)来进一步减少开销。
应该意识到,
示例
下面提供在本文公开的技术的示出性示例。这些技术的实施例可以包括下面描述的示例中的任何一个或多个以及任何组合。
示例1包括一种用于集成的线程调度的计算设备,所述计算设备包括网络接口控制器,所述网络接口控制器包括存储器设备,所述存储器设备具有其中存储的多个指令,所述指令在由所述网络接口控制器执行时使所述网络接口控制器:检测计算设备的线程的处理是否被一个或多个通信操作阻塞;响应于检测到线程的处理被阻塞而挂起该线程;将挂起的线程从计算设备的系统线程调度器移动到计算设备的网络接口控制器的线程调度引擎;识别线程是否具有一个或多个依赖;确定所述一个或多个通信操作中的每一个是否已经完成;响应于确定所述线程具有所述一个或多个依赖,确定所述一个或多个依赖是否已经被满足;以及响应于确定(i)所述一个或多个通信操作中的每一个已经完成并且(ii)所述一个或多个依赖中的每一个已经被满足,将所述线程从所述线程调度引擎移动到所述系统线程调度器。
示例2包括示例1的主题,并且其中将线程从系统线程调度器移动到线程调度引擎包括将线程从系统线程调度器的运行队列移动到线程调度引擎的未决队列。
示例3包括示例1和2中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括在线程被移动到系统线程调度器之前,将线程从线程调度引擎的未决队列移动到线程调度引擎的就绪队列。
示例4包括示例1-3中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器还包括将线程从线程调度引擎的未决队列移动到系统线程调度器的运行队列或系统线程调度器的就绪队列中的一个。
示例5包括示例1-4中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括向线程调度引擎提供指示线程可以被调度以用于执行的指示。
示例6包括示例1-5中的任一示例的主题,并且其中将线程从系统线程调度器移动到线程调度引擎包括将对应于线程的句柄附加到线程调度引擎的未决队列。
示例7包括示例1-6中的任一示例的主题,并且其中识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个其他线程。
示例8包括示例1-7中的任一示例的主题,并且还包括片上系统(SoC),所述片上系统包括一个或多个处理器和网络接口控制器。
示例9包括示例1-8中的任一示例的主题,并且还包括多芯片封装,其包括一个或多个处理器和网络接口控制器。
示例10包括示例1-9中的任一示例的主题,并且其中识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个通信操作。
示例11包括示例1-10中的任一示例的主题,并且其中,所述多个指令还使所述网络接口控制器将所述一个或多个依赖发送到所述线程调度引擎的线程依赖跟踪电路;并且将接收的通知发送到线程依赖跟踪电路,其中确定所述一个或多个依赖是否已经被满足包括响应于已经发送所接收的通知而从线程依赖跟踪电路接收一个或多个依赖已经被满足的指示。
示例12包括一种用于集成的线程调度的方法,该方法包括:由计算设备检测计算设备的线程的处理是否被一个或多个通信操作阻塞;响应于检测到所述线程的处理被阻塞,由所述计算设备的系统线程调度器挂起所述线程;由计算设备将挂起的线程从系统线程调度器移动到计算设备的网络接口控制器的线程调度引擎;由线程调度引擎识别线程是否具有一个或多个依赖;由所述线程调度引擎确定所述一个或多个通信操作中的每一个是否已经完成;由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖,确定所述一个或多个依赖是否已经被满足;以及响应于确定(i)所述一个或多个通信操作中的每一个已经完成以及(ii)所述一个或多个依赖中的每一个已经被满足,由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器。
示例13包括示例12的主题,并且其中将线程从系统线程调度器移动到线程调度引擎包括将线程从系统线程调度器的运行队列移动到线程调度引擎的未决队列。
示例14包括示例12和13中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括在线程被移动到系统线程调度器之前,将线程从线程调度引擎的未决队列移动到线程调度引擎的就绪队列。
示例15包括示例12-14中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器还包括将线程从线程调度引擎的未决队列移动到系统线程调度器的运行队列或系统线程调度器的就绪队列中的一个。
示例16包括示例12-15中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括向线程调度引擎提供指示线程可被调度以用于执行的指示。
示例17包括示例12-16中的任一示例的主题,并且其中将所述线程从所述系统线程调度器移动到所述线程调度引擎包括将对应于所述线程的句柄附加到所述线程调度引擎的未决队列。
示例18包括示例12-17中的任一示例的主题,并且其中,识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个其他线程。
示例19包括示例12-18中的任一示例的主题,并且其中,识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个通信操作。
示例20包括示例12-19中的任一示例的主题,并且还包括由线程调度引擎将所述一个或多个依赖发送到线程调度引擎的线程依赖跟踪电路;以及由所述线程调度引擎将所接收的通知发送到所述线程依赖跟踪电路,其中确定所述一个或多个依赖是否已经被满足包括响应于发送所接收的通知,从所述线程依赖跟踪电路接收一个或多个依赖已经被满足的指示。
示例21包括一种包括处理器的计算设备;以及具有存储于其中的多个指令的存储器,所述多个指令在由所述处理器执行时使所述计算设备执行示例12-20中的任一项所述的方法。
示例22包括存储于其上的多个指令的一个或多个机器可读存储介质,所述多个指令响应于被执行而引起计算设备执行示例12-20中的任一示例的方法。
示例23包括一种用于集成的线程调度的计算设备,所述计算设备包括网络通信电路,用于(i)检测计算设备的线程的处理是否被一个或多个通信操作阻塞,并且(ii)响应于检测到线程的处理被阻塞而挂起该线程;线程调度电路,用于(i)将挂起的线程从系统线程调度器移动到计算设备的网络接口控制器的线程调度引擎,(ii)识别线程是否具有一个或多个依赖,(iii)确定所述一个或多个通信操作中的每一个是否已完成,并且(iv)响应于确定所述线程具有所述一个或多个依赖,确定所述一个或多个依赖是否已经被满足;以及系统线程调度器接口电路,用于响应于确定(i)所述一个或多个通信操作中的每一个已经完成并且(ii)所述一个或多个依赖中的每一个已经被满足而将所述线程从所述线程调度引擎移动到所述系统线程调度器。
示例24包括示例23的主题,并且其中将线程从系统线程调度器移动到线程调度引擎包括将线程从系统线程调度器的运行队列移动到线程调度引擎的未决队列。
示例25包括示例23和24中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括在线程被移动到系统线程调度器之前,将线程从线程调度引擎的未决队列移动到线程调度引擎的就绪队列。
示例26包括示例23-25中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器还包括将线程从线程调度引擎的未决队列移动到系统线程调度器的运行队列或系统线程调度器的就绪队列中的一个。
示例27包括示例23-26中的任一示例的主题,并且其中将线程从线程调度引擎移动到系统线程调度器包括向线程调度引擎提供指示线程可被调度以用于执行的指示。
示例28包括示例23-27中的任一示例的主题,并且其中将线程从系统线程调度器移动到线程调度引擎包括将对应于该线程的句柄附加到线程调度引擎的未决队列。
示例29包括示例23-28中的任一示例的主题,并且其中识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个其他线程。
示例30包括示例23-29中的任一示例的主题,并且其中识别线程是否具有一个或多个依赖包括识别线程是否依赖于一个或多个通信操作。
示例31包括示例23-30中的任一示例的主题,并且其中所述线程调度电路进一步用于(i)将所述一个或多个依赖发送到所述线程调度引擎的线程依赖跟踪电路,并且(ii)将接收的通知发送到线程依赖跟踪电路,其中确定所述一个或多个依赖是否已经被满足包括响应于已经发送所接收的通知而从线程依赖跟踪电路接收所述一个或多个依赖已经被满足的指示。
示例32包括一种用于过滤接收的消息的计算设备,所述计算设备包括用于检测计算设备的线程的处理是否被一个或多个通信操作阻塞的单元;用于响应于检测到所述线程的所述处理被阻塞而由所述计算设备的系统线程调度器挂起所述线程的单元;用于将挂起的线程从系统线程调度器移动到计算设备的网络接口控制器的线程调度引擎的单元;用于由所述线程调度引擎识别所述线程是否具有一个或多个依赖的单元;用于由所述线程调度引擎确定所述一个或多个通信操作中的每一个是否已经完成的单元;用于由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖来确定所述一个或多个依赖是否已经被满足的单元;以及用于响应于确定(i)所述一个或多个通信操作中的每一个已经完成并且(ii)所述一个或多个依赖已经被满足而由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元。
示例33包括示例32的主题,并且其中用于将线程从系统线程调度器移动到线程调度引擎的单元包括用于将线程从系统线程调度器的运行队列移动到线程调度引擎的未决队列的单元。
示例34包括示例32和33中的任一示例的主题,并且其中用于将线程从线程调度引擎移动到系统线程调度器的单元包括用于在线程被移动到系统线程调度器之前将线程从线程调度引擎的未决队列移动到线程调度引擎的就绪队列的单元。
示例35包括示例32-34中的任一示例的主题,并且其中用于将线程从线程调度引擎移动到系统线程调度器的单元还包括用于将线程从线程调度引擎的未决队列移动到系统线程调度器的运行队列或系统线程调度器的就绪队列中的一个的单元。
示例36包括示例32-35中的任一示例的主题,并且其中用于将线程从线程调度引擎移动到系统线程调度器的单元包括用于向线程调度引擎提供指示线程可以被调度以用于执行的指示的单元。
示例37包括示例32-36中的任一示例的主题,并且其中所述用于将所述线程从所述系统线程调度器移动到所述线程调度引擎的单元包括用于将对应于所述线程的句柄附加到所述线程调度引擎的未决队列的单元。
示例38包括示例32-37中的任一示例的主题,并且其中用于识别线程是否具有一个或多个依赖的单元包括用于识别线程是否依赖于一个或多个其他线程的单元。
示例39包括示例32-38中的任一示例的主题,并且其中用于识别线程是否具有一个或多个依赖的单元包括用于识别线程是否依赖于一个或多个通信操作的单元。
示例40包括示例32-39中的任一示例的主题,并且还包括用于由线程调度引擎将所述一个或多个依赖发送到线程调度引擎的线程依赖跟踪电路的单元;以及用于由所述线程调度引擎将所接收的通知发送到所述线程依赖跟踪电路的单元,其中用于确定所述一个或多个依赖是否已经被满足的单元包括用于响应于发送所接收的通知而从线程依赖跟踪电路接收一个或多个依赖已经被满足的指示的单元。

Claims (25)

1.一种用于集成的线程调度的计算设备,所述计算设备包括:
网络接口控制器,其包括具有存储于其中的多个指令的数据存储设备,所述指令当由所述网络接口控制器执行时,使所述网络接口控制器用于:
检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞;
响应于检测到所述线程的所述处理被阻塞而挂起所述线程;
将挂起的线程从所述计算设备的系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎;
识别所述线程是否具有一个或多个依赖;
确定所述一个或多个通信操作中的每一个通信操作是否已经完成;
响应于确定所述线程具有所述一个或多个依赖,确定所述一个或多个依赖是否已经被满足;以及
响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成并且(ii)所述一个或多个依赖中的每一个依赖已经被满足,将所述线程从所述线程调度引擎移动到所述系统线程调度器。
2.如权利要求1所述的计算设备,其中,将所述线程从所述系统线程调度器移动到所述线程调度引擎包括将所述线程从所述系统线程调度器的运行队列移动到所述线程调度引擎的未决队列。
3.如权利要求1所述的计算设备,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器包括在所述线程被移动到所述系统线程调度器之前将所述线程从所述线程调度引擎的未决队列移动到所述线程调度引擎的就绪队列。
4.如权利要求3所述的计算设备,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器还包括将所述线程从所述线程调度引擎的未决队列移动到所述系统线程调度器的运行队列或所述系统线程调度器的就绪队列中的一个。
5.如权利要求4所述的计算设备,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器还包括向所述线程调度引擎提供指示所述线程能够被调度以用于执行的指示。
6.如权利要求1所述的计算设备,其中,识别所述线程是否具有一个或多个依赖包括识别所述线程是否依赖于一个或多个其它线程或者一个或多个通信操作。
7.如权利要求1所述的计算设备,其中,所述多个指令还使所述网络接口控制器用于:
将所述一个或多个依赖发送到所述线程调度引擎的线程依赖跟踪模块;以及
将接收的通知发送到所述线程依赖跟踪模块,
其中,确定所述一个或多个依赖是否已经被满足包括响应于已经发送所述接收的通知而从所述线程依赖跟踪模块接收所述一个或多个依赖已经被满足的指示。
8.如权利要求1所述的计算设备,进一步包括片上系统(SoC),所述片上系统包括一个或多个处理器以及所述网络接口控制器。
9.如权利要求1所述的计算设备,还包括多芯片封装,所述多芯片封装包括一个或多个处理器和所述网络接口控制器。
10.一种用于过滤接收的消息的计算设备,所述计算设备包括:
用于检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞的单元;
用于响应于检测到所述线程的所述处理被阻塞,由所述计算设备的系统线程调度器挂起所述线程的单元;
用于将挂起的线程从所述系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎的单元;
用于由所述线程调度引擎识别所述线程是否具有一个或多个依赖的单元;
用于由所述线程调度引擎确定所述一个或多个通信操作中的每一个通信操作是否已经完成的单元;
用于由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖,来确定所述一个或多个依赖是否已经被满足的单元;以及
用于响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成以及(ii)所述一个或多个依赖中的每一个依赖已经被满足,由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元。
11.如权利要求10所述的计算设备,其中,所述用于将所述线程从所述系统线程调度器移动到所述线程调度引擎的单元包括用于将所述线程从所述系统线程调度器的运行队列移动到所述线程调度引擎的未决队列的单元。
12.如权利要求10所述的计算设备,其中,所述用于将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元包括用于在所述线程被移动到所述系统线程调度器之前将所述线程从所述线程调度引擎的未决队列移动到所述线程调度引擎的就绪队列的单元。
13.如权利要求12所述的计算设备,其中,所述用于将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元还包括用于将所述线程从所述线程调度引擎的未决队列移动到所述系统线程调度器的运行队列或所述系统线程调度器的就绪队列中的一个的单元。
14.如权利要求10所述的计算设备,其中,所述用于将所述线程从所述线程调度引擎移动到所述系统线程调度器的单元包括用于向所述线程调度引擎提供指示所述线程能够被调度以用于执行的指示的单元。
15.如权利要求10所述的计算设备,其中,所述用于将所述线程从所述系统线程调度器移动到所述线程调度引擎的单元包括用于将对应于所述线程的句柄附加到所述线程调度引擎的未决队列的单元。
16.如权利要求10所述的计算设备,其中,所述用于识别所述线程是否具有一个或多个依赖的单元包括用于识别所述线程是否依赖于一个或多个其他线程的单元,并且其中,所述用于识别所述线程是否具有一个或多个依赖的单元包括用于识别所述线程是否依赖于一个或多个通信操作的单元。
17.如权利要求10所述的计算设备,还包括:
用于由所述线程调度引擎将所述一个或多个依赖发送到所述线程调度引擎的线程依赖跟踪电路的单元;以及
用于由所述线程调度引擎将接收的通知发送到所述线程依赖跟踪电路的单元,
其中,所述用于确定所述一个或多个依赖是否已经被满足的单元包括用于响应于发送所述接收的通知,从所述线程依赖跟踪电路接收所述一个或多个依赖已经被满足的指示的单元。
18.一种用于集成的线程调度的方法,所述方法包括:
由计算设备检测所述计算设备的线程的处理是否被一个或多个通信操作阻塞;
响应于检测到所述线程的所述处理被阻塞,由所述计算设备的系统线程调度器挂起所述线程;
由所述计算设备将挂起的线程从所述系统线程调度器移动到所述计算设备的网络接口控制器的线程调度引擎;
由所述线程调度引擎识别所述线程是否具有一个或多个依赖;
由所述线程调度引擎确定所述一个或多个通信操作中的每一个通信操作是否已经完成;
由所述线程调度引擎并且响应于确定所述线程具有所述一个或多个依赖,来确定所述一个或多个依赖是否已经被满足;以及
响应于确定(i)所述一个或多个通信操作中的每一个通信操作已经完成以及(ii)所述一个或多个依赖中的每一个依赖已经被满足,由所述线程调度引擎将所述线程从所述线程调度引擎移动到所述系统线程调度器。
19.如权利要求18所述的方法,其中,将所述线程从所述系统线程调度器移动到所述线程调度引擎包括将所述线程从所述系统线程调度器的运行队列移动到所述线程调度引擎的未决队列。
20.如权利要求18所述的方法,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器包括在所述线程被移动到所述系统线程调度器之前将所述线程从所述线程调度引擎的未决队列移动到所述线程调度引擎的就绪队列。
21.如权利要求20所述的方法,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器还包括将所述线程从所述线程调度引擎的未决队列移动到所述系统线程调度器的运行队列或所述系统线程调度器的就绪队列中的一个。
22.如权利要求18所述的方法,其中,将所述线程从所述线程调度引擎移动到所述系统线程调度器包括向所述线程调度引擎提供指示所述线程能够被调度以用于执行的指示。
23.如权利要求18所述的方法,其中,将所述线程从所述系统线程调度器移动到所述线程调度引擎包括将对应于所述线程的句柄附加到所述线程调度引擎的未决队列。
24.如权利要求18所述的方法,其中,识别所述线程是否具有一个或多个依赖包括识别所述线程是否依赖于一个或多个其他线程以及识别所述线程是否依赖于一个或多个通信操作中的至少一个。
25.如权利要求18所述的方法,还包括:
由所述线程调度引擎将所述一个或多个依赖发送到所述线程调度引擎的线程依赖跟踪模块;以及
由所述线程调度引擎将接收的通知发送到所述线程依赖跟踪模块,
其中,确定所述一个或多个依赖是否已经被满足包括响应于发送所述接收的通知,从所述线程依赖跟踪模块接收所述一个或多个依赖已经被满足的指示。
CN201680048794.6A 2015-09-25 2016-09-20 用于集成的线程调度的计算设备和方法 Active CN107924330B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/866,572 US9916178B2 (en) 2015-09-25 2015-09-25 Technologies for integrated thread scheduling
US14/866,572 2015-09-25
PCT/US2016/052616 WO2017105573A2 (en) 2015-09-25 2016-09-20 Technologies for integrated thread scheduling

Publications (2)

Publication Number Publication Date
CN107924330A CN107924330A (zh) 2018-04-17
CN107924330B true CN107924330B (zh) 2022-04-08

Family

ID=58409445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680048794.6A Active CN107924330B (zh) 2015-09-25 2016-09-20 用于集成的线程调度的计算设备和方法

Country Status (3)

Country Link
US (1) US9916178B2 (zh)
CN (1) CN107924330B (zh)
WO (1) WO2017105573A2 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963309B2 (en) * 2016-09-16 2021-03-30 Advanced Micro Devices, Inc. Network interface controller-based scheduling of processing tasks in a distributed computing system
CN109491780B (zh) * 2018-11-23 2022-04-12 鲍金龙 多任务调度方法及装置
CN113204412A (zh) * 2020-01-31 2021-08-03 伊姆西Ip控股有限责任公司 用于任务调度的方法、电子设备和计算机存储介质
US11494240B2 (en) * 2020-10-12 2022-11-08 Sap Se Dynamic rate limiting of operation executions for accounts
CN114567520B (zh) * 2020-11-26 2023-06-02 华为技术有限公司 实现集合通信的方法、计算机设备和通信系统
CN115617421B (zh) * 2022-12-05 2023-04-14 深圳市欧瑞博科技股份有限公司 进程智能调度方法、装置、可读存储介质及嵌入式设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101324851A (zh) * 2007-06-12 2008-12-17 华为技术有限公司 线程调度方法及其装置
CN101620527A (zh) * 2008-06-30 2010-01-06 英特尔公司 图形处理中管理活动线程依赖关系
CN101908000A (zh) * 2010-07-08 2010-12-08 北京航空航天大学 一种硬件型事务存储系统中事务线程的阻塞唤醒方法
CN103116634A (zh) * 2012-06-12 2013-05-22 上海雷腾软件有限公司 支持高并发缓存任务队列的系统及其异步批量操作方法
US9104500B1 (en) * 2011-09-29 2015-08-11 Emc Corporation Lock-free job scheduler for multi-processor systems

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7363474B2 (en) 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20070074217A1 (en) 2005-09-26 2007-03-29 Ryan Rakvic Scheduling optimizations for user-level threads
US8767772B2 (en) 2012-02-03 2014-07-01 Apple Inc. System and method for scheduling packet transmission on a client device
US9274832B2 (en) 2013-02-07 2016-03-01 Htc Corporation Method and electronic device for thread scheduling
US10140157B2 (en) * 2014-05-29 2018-11-27 Apple Inc. Multiple process scheduling of threads using process queues
US10310891B2 (en) * 2015-06-05 2019-06-04 Apple Inc. Hand-off scheduling

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101324851A (zh) * 2007-06-12 2008-12-17 华为技术有限公司 线程调度方法及其装置
CN101620527A (zh) * 2008-06-30 2010-01-06 英特尔公司 图形处理中管理活动线程依赖关系
CN101908000A (zh) * 2010-07-08 2010-12-08 北京航空航天大学 一种硬件型事务存储系统中事务线程的阻塞唤醒方法
US9104500B1 (en) * 2011-09-29 2015-08-11 Emc Corporation Lock-free job scheduler for multi-processor systems
CN103116634A (zh) * 2012-06-12 2013-05-22 上海雷腾软件有限公司 支持高并发缓存任务队列的系统及其异步批量操作方法

Also Published As

Publication number Publication date
US20170090979A1 (en) 2017-03-30
CN107924330A (zh) 2018-04-17
WO2017105573A3 (en) 2017-08-03
WO2017105573A2 (en) 2017-06-22
US9916178B2 (en) 2018-03-13

Similar Documents

Publication Publication Date Title
CN107924330B (zh) 用于集成的线程调度的计算设备和方法
US10768841B2 (en) Technologies for managing network statistic counters
CN107852413B (zh) 用于将网络分组处理卸载到gpu的网络设备、方法与存储介质
US9462084B2 (en) Parallel processing of service functions in service function chains
CN105511954B (zh) 一种报文处理方法及装置
US9218203B2 (en) Packet scheduling in a multiprocessor system using inter-core switchover policy
CN110661725A (zh) 用于对出口上的网络分组进行重排序的技术
US8949577B2 (en) Performing a deterministic reduction operation in a parallel computer
US8566509B2 (en) Efficiently implementing a plurality of finite state machines
US9158602B2 (en) Processing posted receive commands in a parallel computer
WO2017112260A1 (en) Technologies for sideband performance tracing of network traffic
CN108028781B (zh) 用于网络往返时间估计的技术
US20180191630A1 (en) Techniques for processor queue management
US10318456B2 (en) Validation of correctness of interrupt triggers and delivery
JP2017509055A (ja) 並列プロトコル・スタック・インスタンスに基づいてデータパケットを処理する方法および装置
US10554513B2 (en) Technologies for filtering network packets on ingress
US9374325B2 (en) Hash perturbation with queue management in data communication
US9304955B2 (en) Techniques for identifying and handling processor interrupts
CN110413210B (zh) 用于处理数据的方法、设备和计算机程序产品
EP4123449A1 (en) Resource scheduling method and related device
CN107925593B (zh) 用于聚合消息处理的计算节点、方法、设备和可读介质
CN108293006B (zh) 用于跟踪无序网络分组的技术
US9338219B2 (en) Direct push operations and gather operations
US10284501B2 (en) Technologies for multi-core wireless network data transmission
US20230096015A1 (en) Method, electronic deviice, and computer program product for task scheduling

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant