带有上下文提示的功能的唤醒和调度的制作方法

文档序号:23800517发布日期:2021-02-02 12:55阅读:143来源:国知局
带有上下文提示的功能的唤醒和调度的制作方法

[0001]
本文中描述的各个示例涉及唤醒和激活空闲应用。


背景技术:

[0002]
软件社区已经采用了分散式方法来从许多较简单的微服务和单元功能的模块化综合开发复杂的服务。这种结构提供松散联接、可独立部署和发展、高度可维护和可测试、可高效扩展的解决方案特点,并且这些解决方案被组织起来以结合不同企业、开发人员和服务供应商的特定功能的最佳组合。
[0003]
分散式软件架构(多个较小的专用应用,代替整体解决方案)非常受欢迎,尤其是对于基于云的传送而言。但是,存在一些效率低下的问题,即应用的密度有限以及通信开销和放大。在大多数常见的工作流程中,应用彼此之间可以进行大量通信。现有的接口引入了用于对数据进行编组和序列化的多个软件级别和操作。
附图说明
[0004]
图1显示了唤醒应用的已知方式。
[0005]
图2a示出了具有存储器等待和过滤的示例系统。
[0006]
图2b示出了应用作为用于唤醒其它应用的中介的用途。
[0007]
图3a示出了触发地址返回示例。
[0008]
图3b示出了提供对唤醒应用的原因的指示的示例方式。
[0009]
图3c示出了定时器唤醒的示例。
[0010]
图4描绘了示例过程。
[0011]
图5描绘了示例系统。
[0012]
图6描绘了示例过程。
[0013]
图7描绘了示例系统,其可以监测一个或多个指定的存储器范围并观察不允许唤醒应用的过滤器。
[0014]
图8a-1至8a-3描绘了用于对哪些事件导致唤醒进行编程的过程。
[0015]
图8b描绘了存储器监测操作。
[0016]
图9描绘了系统。
[0017]
图10描绘了可以使用实施例或被实施例使用的网络接口。
[0018]
图11描绘了数据中心的示例。
具体实施方式
[0019]
现有的应用调度方法涉及下列中的一项:a)中断、异常或信号(例如,软或硬);b)针对资源状态改变的轮询,例如轮询模式驱动程序实现;c)集中式调度器(例如,linux或其它操作系统(os)或虚拟机管理程序/虚拟机管理器(vmm));d)专有调度器(例如,线程池、java等的各种实现);(e)分批操作;或(f)事件驱动的执行。中断、异常或信号对于通信而言
效率不高,不支持远程调用,并且对语言和框架的支持有限。异常旨在处理软件问题,不适合作为通信机制。信号不适用于远程过程调用(rpc),并且需要软件轮询才能实现。中断和集中式调度器提供了从一个上下文切换到另一个上下文所产生的高开销。
[0020]
轮询会浪费中央处理单元(cpu)资源,并且由于每个内核针对轮询仅执行单个应用或硬件线程,因此提供了较低的应用利用率。软件轮询会消耗计算资源并限制每台服务器的工作负载密度。专有调度器仅适用于其特定环境。操作批处理提供高延时和低灵活性。事件驱动的执行要求使用高开销和延时的中断或软件轮询来检测可能浪费cpu资源的事件。
[0021]
与x86指令集架构兼容的cpu中的monitor/mwait机制允许给定cpu上的软件监测和接收基于存储器的通知。这些指令最初是为节省功率而设计的,以便在不使用内核时可使内核进入睡眠。monitor/mwait允许应用空闲并且在应用要进行工作或处理作业时被唤醒。该应用监测存储器的区域(例如,地址或高速缓存线),并且如果对该区域内的任何地址有存储器存取,则该应用苏醒。基于存储器的通知可用于触发响应动作。但是,monitor/mwait具有局限性,例如,仅单个存储器区域受到监测,给定cpu内核上仅单个应用可以被唤醒,并且要求检查整个存储器范围以知晓哪个地址导致了触发。
[0022]
各种实施例增强了现有的存储器监测硬件设备,以便还服务于应用调度用例,使得为应用调度实现非常低的开销,这可以适用于使用基于传统虚拟机(vm)的调度(通过其在vmm中的支持)、容器、过程或通过os调度器(例如linux)中实施的线程调度的许多用例,并适用于类似功能即服务(faas)的环境。
[0023]
虚拟机(vm)可以是运行操作系统和一个或多个应用的软件。虚拟机由规范、配置文件、虚拟磁盘文件、非易失性随机存取存储器(nvram)设置文件和日志文件定义,并由主机计算平台的物理资源支持。容器可以是应用、配置和依赖性的软件包,因此应用可以在一个计算环境上可靠地运行到另一个计算环境。容器可以共享安装在服务器平台上的操作系统,并作为独立的进程运行。
[0024]
图1显示了唤醒应用的已知方式。现有的monitor/mwait(例如,内核)指令和相应的监测硬件主要设计用于在以下情况下节省功率:不需要运行的内核可以关闭并在需要时使用存储器更新或中断唤醒。在动作1,从存储器范围的起始开始,在偏移量5处以1字节(1b)更新了高速缓存线。在动作2,通过更新高速缓存线来触发monitor/mwait硬件设备运行。在动作3,monitor/mwait硬件唤醒目标软件功能。在动作4,如有必要,应用将扫描存储器以查找更新了哪个字节。如果值未更改,则现有方案不允许应用容易地算出所配置地址范围的被触发地址。在此假定该应用已保存了先前的存储器状态以进行比较,或者存储器已被重置为应用已知的值。在动作5,应用将偏移5处的字节重置为下一个唤醒事件的已知值。
[0025]
图2a示出了具有存储器等待和过滤的示例系统。系统可以尝试提供较低延时的应用唤醒和高效的中央处理单元(cpu)调度。对功能的唤醒可以指从睡眠或较低功率或较低操作时钟频率变为较高功率或较高操作时钟频率。唤醒还指的是调用具有相应应用上下文(寄存器、状态等)的空闲应用,该空闲应用由于等待某个事件或者为了同一内核上运行的另一个应用的利益而释放了cpu而未运行。在一些实施例中,可以在内核级和用户空间调用中的一个或这二者中存取监测设备。监测设备可以是monitor/mwait组件。monitor硬件可
以通过将硬件事件映射到指定监测的存储器范围(例如,伪存储器范围)来标识最初可能作为硬件事件(包括中断)出现的基于存储器的信号。例如,当等待存取或事件发生时,或者当流逝了指定时间量时,等待可以完成。在一些实施例中,唤醒事件指示唤醒原因和/或触发地址中的一项或多项,从而消除了唤醒软件来发现唤醒原因或触发地址的负担。在一些实施例中,monitor硬件可以被配置为:监测一个以上的存储器范围(例如,连续的或不连续的)。为了消除不必要的唤醒,在一些实施例中,可以使用过滤器或提交类型来配置monitor硬件,以基于存储器存取或事件的类型来唤醒(或不唤醒)目标功能或设备。
[0026]
图2b示出了应用作为用于唤醒其它应用的中介的用途。在一些实施例中,系统为监测应用254(app0)分配空间,使得系统允许直接调用监测应用254而不是调用特定的应用、功能或硬件设备。在一些示例中,功能调度器可以使用监测应用254。使用监测应用254可能有多个好处。例如,如果不存在触发的地址返回能力,则可以将目标功能索引直接写入与唤醒监测应用254相关联的存储范围252之内的存储器空间中。在监测应用254被激活之后,监测应用254可以读取经更新的存储器空间中的值,然后基于读取的值来调用目标功能。
[0027]
例如,监测应用254可以在内核上运行。在一些实施例中,如果与监测应用254相关联的存储器范围252有任何更新,则可以使用monitor/mwait设备256来调用监测应用254。存储器范围252的更新导致监测应用254的唤醒,并且监测应用254读取地址范围中的所有字节以确定哪个字节已改变。根据改变的字节号,监测应用254可以唤醒相关联的应用(例如,功能1或功能n)。对于在同一内核上运行的n个功能,与监测应用254相关联的被监测存储器区域252为n*x个字节,并且每个应用或功能在存储器区域252中具有x个专用字节。例如,在可能在单个内核上同时执行64个应用并且每个应用分配单个字节的情况下,监测应用254监测64个字节的存储器空间以进行更新。调度器250能够更新与已调度为接下来运行的n个应用或功能中的一个相对应的x个字节中的任何一个字节。在非常简单的情况下,调度器250可以仅使用单个预定义值(例如,值1)来更新n个应用或功能中的一个的相应字节。
[0028]
图3a描绘了使用监测应用来唤醒目标功能的示例序列。在一些示例中,可以将触发地址(例如,字节号)置于寄存器中,并且监测应用仅读取由触发地址指定的被监测地址范围中的特定字节,而不是扫描存储器范围。例如,如果将值5写入与监测应用相关联的寄存器中,则监测应用可以从字节地址范围中只读取字节位置5,并且监测应用可以唤醒与字节位置5相关联的目标功能。监测应用可以充当用户空间中的代理或微型内核。例如,监测应用可以实现为下列各项中的任意一项或其组合:处理器执行的线程、子例程、任何可执行代码段、硬件实现的应用调度器、固定功能设备、现场可编程门阵列(fpga)等等。在没有指定触发地址返回的情况下,监测应用(或应用调度器)将需要扫描其整个被监测存储器区域,以识别特定位置已经改变或存取了某个值(例如,使用向量指令),并调用与改变的存储器位置相关联的相应的应用或功能。如果在没有指定触发地址返回的情况下,被存取的存储器值没有被修改(示例包括以与当前存储在存储器中指定地址处的值相同的值进行存储器读取或存储器写入),则应用(或应用调度器)将无法直接确定被存取的地址。
[0029]
请注意,存储器存取可以包括高速缓存器修改,例如高速缓存器逐出或刷新、所有权改变、快照、丢弃高速缓存线。
[0030]
在一些示例中,代替或除了改变存储器的区域之外,可以将指向存储器的指针传
递给要被唤醒的应用。例如,标识哪个存储器位置已被更新或存取的监测硬件也可以将指向该存储器位置的指针写入到监测硬件和应用二者的已知寄存器中。在唤醒后,关联的应用可以从寄存器存取指针,并使用指针存取存储在存储器中的其它信息。例如,转换后备缓冲器(translation lookaside buffer,tlb)(未示出)可以将由指针引用的地址转换为物理地址空间。指针引用的信息可以是下列各项中的任何一项或其组合:数据、指针、分组、分组有效载荷、分组报头、命令、可执行代码、库等。
[0031]
在一些实施例中,触发地址是指向触发存储器地址的栈列表的存储器指针。例如,如果多个地址几乎同时或在某个时间帧内更新,则存储器指针可以标识栈列表的存储器中的位置,并且可以将存储器指针写入寄存器。监测应用可以使用栈列表来识别更新或存取的存储器地址或一些存储器地址,并读取一个或多个存储器地址的内容。
[0032]
例如,由监测应用写入或存取的指向其的指针或触发地址的寄存器可以是通用中央处理单元(cpu)寄存器,例如eax或ecx。与存储器位置相比,应用可以更容易、更快速地存取cpu寄存器。寄存器可以是预定义的,以便当监测应用从mwait()苏醒时,某些信息(例如,指针或触发地址)被存储在特定的寄存器中。监测应用(或在一些实现中为监测应用的编译器)被配置为了解这些定义,以便监测应用在苏醒时或苏醒后读取寄存器。
[0033]
在其它示例中,当应用执行mwait()命令时,可以将信息置于mwait()命令中指定的存储器区域中。硬件逻辑(例如,monitor/mwait)可以将存储器区域的内容预取到高速缓存器中(最后一级高速缓存器(llc)、中级高速缓存器(mlc)、一级(l1)高速缓存器或其它高速缓存器)中,以减少信息存取时间。
[0034]
在一些示例中,可以将活动目标功能配置为:在无需进入睡眠和被唤醒的情况下存取未完成的唤醒请求的相关寄存器(例如,使用源代码、编译器或库)。
[0035]
对使用监测应用来唤醒目标功能的图3a的示例序列的描述如下。在动作301处,源应用或硬件设备更新偏移x处的区域m以唤醒与偏移x相关联的应用。区域m在存储器区域1至n中。在动作302处,区域m的更新触发monitor/mwait硬件以检测存储器区域中的变化。在动作303处,monitor/mwait硬件将区域号m和偏移x复制到与监测应用相关联的寄存器中。在动作304处,监测应用唤醒与经更新区域相关联的目标功能。目标功能可以是任何处理器执行的应用或软件、fpga、硬件设备、加速器设备等。
[0036]
在一些实施例中,监测应用或被唤醒的目标功能可以将更新的寄存器中的地址重置为零。在一些实施例中,监测应用或目标功能可以通过将指针移至触发地址栈中的下一个地址来重置寄存器,同时屏蔽监测硬件以防止其由于被监测存储器区域存取而触发唤醒。
[0037]
图3b示出了提供对唤醒应用的原因的指示的示例方式。硬件监测系统可以触发针对定义的存储器区域的任何更新的应用唤醒,并直接向目标功能提供与唤醒原因或相关参数有关的额外信息。相反,不提供唤醒原因可能导致唤醒的软件或硬件确定唤醒原因。例如,各种实施例提供了触发了mwait退出的退出原因和地址,以便硬件监测系统首先识别各种各样不同的唤醒原因,然后将唤醒原因提供给被唤醒的目标软件或硬件。
[0038]
在一些实施例中,与应用相关联的存储器区域中的更新值可以标识引起存储器更新和唤醒的源。在不限制可能的用例的情况下,值还可以标识调用下列各项的原因:目标功能(例如,队列条目、中断、事件、存储器存取等)、可用作业的数量(例如,队列中的分组)、要
处理的特定分组(例如,分组1-10中的分组编号9)、在目标功能被迫放弃cpu之前给予目标功能用以运行的最大时间(例如,应用可以只能运行t时间,因此在t时间之内完成一项作业,例如在功能即服务(faas)中),或者针对输入参数的存储器指针。
[0039]
在一些示例中,可以有多个源触发对存储器区域的更新以及应用或设备的唤醒。在一些示例中,源更新其在存储器区域中的指定区域,并且可以向被唤醒的应用标识更新了该存储器区域的多个源。在一些实施例中,可以仅标识一个唤醒源,由此该一个源在存储器区域中标识其自身,并且覆盖另一个源进行的较早时间的源标识。存储器的更新内容可以写入目标功能可存取的寄存器或寄存器组。除了通过目标功能节省存储器存取时间外,在寄存器中提供信息可以提供额外的安全性,因为该功能实际上并不存取存储器,甚至可能不知道存储器地址。
[0040]
下面提供了一个示例操作,该操作涉及将参数或唤醒源写入存储器区域。在动作321中,源应用或硬件设备更新在存储器区域1至n之中在偏移x处的区域m,以唤醒与偏移x相关联的应用。在该示例中,源p将值p写入存储器区域1-n之中的存储器区域中以请求目标功能的操作。在一个示例中,在存储器区域表示源并且该区域内的偏移表示目标功能的情况下,源1写入存储器区域1-n之中的存储器区域1的偏移x(功能索引)以请求由目标功能或设备x进行的操作。类似地,源2写入存储器区域1-n之中的存储器区域2的偏移x(功能索引),以请求由目标功能进行的操作,等等。
[0041]
在又一示例中,当将存储器区域映射到目标功能中并且每个源在该存储器区域中具有其存储器范围时,源1-p将值写入映射到目标功能的存储器区域m之内的相应位置1-p中。
[0042]
在又一示例中,源的数量如此之大,以至于每个源到其存储器区域或其在存储器区域内的专用位置的映射都变得不切实际,并且源1-p在没有活动唤醒的情况下将值写入下一个可用存储器区域的偏移x(功能索引)。在这种情况下,将所需区域的数量限制为未处理的唤醒实例的最大数量,该数量可以大大低于系统中源的总数。
[0043]
在动作322中,在1到n之间的存储器区域的更新触发monitor/mwait硬件,在动作323和323a处,用以将被更新的存储器区域复制到与目标功能相关联的寄存器中,偏移x处的被更新区域(例如,区域m)。
[0044]
在动作324处,监测应用唤醒与被更新区域相关联的目标功能。目标功能可以存取更新的寄存器,以确定请求唤醒的源和与作业相关的信息。写入寄存器的值可以标识应用要执行的源和/或参数以及与作业相关的信息。与作业相关的信息可以包括下列各项中的一项或多项:调用目标功能的原因、一个或多个唤醒请求者、可用作业的数量、要处理的一系列作业中的特定作业,在应用被迫放弃cpu之前给予应用用以运行的最大时间、针对存储器中输入参数的存储器指针,等等。
[0045]
图3c示出了应用的基于定时器的唤醒的示例。向monitor/mwait设备添加超时中断输入可以使得强制执行最大的应用或设备操作时间,并且可以用于抢先式应用或设备调度。超时时间可以由监测应用每次在被指定了最大运行时间的应用、功能或设备调用时来设置。应用、功能或设备可以在超时之前以已知状态释放共享资源(例如cpu),这样可以避免上下文保存,并且环境(例如os)不会存储以前的状态。在由于超时而强行中断正在运行的应用的情况下,监测应用可以导致保存应用上下文,然后在监测应用决定再次调度同一
中断的应用时恢复应用。但是,在应用运行直至完成并在超时之前放弃其cpu资源或在超时之前完成处理的情况下,该应用可能不需要其寄存器上下文来重新启动(例如,在微服务或faas环境中),因此通过消除寄存器保存或恢复操作,可以节省上下文切换的成本。放弃cpu资源可以实现为从监测应用的功能调用返回,这会将控制权带回监测应用。
[0046]
在一些实施例中,监测应用可以实施灵活的批处理方案,在该方案中,它仅使用可变超时,并发现在它们之间累积了多少新事件信息,以驱动批处理作业的执行,而无需建立精确的定时循环来完成对针对延时敏感的调遣的批处理间隔的细粒度控制。
[0047]
在一些实施例中,多个存储器区域被映射到不同的源。例如,可以为向应用发送作业的网络接口卡nic1分配存储器区域1,网络接口卡nic2可以使用存储器区域2来触发对同一应用或不同应用的使用。在一些实施例中,可以将不同的存储器区域分配给不同的租户。假设多个租户可以使用同一应用功能(例如,at&t软件是一个租户,verizon软件是另一个租户),则当应用苏醒时,应用通过存取被监测存储器区域(其允许正确设置所需的应用上下文)来知道哪个租户触发了唤醒。该信息可由目标应用本身或由监测应用使用。
[0048]
在动作331中,源应用或硬件设备更新在存储器区域1至n之中的偏移x处的区域m,以唤醒与偏移x相关联的应用。在动作332处,在1到n之中的存储器区域的更新触发monitor/mwait硬件,在动作333和333a处,用以将针对被存取存储器区域m和/或偏移x的引用复制到与目标功能相关联的寄存器中。例如,monitor/mwait硬件可以接收定时器信号,并且源在存储器区域中提供退出原因,并标识存储器区域中的定时器信号索引。作为另一个示例,定时器可以用作唤醒源,其可以更新存储器区域以唤醒应用或功能。在动作334处,监测应用唤醒与被更新区域和/或偏移相关联的目标功能。
[0049]
图4描绘了示例过程。在402处,该过程可以检测到对存储器区域的存取并且引起相关联的应用或设备的唤醒。存取可以是源应用或设备的任何写入或读取。存储器区域可以与由cpu执行的一个或多个应用或过程相关联,这些应用或过程可以由硬件监测器设备从对存储器区域的写入或读取中唤醒。在一些示例中,存储器区域可以与一个或多个硬件设备相关联,这些硬件设备可以被硬件监测器设备通过写入到存储器区域或从存储器区域读取来唤醒。硬件监测器设备可以是用于检测从内核或用户空间调用的更新的monitor/mwait设备。在一些示例中,对存储器区域的存取使得monitor/mwait设备唤醒监测应用,并且监测应用可以使与被存取存储器区域相关联的应用或设备苏醒。
[0050]
在404处,针对是否提供了到该存取的存储器区域的特定偏移做出确定。如果提供了特定偏移,则过程继续到420。如果未提供特定偏移,则过程继续到406。
[0051]
在420处,唤醒功能将在特定偏移处开始的存储器的区域读取到存储器区域中。特定偏移可以由监测硬件(例如monitor/mwait)复制到寄存器中,并由唤醒的应用读取。在特定偏移处开始进入存储器区域的存储器的区域可以是被配置为由应用读取的特定大小。该过程继续到408。
[0052]
在406处,唤醒功能针对存储器的被存取区域对存储器区域进行扫描并识别出存储器的被存取区域。该过程继续到408。
[0053]
在408处,唤醒功能确定是否存在与请求由唤醒功能执行的作业或动作相关联的指定参数。可以配置唤醒功能(例如,在其源代码、编译器或库中)以识别一个或多个指定参数。指定参数可以包括下列各项中的一项或多项:用于调用目标功能的原因(例如,队列条
目、中断)、可用作业的数量(例如,队列中的分组)、要处理的特定分组(例如,分组1-10中的分组编号x)、在目标功能被迫放弃cpu之前给予目标功能用以运行的最大时间(例如,应用可以只能运行t时间,因此在t时间之内完成一项作业),或者针对存储器中的输入参数的存储器指针。如果过程确定没有与要由被唤醒功能执行的作业或动作相关联的特定参数,则过程继续到410。如果过程确定存在与要由被唤醒功能执行的作业或动作相关联的特定参数,则过程继续到430。
[0054]
在410处,与被存取存储器区域相关联的被唤醒功能执行与被存取存储器区域相关联的作业。为了执行作业,被唤醒功能可以检查其进入的作业队列、执行一些后台维护(例如,存储器清理)、重新布置优先级或对设备进行轮询。
[0055]
在430处,与被存取存储器区域相关联的被唤醒功能基于在存储器区域中指定的参数来执行与被存取存储器区域相关联的作业。在一些实施例中,可以将参数从被存取存储器区域复制到可由应用或设备存取的寄存器。本文描述了参数的各个示例。
[0056]
各种实施例提供了一种系统,该系统可以确定能够存取存储器区域的功能的优先级。存储器区域可以表示为可以存储多个条目的队列(例如,先进先出(fifo))。当功能苏醒时,队列中可以存在多个条目(例如,作业)以供执行。可以以多种方式来提供条目执行的优先级。一个功能可以具有多个关联的存储器区域,并且每个存储器区域被分配优先级等级。例如,如果一个功能具有5个相关联的存储器区域,则区域1是最高优先级,区域2是次高优先级,依此类推。被唤醒功能根据优先级顺序从存储器区域进行读取。在一些实施例中,监测硬件可以确定从监测硬件进行读取的功能以及从监测硬件请求下一个事件的功能的优先级。接收到的事件可以具有关联的优先级等级,以便将事件置于适当优先级等级的存储器区域中。
[0057]
各个实施例通过元队列提供了自我维持的排队事件。可以通过监测原语对“存储的行为”进行编程,以使通知引起存储的行为,并且存储的行为可以在各种条件下排队为第二事件。排队为第二事件可以是向元队列的提交。可以像监测普通队列一样监测元队列,但元队列可以间接通过监测由于软件动作而排队的动作来由监测硬件写入。因此,可以在呼叫和触发负载平衡中提供复用和解复用。
[0058]
图5描绘了示例系统。描述了系统操作的示例。在500处,可以对monitor/mwait设备或其它存储器存取监测设备或软件进行编程以监测对调用功能0、3和z的被监测区域554的存取。例如,被监测区域554(在存储器中)可以存储对任务队列552中的事件的头部和/或尾部的引用。在501处,可以在系统处接收外部事件。例如,设备可以从一个或多个源(例如应用、固定功能设备(数据移动器、加速器、时钟超时信号)等等)接收外部事件(例如,被监测存储器区域的更新、在网络接口处接收的分组、时钟超时信号)。
[0059]
在502处,对事件处理程序的调用被发布到队列管理器550。队列管理器还可以包括功能调度器,或者队列管理器可以是功能调度器的一部分。接收到外部事件的设备将事件放入队列管理器550。在503处,队列管理器550将事件排入队列552中。可以基于队列中的位置来设置事件的优先级。可以为每个功能分配单独的事件队列。可以为一个功能分配多个优先级队列,由此队列与特定优先级等级(例如,高、中、低)相关联。在一些示例中,尽管可以使用其它大小,但队列552中接收到的事件的长度是一个或多个字节。队列管理器550可以管理事件的执行顺序以及数据存储和可用性。
[0060]
在504处,出队逻辑556为事件确定执行单元(eu)570。如果eu 570可用,则出队逻辑556将可用事件提供给可用eu 570。eu 570可以通过存取被监测区域554中尾部或头部位置的相应条目来识别要处理的事件,从而通过更新与该事件的目标功能相关联的存储器区域来处理可用事件。在一些情况下,队列管理器550仅用新入队的事件信息来更新尾部,并且eu 570使用头部位置来出队并处理下一个事件。但是,不能等待处理同一队列中其它事件的一些紧急事件可以由队列管理器550直接排队到头部或其它位置。可以按接收顺序或根据优先级来处理事件,并且可以将多个事件作为硬件或软件功能的目标。在一些情况下,队列管理器550和eu 570可以在不同的队列条目上独立运行,因此队列存取是无锁的。然而,在某些情况下,当队列管理器550排队到非尾部位置时,可能需要在这些实体之间进行更严格的同步。
[0061]
在505和506处,监测逻辑572检测到存储器区域(例如,头部或尾部)的改变,并导致从mwait退出。在507处,mwait退出并唤醒软件(sw)功能3,并且sw功能3存取由头部位置指定的被监测区域554中的信息。在507处,sw功能3处理与其事件相关联的数据,该数据可以包括在出队事件条目中,由事件条目中的信息所引用(例如,数据的索引或指针),或者可以由事件源传递到事件源与目标功能之间商定的众所周知的位置。在508处,sw功能3通知eu 570事件已完成。在509处,eu 570以信号向队列管理器指示处理完成。
[0062]
队列管理器550可以被配置为基于外部事件的源(例如,服务链)使用指示下一处理步骤的表。在该示例中,对事件的处理完成导致事件被发布到任务队列552以调用另一功能,或者导致将数据复制到供该外部事件的源存取的位置。此后,对其它排队事件进行处理。
[0063]
图6描绘了一个示例过程,该过程可以由系统应用于对事件排队以由一个或多个功能执行。一个非限制性示例是针对图5描述的系统可以应用图6的过程。在602处,针对是否接收到新事件做出确定。如果未接收到新事件,则重复602。如果接收到新事件,则过程继续到604。在604处,将事件添加到队列。此外,可以为事件分配优先级。优先级等级可以例如基于事件的源或通过事件的源在事件内的优先级等级的标识。在606处,将指向事件的头部和/或尾部指针写入到被监测存储器区域,该存储器区域可以位于由排队实体基于事件优先级或队列类型确定的头部、尾部或其它位置。队列可以定义为严格的先进先出(fifo)队列,其中事件仅在尾部排入队列,并且仅从头部出队;或者具有较高灵活性的优先化队列,可以在头部、尾部或其它位置排入队列。
[0064]
在608处,监测设备唤醒目标功能,并使该功能从队列存取事件。例如,监测设备可以是monitor/mwait设备,用于监测对存储头部指针或尾部指针的存储器区域的存取。该功能可以是任何处理器执行的软件和/或硬件设备。在610处,目标功能执行与事件相关联的处理。在612处,目标功能向事件处理程序指示对事件的处理已完成。在614处,事件处理器调度下一个事件以由目标功能进行处理。
[0065]
各个实施例按照功能、优先级等级等等规定了事件队列。各个实施例规定下列各项中的一项或多项:监测元队列,监测多个队列,提供mwait退出的明确原因,通过monitor提供硬件事件过滤(针对退出原因、存储器范围),通知mwait中的时间过长,向不同的内核提供指示,当控制软件发现原因时强制从mwait退出,以及监测硬件充当状态引擎以产生其编程中指定的其自己的其它元事件。
[0066]
各个实施例规定了过滤哪些事件触发了功能唤醒。事件过滤器可以是比特掩码设置哪些事件类型可以被忽略,例如某些中断、系统管理中断(smi)、不可屏蔽中断(nmi)或其它非存储器存取事件。例如,当非易失性存储器(nvm)高速缓存线从高速缓存中(或从高速缓存线回写(clwb))退出时,事件可以触发功能唤醒,以减少对部分完成的更新的触发。可以过滤唤醒,以便在发生中断或smi时事件不会触发应用唤醒。系统定义的策略或中断控制器(例如,高级可编程中断控制器或其等效功能)可以将中断重定向到其它内核或设备。
[0067]
监测硬件可以统一基于存储器的通知和基于中断/事件的通知二者。例如,当等待时间过长时,会发生mwait的强制终止,以允许软件重新获得控制权。
[0068]
图7描绘了示例系统,该示例系统可以监测一个或多个存储器区域730并观察过滤器,以使得根据所应用的过滤器规则,允许或不允许对一个或多个存储器区域730的存取唤醒应用704。处理器702可以执行应用704,并且应用704可以包括指令706,该指令706可以指定在某些情况下是否有任何过滤器可用于应用以允许或禁止唤醒。由指令706提供的过滤器710可以在运行时或运行前被添加到源代码、编译器、库中。
[0069]
在一些示例中,可以将过滤器710存储到任何cpu寄存器。cpu可以支持一个或多个指令集(例如,x86指令集(具有一些扩展,这些扩展已被添加到较新版本中);加利福尼亚州桑尼维尔市的mips technologies公司的mips指令集;加利福尼亚州桑尼维尔市的arm holdings公司的arm指令集(带有可选的附加扩展,例如neon),包括本文所述的指令。例如,rcx或rdx寄存器可用于存储所应用的过滤器。例如,过滤器可以是提交类型,它描述请求者是否想要在数据高速缓存线的各种状态转换上被唤醒(或不唤醒),这些状态转换例如但不限于:(a)写入某些被监测存储器范围;(b)非破坏性写入(不改变值的写入(再次写入相同的值));(c)通过输入输出一致性来进行写入(例如,由于输入/输出直接存储器存取(dma)而产生的写入);(d)从被监测存储器范围中读取,或者(e)非数据操作,例如在将数据写入存储器但不刷新高速缓存线时的高速缓存线回写(clwb)。
[0070]
在一些示例中,过滤器710可以指示不引起从某些源唤醒。可以设置过滤器以忽略来自各个源的事件。源可以是以下任意源或其它源:定时器、内核、网络接口控制器、直接存储器存取(dma)设备、加速器、固定功能设备、fpga等。
[0071]
可以存储唤醒监测器720的操作参数。可以标识存储器730中的一个或多个连续或不连续的地址范围740的地址范围,以由唤醒监测器720进行监测。例如,唤醒监测器720可以是可以监测一个或多个连续或非连续地址范围740的monitor/mwait硬件设备。唤醒监测器720可以将过滤器应用于事件过滤器设置742或提交类型过滤器设置744。唤醒监测器720可以将超时定时器746中的设置应用于触发唤醒事件。
[0072]
唤醒监测器720可至少由于一个或多个存储器区域被存取(例如,读取)、更新、发生超时或由于特殊中断而唤醒功能。为了对唤醒监测器720进行编程,指令monitor[rax=addr,rcx/rdx=hints]可以由开发人员使用并添加到源代码中的应用中,由编译器添加或包括在库中等等。参数rax可以标识一个或多个要监测的地址范围。参数rcx/rdx可以标识:rcx或rdx寄存器包括不会引起唤醒或引起唤醒的过滤器或存储器存取类型提示。可以指定或使用其它类型的寄存器。
[0073]
在一些实施例中,监测逻辑可以通过维护元队列来监测多个队列,其中队列管理器发布多个队列中的哪个具有数据以避免存取空队列。监测逻辑可以监测元队列,使包含
对具有数据的实际队列的引用的条目出队,然后从实际队列中使该条目出队。
[0074]
为了定义对多个队列的监测,可以采用几种方法。可以多次执行monitor指令以设置对多个地址的监测。替代地或另外地,可以配置具有要监测的多个地址范围的表,并且monitor指令可以在寄存器中包含“提示”,以向监测硬件通知具有要监测的多个地址范围的表。该表可以包含以下信息(长度可以根据默认长度定义来显式指定或隐式导出):
[0075]
[起始地址1][长度1]
[0076]
……
[0077]
[起始地址n][长度n]
[0078]
图8a-1至8a-3描绘了指定要监测的多个地址范围的示例过程。在802处,针对是否随指令提供了提示并且该提示是否与一个或多个范围的列表相关联做出确定。如果随指令提供了提示,并且该提示与一个或多个范围的列表相关联,则过程进行到图8a-2。如果没有随指令提供提示,或者该提示与一个或多个范围的列表不相关联,则过程进行到804。
[0079]
在804处,针对是否可以添加一个或多个地址范围的列表用于监测做出确定。如果可以添加一个或多个范围的列表,则过程继续到806。如果不能添加一个或多个范围的列表,则过程继续到810,并且返回并发生错误。
[0080]
在806处,将一个或多个范围的列表添加到被监测地址范围。该过程继续到图8a-3中所示的过程。
[0081]
图8a-2描绘了可用于识别被监测存储器区域的过程。在820处,针对被监测地址的列表是否为空做出确定。如果被监测地址的列表不为空,则过程继续到822。如果被监测地址的列表为空,则过程继续到图8a-3的过程。
[0082]
在822处,针对是否可以将地址范围添加到被监测地址的列表做出确定。例如,指定的地址可能已经被另一个目标功能监测,这将触发错误。被监测地址列表可以具有最大数量的被监测地址,并且如果尝试添加地址范围超出了最大数量,则无法将地址范围添加到被监测地址列表中。例如,如果尝试添加的被监测地址范围可能超出允许的被监测地址范围,则该地址范围无法被添加到被监测地址列表中。如果不能将地址范围添加到被监测地址范围列表中,则过程继续到826以指示错误。如果可以将地址范围添加到被监测地址范围列表,则过程继续到824。
[0083]
在824处,将指令中指定的地址范围添加到被监测地址范围列表。monitor硬件被配置为监测被监测地址列表中的地址。
[0084]
图8a-3描绘了可用于确定如何应用提示的过程。在一些实施例中,提示或过滤器应用于成功添加到列表中的所有地址。在830处,针对提示标志是否指示提示是提交类型做出确定。例如,随指令提供的提示可以包括指示该提示是提交还是事件过滤器的标志。提交或存取类型提示可以指示该功能将在数据高速缓存线或存储器区域上的各种状态转换时被唤醒。如果提示标志指示提示是提交类型,则过程继续到836。如果提示标志指示不是提示类型,则过程继续到832。
[0085]
在832处,针对提示标志是否指示提示是事件类型做出确定。事件过滤器可以与唤醒的源(例如,定时器、内核、网络接口、dma引擎、加速器等)相关联。如果提示标志指示提示是事件类型,则过程继续到834。如果提示标志指示提示不是事件类型,则过程可以结束或执行其它动作。在一些示例中,支持提交或事件类型过滤器。
[0086]
在834处,应用适用的事件类型过滤器以供使用。例如,监测硬件设备或应用被配置为应用任何适用的提交类型提示来确定是否唤醒功能。该过程可以结束或执行其它动作。
[0087]
在836处,提交类型提示被配置用于存储器监测。例如,监测硬件设备或应用被配置为应用任何适用的提交类型提示来确定是否唤醒功能。在836之后,该过程可以结束或执行其它动作。
[0088]
各个实施例利用报告退出原因和触发地址以及超时应用操作来扩展mwait操作。为了存取退出原因、触发地址、超时信息或其它信息,提供了提示供mwait使用。根据一些实施例,mwait可以被配置为定义超时(例如,以时钟滴答或毫秒来指定)。例如,在达到超时之后,mwait会将退出原因设置为超时以允许软件处理。应用行为可以由操作系统(os)或基础设施调度器或协调器控制,这可能会限制功能处于等待状态或活动状态的时间量。os或基础设施可以在cpu寄存器中设置超时,当计数的时钟滴答达到指定值时将导致异常。在一些实施例中,os或基础设施可以发送进程间中断(ipi),这将导致无条件地将控制转移到os定义的中断服务例程,该例程可以做出决定在何处终止或继续执行功能。
[0089]
图8b描绘了可以用于存储器监测操作的过程。由于存储器监测对被监测范围的数量有所限制,因此cpuid指令可以报告确切的能力,包括每个内核同时被监测范围的数量、事件过滤和提交类型能力。该过程可由mwait设备或用于监测对存储器区域的存取并基于提交过滤器、事件过滤器或定时器来确定要唤醒什么功能的处理器执行的应用来使用。在850处,针对接收到的事件是否是存储器存取做出确定。如果事件包括存储器存取,则过程继续到852。在852处,针对存储器存取是否与所监测存储器区域相对应做出确定。如果存储器存取与被监测的存储器区域相对应,则过程继续到854。如果存储器存取不与被监测的存储器区域相对应,则该过程可以结束或执行其它动作。
[0090]
在854处,该过程确定提交类型过滤器是否匹配。如果提交类型过滤器适用,则过程继续到856。如果提交类型过滤器不适用,则该过程可以结束或执行其它动作。
[0091]
在856处,过程确定是否应该设置被触发地址。例如,可以在被存取存储器区域中指定被触发地址。如果被触发地址可用,则过程继续到858。如果被触发地址不可用,则过程继续到864。
[0092]
在858处,设置被触发地址。例如,被触发地址可以指示请求功能唤醒的源。设置被触发地址可以包括将被触发地址写入到可由唤醒功能存取的寄存器中,以通知唤醒功能哪些源触发了其唤醒。该过程继续到864。
[0093]
在860处,针对检测到的事件是否被认为是不涉及存储器地址触发的事件做出确定。如果认为检测到的事件是这样,则过程继续到862。在862处,针对事件是否被过滤做出确定。如果事件被过滤,则过程结束或执行其它动作。如果事件未被过滤,则过程继续到864。
[0094]
在864处,针对是否要设置退出原因做出确定。如果随着接收到的事件提供了退出原因,则过程继续到866。如果随着接收到的事件未提供退出原因,则该过程可以结束或执行其它动作。例如,如先前所述,退出原因可以指示调用下列各项的原因:目标功能(例如,队列条目、中断、超时等)、可用作业的数量(例如,队列中的分组)、要处理的特定分组(例如,分组1-10中的分组编号9)、在目标功能被迫放弃cpu之前给予目标功能用以运行的最大
时间(例如,应用可以只能运行t时间,因此在t时间之内结束一项作业,例如在功能即服务(faas)中),或者针对输入参数的存储器指针。
[0095]
在866处,可以设置退出原因。设置退出原因可以包括将退出原因写入由唤醒功能可以存取的寄存器。在866之后,该过程可以结束或执行其它动作。
[0096]
在870处,针对接收到的事件是否是无条件中断做出确定。例如,无条件中断可以是不可屏蔽中断(nmi)。如果接收到的事件是无条件中断,则过程继续到864。如果接收到的事件不是无条件中断,则过程继续到880。
[0097]
在880处,针对接收到的事件是否与定时器到期有关做出确定。例如,时钟计数器可以在定时器到期或定时器达到特定值时发出事件。如果接收到的事件与定时器到期有关,则过程继续到864。如果接收到的事件与定时器到期无关,则过程可以结束。
[0098]
图9描绘了系统。该系统可以在任何组件(例如,处理器910、图形940、加速器942、网络接口950、存储器930或存储器984)中使用本文所述的实施例。系统900包括处理器910,其为系统900提供处理、操作管理和指令执行。处理器910可以包括任意类型的微处理器、中央处理单元(cpu)、图形处理单元(gpu)、处理内核、或用于为系统900提供处理的其它处理硬件或者处理器的组合。处理器910控制系统900的总体操作,并且可以是或者包括一个或多个可编程通用或专用微处理器、数字信号处理器(dsp)、可编程控制器、专用集成电路(asic)、可编程逻辑器件(pld)或类似物,或者这些设备的组合。
[0099]
在一个示例中,系统900包括耦合至处理器910的接口912,其对于需要更高带宽连接的系统组件(例如,存储器子系统920或图形接口组件940或加速器942)可以代表更高速度的接口或高吞吐量的接口。接口912表示接口电路,其可以是独立组件或集成到处理器管芯上。当存在时,图形接口940与图形组件对接,用于向系统900的用户提供视觉显示。在一个示例中,图形接口940可以驱动向用户提供输出的高清晰度(hd)显示器。高清晰度可以指具有约100ppi(每英寸像素)或更高的像素密度的显示器,并且可以包括诸如全高清(例如1080p)、视网膜显示、4k(超高清或uhd)的格式或其它格式。在一个示例中,显示器可以包括触摸屏显示器。在一个示例中,图形接口940基于存储在存储器930中的数据或基于由处理器910执行的操作或二者来生成显示。在一个示例中,图形接口940基于存储在存储器930中的数据或基于由处理器910执行的操作或二者来生成显示。
[0100]
加速器942可以是由处理器910存取或使用的固定功能卸载引擎。例如,加速器942中的加速器可以提供压缩(dc)能力、密码服务(例如公共密钥加密(pke)、密码、哈希/认证能力、解密)或其它能力或服务。在一些实施例中,附加地或替代地,加速器942中的加速器提供如本文所述的场选择控制器能力。在一些情况下,加速器942可以集成到cpu中,或者通过各种设备(例如,到包括cpu并提供与cpu的电接口的主板或电路板的连接器)连接到cpu。例如,加速器942可以包括单核或多核处理器、图形处理单元、逻辑执行单元单级或多级高速缓存、可用于独立执行程序或线程的功能单元、专用集成电路(asic)、神经网络处理器(nnp)、可编程控制逻辑,以及可编程处理元件(例如现场可编程门阵列(fpga))。加速器942可以提供多个神经网络、cpu、处理器内核、通用图形处理单元,或者图形处理单元可用于供人工智能(ai)或机器学习(ml)模型使用。例如,ai模型可以使用或包括下列各项中的任何一项或其组合:强化学习方案、q学习方案、深度q学习或异步优势actor-critic(a3c)、组合神经网络、递归组合神经网络,或者其它ai或ml模型。可以使多个神经网络、处理器内核或
图形处理单元可用于供ai或ml模型使用。
[0101]
存储器子系统920代表系统900的主存储器,并为将由处理器910执行的代码或将在执行例程中使用的数据值提供存储单元。存储器子系统920可以包括诸如只读存储器(rom)、闪存器、一种或多种随机存取存储器(ram)(例如dram)或其它存储器设备的一个或多个存储器设备930,或这些设备的组合。除其它事项外,存储器930存储并托管操作系统(os)932,以便提供用于系统900中的指令的执行的软件平台。另外,应用934可以在os 932的软件平台上从存储器930执行。应用934表示具有其自己的操作逻辑以执行一个或多个功能的运行的程序。过程936表示向os 932或一个或多个应用934或组合提供辅助功能的代理或例程。os 932、应用934和过程936提供用于为系统900提供功能的软件逻辑单元。在一个示例中,存储器子系统920包括存储器控制器922,该存储器控制器922是用于生成命令并向存储器930发布命令的存储器控制器。将理解的是,存储器控制器922可以是处理器910的物理部分或接口912的物理部分。例如,存储器控制器922可以是集成存储器控制器,其与处理器910一起集成到电路上。
[0102]
尽管没有具体示出,但是将理解,系统900可以包括设备之间的一个或多个总线或总线系统,例如存储器总线、图形总线、接口总线或其它总线。总线或其它信号线可以将组件通信地耦合或电耦合在一起,或者将组件通信耦合并且电耦合。总线可以包括物理通信线路、点对点连接、桥接、适配器、控制器或其它电路或组合。总线可以包括:例如,下列各项中的一个或多个:系统总线、外围组件互连(pci)总线、超传输或工业标准体系结构(isa)总线、小型计算机系统接口(scsi)总线、通用串行总线(usb)、或电气和电子工程师协会(ieee)标准1394总线(火线)。
[0103]
在一个示例中,系统900包括接口914,其可以耦合至接口912。在一个示例中,接口914表示接口电路,其可以包括独立组件和集成电路。在一个示例中,多个用户接口组件或外围组件或二者耦合至接口914。网络接口950向系统900提供通过一个或多个网络与远程设备(例如,服务器或其它计算设备)通信的能力。网络接口950可以包括以太网适配器、无线互连组件、蜂窝网络互连组件、usb(通用串行总线)或其它有线或无线的基于标准的或专用接口。网络接口950可以将数据发送到位于同一数据中心或机架中的设备或远程设备,这可以包括发送存储在存储器中的数据。网络接口950可以从远程设备接收数据,这可以包括将接收到的数据存储到存储器中。可以结合网络接口950、处理器910和存储器子系统920来使用各个实施例。
[0104]
在一示例中,系统900包括一个或多个输入/输出(i/o)接口960。i/o接口960可以包括一个或多个接口组件,通过这些接口组件用户与系统900交互(例如,音频、字母数字、触觉/触摸或其它对接)。外围接口970可以包括上文没有具体提到的任何硬件接口。外围通常指的是依赖性地连接到系统900的设备。依赖连接是其中系统900提供在其上执行操作的软件平台或硬件平台或这二者,并且用户与之进行交互的连接。
[0105]
在一个示例中,系统900包括用于以非易失性方式存储数据的存储子系统980。在一个示例中,在某些系统实现中,存储单元980的至少某些组件可以与存储器子系统920的组件重叠。存储子系统984包括存储设备984,其可以是或者包括:用于以非易失性方式存储大量数据的任何常规介质,诸如一个或多个磁盘、基于固态或光学的盘、或者组合。存储单元984以持久状态保持代码或指令以及数据986(即,尽管系统900电力中断,但值保留)。存
储单元984可被一般认为是“存储器”,尽管存储器930通常是用于向处理器910提供指令的执行或操作存储器。而存储单元984是非易失性的,存储单元930可以包括易失性存储器(即,如果系统900电力中断,则数据的值或状态是不确定的)。在一个示例中,存储子系统980包括用于与存储单元984对接的控制器982。在一个示例中,控制器982是接口914或处理器910的物理部分,或者可以在处理器910和接口914二者中包括电路或逻辑。
[0106]
易失性存储器是这样一种存储器:如果设备断电,其状态(以及因此存储在其中的数据)是不确定的。动态易失性存储器需要刷新存储在设备中的数据以保持状态。动态易失性存储器的一个示例包括dram(动态随机存取存储器)或某些变体,例如同步dram(sdram)。本文描述的存储子系统可以与多种存储技术兼容,例如ddr3(双数据速率版本3,由jedec(联合电子设备工程委员会)于2007年6月27日发布的原始版本)。ddr4(ddr版本4,初始规范由jedec于2012年9月发布)、ddr4e(ddr版本4)、lpddr3(低功耗ddr版本3,jesd209-3b,由jedec于2013年8月发布)、lpddr4(lpddr版本4,jesd209-4,最初由jedec于2014年8月发布)、wio2(最初由jedec于2014年8月发布的宽输入/输出版本2,jesd229-2)、hbm(高带宽存储器,jesd325,最初由jedec于2013年10月发布)、lpddr5(目前正在由jedec讨论)、hbm2(hbm版本2,目前正在由jedec讨论),或者其它存储器技术或存储器技术的组合,以及基于这些规范派生或扩展的技术。jedec标准可从www.jedec.org获得。
[0107]
非易失性存储器(nvm)设备是即使设备电源中断也可以确定其状态的存储器。在一个实施例中,nvm设备可以包括块可寻址存储器设备,例如nand技术,或更具体地,多阈值级nand闪存(例如,单层单元(“slc”)、多层单元(“mlc”)、四层单元(“qlc”)、三层单元(“tlc”)或某种其它nand)。nvm设备还可以包括可字节寻址位置写入三维交叉点存储设备,或其它可字节寻址位置写入nvm设备(也被称为持久性存储器),例如,单级或多级相变存储器(pcm)或带开关的相变存储器(pcms)、使用硫族化物相变材料的nvm设备(例如,硫族化物玻璃)、包括金属氧化物基的电阻性存储器、氧空位基和导电桥随机存取存储器(cb-ram)、纳米线存储器、铁电随机存取存储器(feram、fram)、集成了忆阻器技术的磁阻随机存取存储器(mram)、自旋传递扭矩(stt)-mram、基于自旋电子磁性结存储器的设备、基于磁性隧穿结(mtj)的设备、基于dw(域墙)和sot(自旋轨道传递)的设备、基于晶闸管的存储器设备,或上述任意项的组合,或者其它存储器。
[0108]
电源(未示出)向系统900的组件供电。更具体地说,电源通常与系统900中的一个或多个电源供应对接,以向系统900的组件供电。在一个示例中,电源供应包括ac到dc(交流到直流)适配器,以插入壁装电源插座。这样的ac电源可以是可再生能源(例如,太阳能)电源。在一个示例中,电源包括dc电源,例如外部ac至dc转换器。在一个示例中,电源或电源供应包括用于通过与充电场接近来进行充电的无线充电硬件。在一个示例中,电源可以包括内部电池、交流电供应、基于运动的电源供应、太阳能电源供应或燃料电池源。
[0109]
在示例中,系统900可以使用处理器、存储器、存储单元、网络接口和其它组件的互连计算底座来实现。可以使用高速互连,例如pcie、以太网或光互连(或其组合)。
[0110]
本文的实施例可以在各种类型的计算和联网设备中实现,例如交换机、路由器、机架和刀片服务器,例如在数据中心和/或服务器场环境中所采用的那些。数据中心和服务器场中使用的服务器包括阵列服务器配置,例如基于机架的服务器或刀片服务器。这些服务器通过各种网络配置进行通信互连,例如将服务器集划分为局域网(lan),并在lan之间利
用适当的交换和路由设施以形成私有内联网。例如,云托管设施通常可以使用具有大量服务器的大型数据中心。刀片包括被配置为执行服务器类型功能的单独计算平台,即“卡上服务器”。因此,每个刀片包括常规服务器所共有的组件,包括提供用于耦合适当的集成电路(ic)和安装在板上的其它组件的内部布线(即,总线)的主印刷电路板(主板)。
[0111]
图10描绘了可以使用实施例或被实施例使用的网络接口。收发机1002能够按照适用协议(例如ieee 802.3-2018中所描述的以太网,尽管可以使用其它协议),使用任何端口(未示出)来接收和发送分组。收发机1002可以经由网络介质(未示出)从网络接收分组以及向网络发送分组。收发机1002可包括phy电路1014和介质存取控制(mac)电路1016。phy电路1014可以包括编码和解码电路(未示出),以根据适用的物理层规范或标准来对数据分组进行编码和解码。mac电路1016可以被配置为将要发送的数据组装成分组,分组包括目的地和源地址连同网络控制信息和错误检测散列值。mac电路1016可以被配置为通过下列各项来对所接收的分组的mac报头进行处理:验证数据完整性、去除前导码和填充,以及提供分组内容以供更高层进行处理。
[0112]
分组分配器1024可以使用本文所述的时隙分配或接收侧缩放(rss)来提供接收到的分组的分发,以供多个cpu或核进行处理。当分组分配器1024使用rss时,分组分配器1024可以基于所接收的分组的内容来计算散列或做出另一个确定,以确定哪个cpu或内核将处理该分组。
[0113]
中断调节1022可用于执行中断调节,由此网络接口中断调节1022在生成对主机系统的中断以处理所接收的分组之前,等待多个分组到达或等待超时到期。接收片段合并(rsc)可以通过网络接口执行,由此将入站分组的部分组合成分组的片段。网络接口可以将合并的分组存储在存储器中。
[0114]
直接存储器存取(dma)引擎1052可以将分组报头、分组有效载荷和/或描述符直接从主机存储器复制到网络接口,反之亦然,而不是将分组复制到主机的中间缓冲区,然后使用从中间缓冲区到目标缓冲区的另一个复制操作。在一些实施例中,多个dma引擎可用于将分组的内容传送到与主机设备相关联的目的地存储器或与加速器设备相关联的目的地存储器。
[0115]
处理器1004可以是下列各项的任意组合:处理器、内核、图形处理单元(gpu)、现场可编程门阵列(fpga)、专用集成电路(asic)或允许对网络接口进行编程的其它可编程硬件设备。处理器1004可以提供加速器功能,例如密码术(加密、解密、公钥加密(pke)或私钥加密或解密)、数据压缩(dc)、密码、报头处理、认证能力或其它服务。例如,“智能网络接口”可以使用处理器1004在网络接口中提供分组处理能力。例如,各种实施例可以使用本文描述的实施例来唤醒处理器1004以供使用。
[0116]
存储器1010可以是任何类型的易失性或非易失性存储器设备,并且可以存储用于对网络接口进行编程的任何队列或指令。发送队列1006可以包括数据或对存储在存储器中的数据的引用,以供通过网络接口的传输。接收队列1008可以包括数据或对由网络接口从网络接收并存储在存储器中的数据的引用。描述符队列1020可以包括引用发送队列1006或接收队列1008以及相应的目的地存储器区域中的数据或分组的描述符。
[0117]
总线接口1012可以使用网络、结构或直接连接来提供与主机设备(未示出)的接口。例如,总线接口1012可以与pci、pci express、pci-x、串行ata和/或usb兼容接口兼容
(尽管可以使用其它互连标准)。
[0118]
图11描绘了数据中心的示例。可以在图11的数据中心中或与之一起使用各种实施例,以接收事件并管理功能或应用唤醒。如图11所示,数据中心1100可以包括光学结构1112。光学结构1112通常可以包括光信号传送介质(例如光缆)和光交换基础结构的组合,数据中心1100中的任何特定底座都可以经由它们来向数据中心1100中的其它底座发送信号(并从其接收信号)。光学结构1112提供给任何给定底座的信号传送连接可以包括到同一机架中的其它底座以及其它机架中的底座的连接。数据中心1100包括四个机架1102a至1102d,机架1102a至1102d分别容纳成对的底座1104a-1和1104a-2、1104b-1和1104b-2、1104c-1和1104c-2以及1104d-1和1104d-2。因此,在该示例中,数据中心1100包括总共八个底座。光学结构1112可提供与七个其它底座中的一个或多个底座的底座信号传送连接。例如,通过光学结构1112,机架1102a中的底座1104a-1可以具有与机架1102a中的底座1104a-2以及分布在数据中心1100的其它机架1102b、1102c和1102d之间的六个其它底座1104b-1、1104b-2、1104c-1、1104c-2、1104d-1以及1104d-2的信号传送连接。这些实施例并不局限于该示例。例如,结构1112可以提供光学和/或电信号传送。
[0119]
可以使用硬件元件、软件元件或二者的组合来实现各个示例。在一些示例中,硬件元件可以包括设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、asic、pld、dsp、fpga、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。在一些示例中,软件元件可以包括:软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、功能、方法、过程、软件接口、api、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号、或它们的任意组合。确定是否使用硬件元件和/或软件元件来实现示例可以根据多种因素而不同,诸如对于给定实现所需要的期望的计算速率、功率电平、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度以及其它设计或性能约束。注意,硬件、固件和/或软件元件在本文中可以统称为或分别称为“模块”、“逻辑”、“电路”或“电路系统”。处理器可以是硬件状态机、数字控制逻辑、中央处理单元或任何硬件、固件和/或软件元件的一种或多种组合。
[0120]
一些示例可以使用或作为制品或至少一个计算机可读介质来实现。计算机可读介质可以包括用于存储逻辑的非暂时性存储介质。在一些示例中,非暂时性存储介质可以包括能够存储电子数据的一种或多种类型的计算机可读存储介质,其包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。在一些示例中,逻辑可以包括各种软件元件,例如软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、功能、方法、过程、软件接口、api、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号、或它们的任意组合。
[0121]
根据一些示例,计算机可读介质可以包括用于存储或维护指令的非暂时性存储介质,指令在由机器、计算设备或系统执行时,使机器、计算设备或系统执行根据所描述的示例的方法和/或操作。指令可以包括任何合适类型的代码,诸如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码等。可以根据预定义的计算机语言、方式或语法来实现指令,以指示机器、计算设备或系统执行特定功能。可以使用任何合适的高级、低级、面向对
象、可视、编译和/或解释的编程语言来实现指令。
[0122]
至少一个示例的一个或多个方面可以由表示处理器中的各个逻辑单元的至少一个机器可读介质上存储的代表性指令来实现,当由机器、计算设备或系统读取时,其使得机器、计算设备或系统制造逻辑单元以执行本文中描述的技术。被称为“ip核”的这样的表示可以存储在有形机器可读介质上,并提供给各个消费者或制造工厂以便加载到实际制造逻辑单元或处理器的制造机器中。
[0123]
短语“一个示例”或“示例”的出现不一定全都指相同的示例或实施例。本文中描述的任何方面可以与本文中描述的任何其它方面或类似方面组合,而不管这些方面是否是针对相同附图或元素进行描述的。对附图中描绘的模块功能的分割、省略或包括并不能推断出用于实现这些功能的硬件组件、电路、软件和/或元件一定被分割、省略或包括在实施例中。
[0124]
可以使用“耦合”和“连接”的表述及其衍生物来描述一些示例。这些术语并不一定旨在作为彼此的同义词。例如,使用术语“连接”和/或“耦合”的描述可以指示两个或更多元素彼此直接物理或电接触。然而,术语“耦合”也可以意指两个或更多元素并不彼此直接接触,但仍协同操作或彼此交互。
[0125]
术语“第一”、“第二”等在本文中不表示任何顺序、数量或重要性,而是用于将一个元素与另一个元素区分开。本文中的术语“一个”和“一”不表示数量限制,而是表示存在至少一个所引用的项目。本文中参考信号使用的术语“断言”表示信号的状态,其中信号是活跃的,并且可以通过对信号施加为逻辑0或逻辑1的任何逻辑电平来实现。术语“跟随”或“之后”可以指紧接或跟随在某个或某些其它事件之后。根据替代实施例,也可以执行其它步骤序列。此外,取决于特定应用,可以添加或删除附加步骤。可以使用改变的任何组合,并且受益于本公开内容的本领域的普通技术人员将理解其许多变型、修改和替代实施例。
[0126]
除非另有明确说明,否则在上下文中通常会将诸如短语“x、y或z中的至少一个”之类的析取语言理解为通常用于呈现项目、术语等可以是x、y或z,或者它们的任意组合(例如x、y和/或z)。因此,这种析取语言通常不旨在且不应暗示某些实施例要求分别存在x中的至少一个、y中的至少一个或z中的至少一个。另外,除非另有明确说明,否则诸如短语“x、y和z中的至少一个”之类的结合语也应理解为意指x、y、z或它们的任何组合,包括“x、y和/或z”。
[0127]
下面提供本文公开的设备、系统和方法的说明性示例。这些设备、系统和方法的实施例可以包括下文描述的示例中的任何一个或多个以及它们的任意组合。
[0128]
示例1包括一种装置,其包括存储器设备,所述存储器设备包括至少一个存储器区域;以及功能调度器,用于监测对至少一个存储器区域的存取,其中,响应于对所述至少一个存储器区域的存取,所述功能调度器将被存取存储器区域的标识写入一个或多个寄存器,以及与所述至少一个存储器区域相关联的目标功能,其基于所述一个或多个寄存器中被存取部分的所述标识仅读取所述至少一个存储器区域的所述被存取部分。
[0129]
示例2包括任何示例,其中,所述功能调度器用于将请求功能唤醒的源和与作业相关的信息从存储器区域标识到所述一个或多个寄存器,并且所述装置包括处理器,其中,所述处理器用于执行监测应用,所述功能调度器用于唤醒所述监测应用,并且所述目标功能用于从所述一个或多个寄存器存取所述源的所述标识以及所述与作业相关的信息。
[0130]
示例3包括任何示例,其中,所述功能调度器用于将关于请求功能唤醒的源的信息
以及定时器信息从存储器区域复制到所述一个或多个寄存器,并且所述装置包括处理器,其中,所述处理器用于执行监测应用,所述功能调度器用于唤醒所述监测应用,并且所述定时器信息用于控制所述目标功能可以执行的时间。
[0131]
示例4包括任何示例,其中,在完成与所述定时器信息相关联的定时器之前,所述目标功能用于在不需要保存其上下文用于下次被调度运行之处完成执行。
[0132]
示例5包括任何示例,并且包括处理器,其中所述处理器用于执行监测应用以唤醒与所述被存取存储器区域相关联的所述目标功能。
[0133]
示例6包括任何示例,其中,所述功能调度器包括monitor/mwait或存储器监测设备。
[0134]
示例7包括任何示例,并且包括处理器,其中所述处理器用于执行监测应用,所述监测应用用于应用过滤器以确定是否唤醒与所述被存取存储器区域相关联的所述目标功能,并且其中,如果所述过滤器指示不基于源唤醒所述目标功能,则所述监测应用不响应于所述被存取存储器区域来唤醒所述目标功能。
[0135]
示例8包括任何示例,并且包括至少一个源,所述至少一个源请求由被监测存储器存取、发布中断或另一事件来执行的功能唤醒,并且所述装置包括处理器,其中,源包括一个或多个设备、租户、由处理器执行的软件。
[0136]
示例9包括任何示例,并且包括处理器,其中所述处理器用于执行监测应用,所述监测应用用于应用过滤器以确定是否唤醒与所述被存取存储器区域相关联的所述目标功能,并且其中,如果所述过滤器指示不基于提交类型唤醒所述目标功能,则所述监测应用不响应于所述被存取存储器区域来唤醒所述目标功能。
[0137]
示例10包括任何示例,其中,所述提交类型包括下列各项中的一项或多项:对某些被监测的至少一个存储器区域的写入、不改变被监测的至少一个存储器区域的写入、基于输入输出一致性的存取、读取或数据被写入存储器但不刷新高速缓存线。
[0138]
示例11包括任何示例,其中,所述功能调度器用于监测两个或更多个存储器区域,并指示对所监测的两个或更多个存储器区域的存取的两个或更多个源。
[0139]
示例12包括任何示例,其中,所述功能调度器至少基于唤醒请求的源的优先级等级来确定唤醒目标功能的优先级。
[0140]
示例13包括任何示例,并且包括网络接口、数据中心、服务器或机架。
[0141]
示例14包括一种计算机实现的方法,其包括:监测对至少一个存储器区域的存取;检测对至少一个存储器区域中的区域的存取;使与所述被存取存储器区域相关联的目标功能在单个读取操作中执行:读取所述至少一个存储器区域中的被存取存储器区域,并且不读取所述至少一个存储器区域中的其它区域,以及存取与作业相关联的参数。
[0142]
示例15包括任何示例,其中,所述存取包括读取或写入操作中的一项或多项。
[0143]
示例16包括任何示例,并且包括:使用监测设备来监测所述至少一个存储器区域;监测设备将所述被存取存储器区域的标识符以及与作业相关联的任何参数写入所述目标功能可存取的一个或多个寄存器;以及所述目标功能存取所述一个或多个寄存器以读取所述标识符和任何参数。
[0144]
示例17包括任何示例,并且包括:配置监测设备以应用过滤器对所述至少一个存储器区域的存取,以及所述监测设备检测对至少一个存储器区域的存取,其中,所述监测设
备基于所述过滤器来允许或禁止唤醒与被存取的至少一个存储器区域相关联的功能。
[0145]
示例18包括任何示例,其中,所述过滤器识别存储器存取或下列各项中的一项或多项的源:对某些被监测的至少一个存储器区域的写入、不改变被监测的至少一个存储器区域的写入、基于输入输出一致性的存取、读取或数据被写入存储器但不刷新高速缓存线。
[0146]
示例19包括一种系统,其包括:至少一个处理器;至少一个源,其请求至少通过被监测存储器存取、发布中断或另一事件来执行功能唤醒;存储器设备,其包括至少一个存储器区域;以及存储器监测设备,其用于监测对至少一个存储器区域的存取,其中:所述存储器监测设备用于识别对所述至少一个存储器区域的任何存取,并将特定被存取存储器区域的标识符复制到所述一个或多个寄存器,所述存储器监测设备用于引起与所述特定被存取存储器区域相关联的目标功能的唤醒,以及被唤醒的目标功能用于仅存取所述特定被存取存储器区域和所述一个或多个寄存器,以识别唤醒源和与作业相关联的参数。
[0147]
示例20包括任何示例,其中,所述存取包括读取或写入操作中的一项或多项。
[0148]
示例21包括任何示例,其中,所述存储器监测设备被配置为:应用对所述至少一个存储器区域的存取的过滤器,并且所述存储器监测设备用于基于所述过滤器允许或禁止唤醒与被存取的至少一个存储器区域相关联的功能。
[0149]
示例22包括任何示例,其中,所述参数包括下列各项中的一项或多项:关于请求所述唤醒的源的信息,以及定时器信息,以及包括功能调度器,其中,处理器用于执行监测应用,并且所述功能调度器用于唤醒所述监测应用,并指示所述监测应用读取所述被存取存储器区域以及请求所述唤醒的所述源的标识和定时器信息,并将所述定时器信息提供给所述被唤醒的目标功能,以控制所述被唤醒目标功能可以执行的时间。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1