用于针对多租户可缩放加速器的高性能页错误处置的方法和装置与流程

文档序号:33164548发布日期:2023-02-04 01:17阅读:25来源:国知局
用于针对多租户可缩放加速器的高性能页错误处置的方法和装置与流程
用于针对多租户可缩放加速器的高性能页错误处置的方法和装置
背景
技术领域
1.本发明总体上涉及计算机处理器领域。更具体地,本发明涉及用于针对多租户可缩放加速器的高性能页错误处置的方法和装置。


背景技术:

指令集或指令集架构(isa)是计算机架构中涉及编程的部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(i/o)。应当注意,术语“指令”在本文中一般是指宏指令——即,提供给处理器以供执行的指令——而不是微指令或微操作——即,该微指令或微操作是处理器的解码器对宏指令解码的结果。微指令或微操作可以被配置成用于指令处理器上的执行单元执行操作以实现与宏指令相关联的逻辑。isa与微架构不同,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可共享共同的指令集。例如,奔腾4(pentium4)处理器、酷睿
tm
(core
tm
)处理器、以及来自加利福尼亚州桑尼威尔(sunnyvale)的超微半导体有限公司(advanced micro devices,inc.)的处理器实现几乎相同版本的x86指令集(具有已随更新的版本加入的一些扩展),但具有不同的内部设计。例如,isa的相同寄存器架构在不同的微架构中可使用公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(rat)、重排序缓冲器(rob)和引退寄存器堆)的一个或多个动态分配的物理寄存器。除非另外指定,否则短语“寄存器架构”、“寄存器堆”和“寄存器”在本文中用于指代对软件/编程者以及对指令指定寄存器的方式可见的寄存器架构、寄存器堆和寄存器。在需要区分的情况下,形容词“逻辑的”、“架构的”、或“软件可见的”将用于指示寄存器架构中的寄存器/寄存器堆,而不同的形容词将用于指定给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
附图说明
结合以下附图,从以下具体实施方式可获得对本发明更好的理解,其中:图1图示示例计算机系统架构;图2图示包括多个核的处理器;图3a图示处理流水线的多个级;图3b图示核的一个实施例的细节;图4图示根据一个实施例的执行电路;图5图示寄存器架构的一个实施例;图6图示指令格式的一个示例;
图7图示根据一个实施例的寻址技术;图8图示指令前缀的一个实施例;图9a-图9d图示如何使用前缀的r、x和b字段的实施例;图10a-图10b图示第二指令前缀的示例;图11图示指令前缀的一个实施例的有效载荷字节;图12图示指令转换和二进制变换实现方式;图13图示根据本发明的实施例的可缩放设备;图14图示用于处置页错误的方法的示例;图15图示根据本发明的实施例的用于处置页错误的方法的另一示例;图16图示出具有工作接受单元、工作分派器和工作执行单元的加速器;图17图示加速器与主机根复合体之间的事务;图18图示根据本发明的实施例的具有错误处理逻辑的加速器;图19a图示根据本发明的实施例的描述符;图19b图示根据本发明的实施例的批描述符;图20图示由加速器生成的完成记录;图21图示根据本发明的实施例由加速器生成的事件日志条目;图22图示包括多个控制寄存器的加速器;图23图示批完成记录的示例;图24图示示例排出描述符和排出完成记录;图25图示具有多个引擎和工作队列的加速器,这些引擎和工作队列中的至少一些使用页请求服务;以及图26图示根据本发明的实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述了众多特定细节以提供对下文所描述的本发明的实施例的透彻理解。然而,对本领域技术人员将显而易见的是,可在没有这些特定细节中的一些细节的情况下实施本发明的实施例。在其他实例中,以框图形式示出公知的结构和设备,以避免使本发明的实施例的基本原理变得模糊。示例性计算机架构下文详述的是对示例性计算机架构的描述。本领域中已知的对膝上型设备、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。图1图示示例系统的实施例。多处理器系统100是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连150耦合的第一处理器170和第二处理器180。在一些实施例中,第一处理器170和第二处理器180是同构的。在一些实施例中,第一处理器170和第二处理器180是异构的。
处理器170和180示出为分别包括集成存储器控制器(imc)单元电路172和182。处理器170还包括作为其互连控制器单元的一部分的点对点(p-p)接口176和178;类似地,第二处理器180包括p-p接口186和188。处理器170、180可以经由使用点对点(p-p)接口电路178、188的p-p互连150来交换信息。imc 172和182将处理器170、180耦合到相应的存储器,即存储器132和存储器134,这些存储器可以是本地附连到相应处理器的主存储器的部分。处理器170、180可各自经由使用点对点接口电路176、194、186和198的各个p-p互连152和154与芯片组190交换信息。芯片组190可以任选地经由高性能接口192来与协处理器138交换信息。在一些实施例中,协处理器138是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。共享高速缓存(未示出)可被包括在任一处理器170、180中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。芯片组190可以经由接口196耦合到第一互连116。在一些实施例中,第一互连116可以是外围组件互连(pci)互连或诸如pci快捷互连或另一i/o互连之类的互连。在一些实施例中,这些互连中的一个耦合到功率控制单元(pcu)117,功率控制单元117可以包括用于执行与处理器170、180和/或协处理器138有关的功率管理操作的电路、软件和/或固件。pcu 117将控制信息提供给电压调节器,以使电压调节器生成适当的经调节的电压。pcu 117还提供控制信息以控制所生成的操作电压。在各实施例中,pcu117可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。pcu 117被图示为作为与处理器170和/或处理器180分开的逻辑存在。在其他情形下,pcu 117可以在处理器170或180的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将pcu 117实现为被配置成用于执行其自身的专用功率管理代码(有时被称为p代码)的(专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由pcu 117执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(pmic)或处理器外部的另一组件的方式。在另外的其他实施例中,将由pcu 117执行的功率管理操作可在bios或其他系统软件内实现。各种i/o设备114可连同互连(总线)桥118耦合至第一互连116,互连桥118将第一互连116耦合至第二互连120。在一些实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)或任何其他处理器的一个或多个附加处理器115耦合到第一互连116。在一些实施例中,第二互连120可以是低引脚数(lpc)互连。各种设备可以耦合到第二互连120,包括例如,键盘和/或鼠标122、通信设备127和存储单元电路128。在一些实施例中,存储单元电路128可以是可以包括指令/代码和数据130的盘驱动器或其他大容量存储设备。此外,音频i/o 124可被耦合至第二互连120。注意,与上述点对点架构不同的其他架构是可能的。例如,代替点对点架构,诸如多处理器系统100之类的系统可以实现多分支互连或其他此类架构。示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。图2图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器200的实施例的框图。实线框图示具有单个核202a、系统代理210、以及一个或多个互连控制器单元电路的集合216的处理器200,而虚线框的任选添加图示具有多个核202(a)-(n)、系统代理单元电路210中的一个或多个集成存储器控制器单元电路的集合214、和专用逻辑208、以及一个或多个互连控制器单元电路的集合216的替代处理器200。注意,处理器200可以是图1的处理器170或180、或者协处理器138或115中的一个。因此,处理器200的不同实现方式可包括:1)cpu,其中专用逻辑208是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核202(a)-(n)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核202(a)-(n)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核202(a)-(n)是大量通用有序核。因此,处理器200可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器200可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。存储器层级结构包括核202(a)-(n)内的一个或多个级别的高速缓存单元电路204(a)-(n)、一个或多个共享高速缓存单元电路的集合206、以及耦合至集成存储器控制器单元电路的集合214的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合206可包括一个或多个中间级别的高速缓存(诸如第二级(l2)、第三级(l3)、第四级(l4))或其他级别的高速缓存(诸如末级高速缓存(llc))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路212将专用逻辑208(例如,集成图形逻辑)、共享高速缓存单元电路的集合206以及系统代理单元电路210互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路206和核202(a)-(n)中的一个或多个之间的一致性。在一些实施例中,核202(a)-(n)中的一个或多个能够实现多线程化。系统代理单元电路210包括协调和操作核202(a)-(n)的那些组件。系统代理单元电路210可包括例如功率控制单元(pcu)电路和/或显示单元电路(未示出)。pcu可以是对核202(a)-(n)和/或专用
逻辑208(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。核202(a)-(n)在架构指令集方面可以是同构的或异构的;即,核202(a)-(n)中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例性核架构有序和乱序核框图图3(a)是图示根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。图3(b)是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名的乱序发布/执行架构核两者的框图。图3(a)-图3(b)中的实线框图示有序流水线和有序核,而虚线框的任选添加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。在图3(a)中,处理器流水线300包括取出级302、可选的长度解码级304、解码级306、可选的分配级308、可选的重命名级310、调度(也称为分派或发布)级312、可选的寄存器读取/存储器读取级314、执行级316、写回/存储器写入级318、可选的异常处置级322、以及可选的提交级324。一个或多个操作可以在这些处理器流水线级中的每一级中执行。例如,在取出级302期间,从指令存储器取出一条或多条指令,在解码级306期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(lsu)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(lr))。在一个实施例中,解码级306和寄存器读取/存储器读取级314可以组合成一个流水线级。在一个实施例中,在执行级316期间,可以执行经解码的指令,可以执行lsu地址/数据流水线到高级微控制器总线(ahb)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线300:1)指令取出338执行取出级302和长度解码级304;2)解码单元电路340执行解码级306;3)重命名/分配器单元电路352执行分配级308和重命名级310;4)(多个)调度器单元电路356执行调度级312;5)(多个)物理寄存器堆单元电路358和存储器单元电路370执行寄存器读取/存储器读取级314;执行集群360执行执行级316;6)存储器单元电路370和(多个)物理寄存器堆单元电路358执行写回/存储器写入级318;7)各单元(单元电路)可牵涉到异常处置级322;以及8)引退单元电路354和(多个)物理寄存器堆单元电路358执行提交级324。图3(b)示出处理器核390,处理器核390包括耦合到执行引擎单元电路350的前端单元电路330,并且两者耦合到存储器单元电路370。核390可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核390可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。前端单元电路330可包括耦合至指令高速缓存单元电路334的分支预测单元电路332,该指令高速缓存单元电路334耦合至指令转换后备缓冲器(tlb)336,该指令转换后备缓冲器336耦合至指令取出单元电路338,该指令取出单元电路338耦合至解码单元电路
340。在一个实施例中,指令高速缓存单元电路334被包括在存储器单元电路370中,而不是在前端单元电路330中。解码单元电路340(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路340可进一步包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用所转发的寄存器端口生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、lr寄存器分支转发等)。解码单元电路340可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核390包括存储用于某些宏指令的微代码的微代码rom(未示出)或其他介质(例如,在解码单元电路340中,或以其他方式在前端单元电路330内)。在一个实施例中,解码单元电路340包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线300的解码级306或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路340可耦合到执行引擎单元电路350中的重命名/分配器单元电路352。执行引擎电路350包括重命名/分配器单元电路352,该重命名/分配器单元电路352耦合到引退单元电路354和一个或多个调度器电路的集合356。(多个)调度器电路356表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路356可以包括算术逻辑单元(alu)调度器/调度电路、alu队列、算术生成单元(agu)调度器/调度电路、agu队列,等等。(多个)调度器电路356耦合到(多个)物理寄存器堆电路358。(多个)物理寄存器堆电路358中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路358包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路358由引退单元电路354(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器(rob)和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路354和(多个)物理寄存器堆电路358耦合到(多个)执行集群360。(多个)执行集群360包括一个或多个执行单元电路的集合362以及一个或多个存储器访问电路的集合364。执行单元电路362可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路356、(多个)物理寄存器堆单元电路358和(多个)执行集群360示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元电路364的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多
个可以是乱序发布/执行,并且其余流水线可以是有序的。在一些实施例中,执行引擎单元电路350可执行加载存储单元(lsu)地址/数据流水线到高级微控制器总线(ahb)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。存储器访问电路的集合364耦合到存储器单元电路370,该存储器单元电路370包括数据tlb单元电路372,该数据tlb单元电路372耦合到数据高速缓存电路374,该数据高速缓存电路374耦合到第二级(l2)高速缓存电路376。在一个示例性实施例中,存储器访问单元电路364可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路370中的数据tlb电路372。指令高速缓存电路334还耦合到存储器单元电路370中的第二级(l2)高速缓存单元电路376。在一个实施例中,指令高速缓存334和数据高速缓存374被组合为l2高速缓存单元电路376、第三级(l3)高速缓存单元电路(未示出)和/或主存储器中的单个指令和数据高速缓存(未示出)。l2高速缓存单元电路376耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。核390可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);mips指令集;arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核390包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。示例性(多个)执行单元电路图4图示(多个)执行单元电路的实施例,诸如图3(b)的(多个)执行单元电路362。如图所示,(多个)执行单元电路362可以包括一个或多个alu电路401、向量/simd单元电路403、加载/存储单元电路405、和/或分支/跳转单元电路407。alu电路401执行整数算术和/或布尔运算。向量/simd单元电路403对紧缩数据(诸如simd/向量寄存器)执行向量/simd操作。加载/存储单元电路405执行加载和存储指令,以将数据从存储器加载到寄存器中或将数据从寄存器存储到存储器。加载/存储单元电路405也可以生成地址。分支/跳转单元电路407取决于指令而引起到存储器地址的分支或跳转。浮点单元(fpu)电路409执行浮点算术。(多个)执行单元电路362的宽度取决于实施例而变化,并且范围可以从16位到1024位。在一些实施例中,两个或更多个较小的执行单元在逻辑上被组合以形成较大的执行单元(例如,两个128位执行单元在逻辑上被组合以形成256位执行单元)。示例性寄存器架构图5是根据一些实施例的寄存器架构500的框图。如图所示,存在向量/simd寄存器510,在宽度上从128位到1024位变化。在一些实施例中,向量/simd寄存器510在物理上是512位的,并且取决于映射,只有较低位中的一些位被使用。例如,在一些实施例中,向量/simd寄存器510是512位的zmm寄存器:较低的256位用于ymm寄存器,并且较低的128位用于xmm寄存器。由此,存在寄存器的叠加。在一些实施例中,向量长度字段在最大长度与一个或多个其他较短长度之间进行选择,其中每个此类较短长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置保持与在指令之前相同或者被归零。在一些实施例中,寄存器架构500包括写掩码/断言寄存器515。例如,在一些实施例中,存在8个写掩码/断言寄存器(有时称为k0到k7),它们的尺寸各自为16位、32位、64位
或128位。写掩码/断言寄存器515可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写掩码/断言寄存器515中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写掩码/断言寄存器515是可缩放的,并由给定向量元素的设定数量个启用位组成(例如,每个64位向量元素有8个启用位)。寄存器架构500包括多个通用寄存器525。这些寄存器可以是16位、32位、64位等,并且可用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。在一些实施例中,寄存器架构500包括标量浮点寄存器545,标量浮点寄存器545用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为mmx寄存器对64位紧缩整数数据执行操作,以及用于为在mmx和xmm寄存器之间执行的一些操作保存操作数。一个或多个标志寄存器540(例如,eflags,rflags等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器540可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器540被称为程序状态和控制寄存器。段寄存器520包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。机器专用寄存器(msr)535控制和报告处理器性能。大多数msr 535处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器560由控制、状态和错误报告msr组成,这些msr用于检测和报告硬件错误。一个或多个指令指针寄存器530存储指令指针值。(多个)控制寄存器555(例如,cr0-cr4)确定处理器(例如,处理器170、180、138、115和/或200)的操作模式和当前执行的任务的特性。调试寄存器550控制并允许监视处理器或核的调试操作。存储器管理寄存器565指定用于受保护模式存储器管理的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器和ldtr寄存器。本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。指令集指令集架构(isa)可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作
码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。示例指令格式本文中所描述的(多条)指令的实施例能以不同格式来具体化。此外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。图6图示指令格式的实施例。如图所示,指令可以包括多个组分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀601,操作码603,寻址信息605(例如,寄存器标识符、存储器寻址信息等),位移值607,和/或立即数609。注意,一些指令利用格式中的一些或全部字段,而其他指令可能仅使用用于操作码603的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以不同的顺序被编码、组合等。(多个)前缀字段601在使用时对指令进行修改。在一些实施例中,一个或多个前缀用于重复串指令(例如,0xf0、0xf2、0xf3等),提供分段超控(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址尺寸(例如,0x67)。某些指令需要强制性前缀(例如,0x66、0xf2、0xf3等)。这些前缀中的某些前缀可能被认为是“传统”前缀。在本文中详述其一个或多个示例的其他前缀指示和/或提供进一步的能力,诸如指定特定寄存器等。其他前缀通常在传统前缀之后。操作码字段603用于至少部分地定义在对指令的解码时要执行的操作。在一些实施例中,在操作码字段603中编码的主操作码的长度为1、2或3字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。寻址字段605用于寻址指令的一个或多个操作数,诸如存储器或一个或多个寄存器中的位置。图7图示寻址字段605的实施例。在该图示中,示出可选的mod r/m字节702和可选的比例、索引、基址(sib)字节704。mod r/m字节702和sib字节704用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。mod r/m字节702包括mod字段742、寄存器字段744、和r/m字段746。mod字段742的内容将存储器访问模式和非存储器访问模式区分开。在一些实施例中,当mod字段742的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。寄存器字段744可以编码目的地寄存器操作数或源寄存器操作数,或者可以编码操作码扩展而不用于编码任何指令操作数。寄存器索引字段744的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段744利用来自前缀(例如,前缀601)的附加位来补充以允许更大的寻址。r/m字段746可用于编码引用存储器地址的指令操作数,或者可用于编码目的地寄存器操作数或源寄存器操作数。注意,在一些实施例中,r/m字段746可与mod字段742组合以指示寻址模式。sib字节704包括比例字段752、索引字段754和基址字段756以用于地址的生成。比例字段752指示比例因数。索引字段754指定要使用的索引寄存器。在一些实施例中,索引字段754利用来自前缀(例如,前缀601)的附加位来补充以允许更大的寻址。基址字段756指定
要使用的基址寄存器。在一些实施例中,基址字段756利用来自前缀(例如,前缀601)的附加位来补充以允许更大的寻址。在实践中,比例字段752的内容允许对索引字段754的内容进行缩放以用于存储器地址生成(例如,用于使用2
比例
*索引+基址的地址生成)。一些寻址形式利用位移值来生成存储器地址。例如,可以根据2
比例
*索引+基址+位移、索引*比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些实施例中,位移字段607提供该值。此外,在一些实施例中,在寻址字段605的mod字段中编码位移因数使用,其指示压缩的位移方案,对于该方案,通过将disp8与基于向量长度、b的值和指令的输入元素尺寸确定的比例因数n相乘来计算位移值。位移值被存储在位移字段607中。在一些实施例中,立即数字段609指定指令的立即数。立即数可以被编码为1字节的值、2字节的值、4字节的值,等等。图8图示第一前缀601(a)的实施例。在一些实施例中,第一前缀601(a)是rex前缀的实施例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。取决于格式,使用第一前缀601(a)的指令可以使用3位字段指定多达三个寄存器:1)使用mod r/m字节702的reg字段744和r/m字段746;2)使用mod r/m字节702与sib字节704,包括使用reg字段744和基址字段756和索引字段754;或者3)使用操作码的寄存器字段。在第一前缀601(a)中,位位置7:4被设置为0100。位位置3(w)可用于确定操作数尺寸,但可能不能单独确定操作数宽度。由此,当w=0时,操作数尺寸由代码段描述符(cs.d)确定,并且当w=1时,操作数尺寸为64位。请注意,添加另一个位允许寻址16(24)个寄存器,而单独的mod r/mreg字段744和mod r/m r/m字段746各自只能寻址8个寄存器。在第一前缀601(a)中,位位置2(r)可以是mod r/m reg字段744的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如,sse寄存器)、或控制或调试寄存器时,可用于修改mod r/m reg字段744。当mod r/m字节702指定其他寄存器或定义扩展操作码时,r被忽略。位位置1(x)x位可以修改sib字节索引字段754。位位置b(b)b可以修改mod r/m r/m字段746或sib字节基址字段756中的基址;或者其可以修改用于访问通用寄存器(例如,通用寄存器525)的操作码寄存器字段。图9(a)-图9(d)图示如何使用第一前缀601(a)的r、x和b字段的实施例。图9(a)图示当sib字节704不用于存储器寻址时,来自第一前缀601(a)的r和b用于扩展mod r/m字节702的reg字段744和r/m字段746。图9(b)图示当sib字节704未被使用时(寄存器-寄存器寻址),来自第一前缀601(a)的r和b用于扩展mod r/m字节702的reg字段744和r/m字段746。图9(c)图示当sib字节704用于存储器寻址时,来自第一前缀601(a)的r、x和b用于扩展mod r/m字节702的reg字段744以及索引字段754和基址字段756。图9(d)图示当寄存器被编码在操作码603中时,来自第一前缀601(a)的b用于扩展mod r/m字节702的reg字段744。图10(a)-图10(b)图示第二前缀601(b)的实施例。在一些实施例中,第二前缀601
(b)是vex前缀的实施例。第二前缀601(b)编码允许指令具有多于两个操作数,并允许simd向量寄存器(例如,向量/simd寄存器510)长于64位(例如,128位和256位)。第二前缀601(b)的使用提供了三操作数(或更多操作数)的语法。例如,先前的两操作数指令执行诸如a=a+b之类的操作,其覆写源操作数。第二前缀601(b)的使用使操作数能执行非破坏性操作,诸如a=b+c。在一些实施例中,第二前缀601(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀601(b)主要用于128位、标量和一些256位指令,而三字节的第二前缀601(b)提供了对第一前缀601(a)和3字节操作码指令的紧凑替换。图10(a)图示两字节形式的第二前缀601(b)的实施例。在一个示例中,格式字段1001(字节0 1003)包含值c5h。在一个示例中,字节1 1005包括位[7]中的“r”值。该值是第一前缀601(a)的相同值的补码。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。使用该前缀的指令可以使用mod r/m r/m字段746来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。使用该前缀的指令可以使用mod r/m reg字段744来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段746和mod r/m reg字段744编码四个操作数中的三个操作数。然后,立即数609的位[7:4]用于编码第三源寄存器操作数。图10(b)图示三字节形式的第二前缀601(b)的实施例。在一个示例中,格式字段1011(字节0 1013)包含值c4h。字节1 1015包括位[7:5]中的“r”、“x”和“b”,它们是第一前缀601(a)的相同值的补码。字节1 1015的位[4:0](示出为mmmmm)包括用于根据需要编码一个或多个隐含前导操作码字节的内容。例如,00001暗示0fh前导操作码,00010暗示0f38h前导操作码,00011暗示0f3ah前导操作码,等等。字节2 1017的位[7]与第一前缀601(a)的w类似地使用,包括帮助确定可提升的操作数尺寸。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。使用该前缀的指令可以使用mod r/m r/m字段746来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。使用该前缀的指令可以使用mod r/m reg字段744来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段746和mod r/m reg字段744编码四个操作数中的三个操作数。然后,立即数609的位[7:4]用于编码第三源寄存器操作数。图11图示第三前缀601(c)的实施例。在一些实施例中,第一前缀601(a)是evex前缀的实施例。第三前缀601(c)是四字节前缀。第三前缀601(c)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,利用写掩码/操作掩码(参见前面的图中对寄存器的讨论,诸如图5)或断言的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀601(b)来编码操作掩码指令,其源/目的地操作数是操作掩码寄存器,并将操作掩码寄存器的内容视为单个值。第三前缀601(c)可以编码专用于指令类的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。第三前缀601(c)的第一字节是格式字段1111,在一个示例中,格式字段1111的值为62h。后续的字节被称为有效载荷字节1115-1119,并且共同形成24位值p[23:0],从而以一个或多个字段的形式提供特定能力(本文中详述)。在一些实施例中,有效载荷字节1119的p[1:0]与低两个mmmmm位相同。在一些实施例中,p[3:2]被保留。位p[4](r’)在与p[7]和mod r/m reg字段744组合时允许对高16个向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16个向量寄存器的访问。p[7:5]由r、x和b组成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数指定符修饰符位,并且当与mod r/m寄存器字段744和mod r/m r/m字段746组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。p[9:8]提供操作码扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。在一些实施例中,p[10]是固定值1。p[14:11]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。p[15]类似于第一前缀601(a)和第二前缀611(b)的w,并且可以用作操作码扩展位或操作数尺寸提升。p[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/断言寄存器515)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线为全部为一的操作掩码或者绕过掩码硬件的硬件来实现)。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在其他的一个实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设置为0。该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个正在被修改的元素的跨度);然而,被修改的元素不一定要是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽
管描述了其中操作掩码字段的内容选择多个操作掩码寄存器中的包含要使用的操作掩码的一个操作掩码寄存器(并且由此操作掩码字段的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段的内容直接地指定要执行的掩码。p[19]可以与p[14:11]组合,以非破坏性源语法编码第二源向量寄存器,其可以使用p[19]访问高16个向量寄存器。p[20]编码多种功能,其在不同类别的指令之间有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示对合并-写掩码的支持(例如,当设置为0时)或对归零和合并-写掩码的支持(例如,当设置为1时)。使用第三前缀601(c)的指令中的对寄存器的编码的示例性实施例在下面的表中详述。表1:64位模式下的32寄存器支持表2:32位模式下的编码寄存器指定符 [2:0]寄存器类型常见用途regmodr/m regk0-k7源vvvvvvvvk0-k7第二源
rmmodr/m r/mk0-7第一源{k1]aaak0
1-k7操作掩码表3:操作掩码寄存器指定符编码可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以以已知的方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。仿真(包括二进制变换、代码变形等)在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。图12图示根据某些实现方式的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图12示出可使用第一isa编译器1204来编译高级语言1202形式的程序,以生成可由具有至少一个第一指令集核的处理器1216原生执行的第一isa二进制代码1206。具有至少一个第一isa指
令集核的处理器1216表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一isa指令集核的处理器基本相同的功能:1)第一isa指令集核的指令集的实质部分,或2)目标为在具有至少一个第一isa指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一isa指令集核的处理器基本相同的结果。第一isa编译器1204表示可用于生成第一isa二进制代码1206(例如,目标代码)的编译器,该第一isa二进制代码1206能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一isa指令集核的处理器1216上被执行。类似地,图12示出可使用替代的指令集编译器1208来编译高级语言1202形式的程序,以生成可由不具有第一isa指令集核的处理器1214原生执行的替代的指令集二进制代码1210。指令转换器1212用于将第一isa二进制代码1206转换成可以由不具有第一isa指令集核的处理器1214原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1210相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1212通过仿真、模拟或任何其他过程来表示允许不具有第一isa指令集处理器或核的处理器或其他电子设备执行第一isa二进制代码1206的软件、固件、硬件或其组合。在不同的实施例中,设备可服务或以其他方式支持不同的客户机。然而,设备的可缩放性可能受该设备维护与其正在服务的不同客户机中的每个客户机有关的信息的能力限制,这进而可能受硅管芯区域或其他可用于存储此类信息的空间限制。例如,如由外围组件互连快捷(pcie)规范定义的单根输入/输出虚拟化(sr-iov)可以实现更大量的虚拟功能(vf)来支持更大量的客户机。设备还可以实现更大量的队列和相关联的特定于客户机的状态来支持更大量的客户机。图13图示可缩放设备100的一个实施例,该可缩放设备100可以以逻辑门、存储元件和/或任何其他类型的电路来实现,缩放设备100的全部或部分可被包括在分立的组件中和/或被集成到处理设备的电路或者计算机或其他信息处理系统的任何其他装置中。例如,图13中的设备1300可与图1中的协处理器138或图2中的专用逻辑208相对应。根据一个实施例的可缩放设备可使用任何数量的工作队列1350,其中,工作队列是被用于接受来自客户机的工作的数据结构。工作队列可以是可接受来自单个客户机的工作的专用工作队列(dwq)或可接受来自多个客户机的工作的共享工作队列(swq)。例如,设备1300被示出为包括dwq 1310和1314以及swq 1312,这些工作队列可接受来自客户机1320、1322、1324、1326和1328的工作。可使用设备(例如,设备1300)内的存储器和/或使用不在设备内的存储器(例如,主机存储器、系统存储器、寄存器或不在设备内的其他存储位置)来实现工作队列。通过使用主机存储器,例如,可利用可由软件写入以通知设备关于工作提交的基址寄存器、头寄存器和尾寄存器来实现工作队列1350。通过使用设备存储器,例如,可利用软件可向其写入以提交工作的地址来实现工作队列1350。工作队列1350可被用于存储包括客户机标识符(id)和特权的工作描述符。客户机id用于标识客户机(例如,利用进程地址空间标识符(pasid)),并且特权指示设备可使用以标识客户机的地址域和特权的特权。工作描述符可由受信任硬件(例如,安全环境中的cpu)和/或受信任软件(在安全环境中的cpu上运行的操作系统(os))填充,以确保它们不会被无
特权的客户机伪装。在各实现方式中,工作描述符是完全自描述的,以使得设备不需要保持任何特定于客户机的状态,并且因此不要求附加的存储器来支持附加的客户机。完全自描述工作描述符包含执行所请求的工作所需要的所有信息。例如,实施例中的工作描述符可包括指向主机存储器中的完成记录的指针,完成状态(包括任何错误状态)可被写入在该完成记录处。完成记录还可包含后续的工作描述符可使用的任何部分的结果,以使得数据可通过操作推进(例如,循环冗余检查计算可使用来自每个步骤的结果作为对下一步骤的输入)。完成记录还可包含可在执行操作时使用的标志位和/或任何其他信息。因此,设备内没有存储器将被用于存储与完成状态、部分结果、标志位等有关的逐客户机状态。在各实现方式中,工作描述符还可被用于避免对设备的可缩放性的其他限制。例如,根据以下方式中的任一种方式可避免将客户机的数量限制为针对设备中的pci msi-x表中的每一个消息收发-信令中断有一个客户机。根据任一方式,任何客户机设立有多个中断,以使得客户机可以选择为不同的描述符指定不同的中断,因此允许客户机执行中断再平衡而不涉及os或其他系统软件。在实施例中,工作描述符可被设计成包括由客户机传递进入的中断消息信息(例如,msi地址和数据)。由于中断消息由客户机提供,因而该中断消息是不受信任的,所以中断重新映射硬件(例如,i/o存储器管理单元)可负责确保客户机不能够请求未被分配给它的中断。例如,pasid连同可重新映射的中断消息一起可被用于定位用于中断消息的中断重新映射表条目(pasid粒度的中断重新映射)。pasid粒度的中断重新映射允许同一消息在与不同的pasid结合使用时具有不同的含义,并且它还允许系统软件控制哪些中断消息可被每个客户机使用(如由客户机的pasid所标识)。随后,设备可以使用来自工作描述符的中断消息信息,以在设备完成操作时生成中断,同时避免将中断消息存储在设备中。在实施例中,工作描述符可被设计成包括中断句柄(而不是完整的msi消息和数据值)。描述符中的中断句柄指定中断消息表中的条目。设备可将中断消息表实现在主机存储器中,其中每个中断表条目包含msi地址和数据。由于中断消息表在主机存储器而不是设备存储器中,因此该中断信息表可大到足以支持任何数量的客户机。工作描述符中的中断句柄可由设备使用以索引到中断表中,从而标识msi地址和数据值,以用于在设备完成操作时生成中断。设备将首先使用pasid来验证中断句柄,以确保客户机被允许使用特定的中断句柄。设备可通过使用pasid粒度的中断消息表或通过在中断设立和生成期间将pasid包括在中断表条目中、将条目的pasid相对于客户机的pasid进行匹配来验证中断句柄。为了避免对每一个描述符都从主机存储器读取中断表条目,设备内的中断消息高速缓存可对频繁使用的中断条目进行高速缓存。除了减少或消除设备上的逐客户机状态以外,某些实施例还提供了高效地处理来自许多客户机的工作。实施例可允许对来自时间敏感的客户机的工作进行优先级排定,同时确保对来自其他客户机的工作的向前进展。实施例可防止由于一些客户机造成的错误或性能问题负面地影响其他客户机。工作提交门户是客户机可借以向设备提交工作请求的手段。在实施例中,swq可具有客户机可向其提交工作的多于一个的工作提交门户,而不是具有被映射到使用该swq的
所有客户机的单个工作提交门户。针对每个swq使用单个工作提交门户会使得客户机保持重试工作提交,因为客户机经历swq已满,这可能使得使用该设备对于其他客户机而言是困难的且不可预测的。相比之下,根据某些实施例的针对每个swq使用多个工作提交可提供对工作请求的优先级排定以及防止一些客户机饥饿。在实施例中,工作提交门户可被实现为客户机可向其写入提交工作请求的存储器映射的i/o(mmio)地址,所以可通过向swq分配多于一个mmio地址并向不同的客户机提供不同的mmio地址来提供多个工作提交门户,这不要求设备中附加的逻辑电路或存储。在各实施例中,用于swq的不同的工作提交门户可具有不同的特性,诸如,针对不同客户机的不同的工作接受优先级。例如,swq可具有被规定为受限门户的第一提交门户和被规定为不受限门户的第二提交门户。swq可具有可配置的阈值,该可配置的阈值可被用于专门为通过不受限门户提交的工作保留一些条目。例如,swq可被配置成用于仅使用多达80%(阈值)的swq空间用于通过受限门户提交的工作,而通过不受限门户提交的工作可使用100%的swq空间。随后,有特权的软件(例如,设备驱动器)可将受限门户映射到用户空间客户机,并将不受限门户保留用于其自身。如果用户空间客户机经历swq已满的状况(例如,当swq是80%已满时,swq向用户空间客户机返回

重试’),则用户空间客户机可以向设备驱动器作出代表用户空间客户机提交工作的请求,而不是用户空间客户机自身连续地重试工作提交。设备驱动器可以使来自用户空间客户机的请求串行化,并且使用不受限门户来提交工作请求。由于为不受限门户保留了20%的swq空间,因此设备驱动器的工作提交将可能成功。实施例还可提供处置其中swq是100%已满(例如,甚至不受限门户也返回

重试’)的情形。在实施例中,设备驱动器能以

重试’来响应客户机,就像

重试’已直接从设备被接收。在实施例中,设备驱动器可阻塞客户机直到工作可以被提交,并且设备驱动器同时可以可能调度另一客户机。在实施例中,设备驱动器可将工作描述符放置在软件定义的工作队列中,直到该工作可以被提交到设备,但是就像工作已经被成功提交到设备那样恢复客户机。根据这后一种方式,客户机可在等待设备赶上的同时继续操作。通过确保对设备的所有描述符在排序方面是彼此独立的,或者通过防止客户机将可以在由设备驱动器在软件中排队的描述符之前处理的任何描述符直接提交到设备,实施例可提供对该后一种方式的使用。此种防止可通过从客户机的存储器映射移除设备提交门户使得客户机无法直接向设备提交工作或者通过锁定swq以使得没有客户机能够提交工作来实现。在该锁定方式中,所有的客户机工作提交都会返回

重试’,并且客户机会不得不请求设备驱动器来提交它们的工作,这回提供公平性,但也可能由于通过设备驱动器的工作提交的瓶颈而具有高开销(该高开销可能是可接受的,因为这仅会在共享工作队列是完全已满时发生)。实施例还可提供工作队列自身的可配置性。例如,可基于客户机要求在运行时将多个工作队列中的任一工作队列或每个工作队列配置为专用的或共享的。工作队列可被指派有不同的优先级并由软件来配置。相对于来自较低优先级工作队列的命令,设备可优先地对来自较高优先级工作队列的命令进行分派,而不使较低优先级工作队列饥饿。一些客户机可具有对多个工作队列的访问权,并且由此具有对其自身的工作进行优先级排定的能力,而其他看客户机可能仅具有对单个工作队列的访问权,由此使其提交的所有工作的优先级固定。
实施例还可提供缓解当设备在执行操作时因为其正在等待来自系统的另一部分的响应(例如,存储器读取的完成、地址的转换、页错误的处置)而被阻塞时发生的问题。该问题被称为队头阻塞(head-of-line blocking),因为设备中正在被执行的操作阻止队中在其之后的其他操作进展。在各实施例中,为了缓解队头阻塞,设备可包括诸如引擎1330、1332、1334和1336之类的多个操作组件(引擎),这些操作组件(引擎)可以并行地处理各个工作描述符。在实施例中,一个或多个工作队列可与一个或多个引擎被编组在一起。设备可支持若干个群组,诸如群组1340和1342。每个工作队列和每个引擎可被软件配置成任何一个群组的部分。来自群组中的一个或多个工作队列的工作描述符可被分派至该群组中的引擎中的任何引擎。因此,如果组中的一个引擎在处理来自工作队列的描述符时正在等待外部响应,则该组中的其他引擎可继续处理来自同一工作队列或其他工作队列的其他工作描述符。在替代实施例中,设备可实现乱序处理引擎,该乱序处理引擎可挂起正在等待外部响应的工作描述符,并且同时处理来自同一工作队列或其他工作队列的其他工作描述符。此外,在各实施例中,设备可具有引擎用来处理来自各客户机的工作描述符的内部资源(例如,设备内部存储器)。如果这些资源是有限的,则设备可对不同客户机对这些资源的使用进行优先级排定(或为其提供qos),以确保来自一个客户机或一些客户机的工作描述符(例如,相对大的或消耗时间的工作描述符)不消耗大部分或所有内部资源,由此影响其他客户机的处理和设备的整体性能。可使用其中信用表示内部资源的基于信用的系统来完成优先级排定。信用可被分配给群组、各个工作队列、或各个引擎,以控制每个群组、工作队列或引擎被允许使用以处理其工作描述符的资源的数量。在实施例中,设备可为每个群组、工作队列或引擎定义两个信用阈值:第一阈值,用于指定为群组、工作队列或引擎保留的信用的最小数量(最少的保证的或保留的信用);以及第二阈值,用于指定允许用于群组、工作队列或引擎的信用的最大数量(最多的允许的信用)。实施例还可提供对页错误的高效处置。如果设备支持虚拟存储器(例如,共享虚拟存储器(svm)或i/o虚拟地址(iova)),则在描述符中被给予设备的地址不保证被映射在物理存储器中。在(例如,通过直接存储器访问(dma))访问主机存储器之前,设备可请求使用例如在pcie规范中所描述的地址转换服务的从i/o存储器管理单元(iommu)进行的地址转换。iommu遍历地址转换表,并且如果转换存在,则将经转换的物理地址返回至设备,以使得该设备可以访问存储器中的数据。然而,如果虚拟地址当前在主存储器中不存在,则结果将为转换错误(i/o页错误)。当页存在但处理器或设备不具有执行所请求类型的访问(例如,设备试图向只读页写入)的权利时,页错误也会发生。当设备遇到页错误时,其自身无法处置该页错误,因为存储器管理系统软件不在该设备上运行。因此,根据图14中所图示的方法(1400),在应用向设备提交命令(1410)之后,设备尝试访问页(1420),并且iommu以页错误进行响应(1430),设备通过iommu向os发送页错误通知(1440),并且阻塞描述符处理直到页错误被解决。在解决页错误(1450)之后,os通过iommu往回向设备响应页是可用的(1460)。随后,设备尝试再次访问该页,并且这次访问是成功的(1470)。设备典型地实现了向os的有限数量的同时待决的i/o页错误通知。因此,当支持大
量的客户机时,设备可能遇到许多页错误并且通常可能正在等待至少一个页错误被解决,这将显著地降低设备的性能。因此,代替于在i/o页错误时进行阻塞,诸如图15中的方法1500之类的一些实现方式可包括(在应用向设备提交命令(1510)之后,设备尝试对页进行访问(1520),并且iommu以页错误来进行响应(1530)),设备直接向客户机通知页错误(1540),并且终止导致页错误的工作描述符的处理。随后,设备可继续处理其他工作描述符而不进行阻塞,同时应用可解决页错误或以其他方式对页错误进行响应(如下文所描述)(1550)。在页错误被解决之后,应用可向设备重新提交命令(1560),并且设备可尝试重新访问页(1570)。根据诸如方法1500之类的实施例,页错误处置可被留给客户机。例如,客户机应用可请求os解决页错误(例如,通过访问出错的页),并且在页错误被解决之后重新提交工作描述符以恢复工作。替代地,客户机可决定使用某种其他方法而不使用设备(诸如,通过使用cpu执行操作)来完成剩余工作。由设备用来向应用通知其已经遇到页错误的机制被称为部分完成。在包括部分完成的实施例中,设备可以以正常方式(例如,通过设置设备寄存器、修改队列的尾指针或环形缓冲器、向共享存储器位置写入、生成中断、或这些方式的任何组合)来向客户机报告操作的完成,但完成记录信息可包括以下附加要素:指示遇到页错误的状态字段、关于在页错误之前完成了多少操作的指示、无法被转换的虚拟地址、关于设备是否旨在读取无法被转换的虚拟地址或向无法被转换的虚拟地址写入的指示、以及软件恢复操作所需要的任何其他信息(参加下文的示例)。如由名称所暗示,部分完成意指设备在遇到页错误之前可能已经执行了所请求操作的部分。通过向客户机报告部分完成,即使在页错误正在被解决并且操作的剩余部分正在被设备执行时,客户机(例如,应用软件)也可开始使用已经完成的结果。在实施例中,如果例如设备在开始操作所需要的第一页上遇到页错误,则部分完成可报告没有操作已被完成。在实施例中,取决于操作的类型、长度和复杂性,设备可从起始处重新开始操作而不是从其遇到页错误所在的点恢复。在此种情况下,即使当页错误先前不在第一页上(假定部分完成的操作尚未覆写其输入中的任何输入)时,设备也可报告没有操作已被完成。在实施例中,部分完成信息包括恢复操作所要求的所有信息。客户机可通过提交在先前操作停止之处开始的新命令来恢复操作。对于贯穿操作而推进数据的操作(例如,crc计算),如果页错误是在操作中途遇到的,则中间结果可被保留用于在操作被恢复时使用。中间结果可连同页错误信息一起被保存在完成记录中。当应用在满足页错误后恢复操作时,其将中间结果连同恢复操作的命令一起传递。用于多租户可缩放加速器的高性能页错误处置的方法和装置加速器频繁地被配置成用于使用共享虚拟存储器(svm),这提供了主机/cpu与加速器迁移之间无处不在的编程模型。同时,在高度多租户的(vm或容器)环境方面已存在快速增长,使得在这些环境中支持svm和i/o页错误变得富有挑战。已使用诸如svm错误时阻塞(svm block-on-fault)和svm错误和流动(svm fault-and-stream)之类的加速器模式来解决这些限制。利用svm错误时阻塞,加速器/引擎阻塞,直到i/o页错误被os/vmm软件解决并且响应被返回以继续剩余的工作。利用svm错误和流
动,加速器/引擎上下文切换到另一迁移上下文,而i/o页错误针对给定的上下文被解决。这些现有模型遭受各种限制。svm错误时阻塞具有缩放和多租户挑战。如果加速器仅具有4个引擎,则i/o页错误无法缩放超出四个并发的客户机,或者在具有多租户的情况下具有与嘈杂邻居有关的挑战(例如,来自一个租户的页错误将使针对其他租户的迁移执行延迟)。svm错误和流动在与保存/恢复状态相关联的增加的设备复杂性和开销方面具有挑战。而且,先前的技术仅支持数据缓冲器上的页错误而不支持控制结构上的页错误。本发明的实施例包括用于支持高度地多租户的和可缩放的环境中针对加速器设备的高性能i/o页错误处置同时保持抑制加速器复杂性和成本的技术。具体而言,本文中所描述的实现方式提供针对具有逐工作队列能力的加速器的页错误处置,直接向应用/迁移客户机通知加速器页错误,并且(当直接通知不可行/不推荐时)提供用于允许加速器驱动器代理向迁移客户机的页错误处置/通知的事件日志机制。另外,一些实施例可以提前完成出错的上下文的执行并立即切换到下一上下文,从而允许软件处置页错误,并在主机处理器(例如,cpu)上或通过再次迁移到加速器完成剩余的工作。另外,描述了针对处置批描述符的扩展。这些实施例解决了与缩放和复杂性有关的挑战,使得利用指派的加速器进行vm实况迁移可行并提升了加速器页错误处置的性能。由此,本文中所描述的实施例使得在虚拟化配置中svm使用可行性更高/更符合实际。参考图16,加速器1600的一个实施例包括工作接受单元1610,该工作接受单元1610包括多个工作队列(wq)1601a-1601d,这些工作队列可基于如上文所描述的工作负荷特性而被布置为群组。多个执行单元或“引擎”1621a-1621d被指派用于处理来自工作队列1601a-1601d中的一个或多个工作队列的工作描述符。一个或多个工作分派器1630将在来自工作队列1601a-1601d的描述符中指定的工作分派到工作引擎1621a-1621d。执行引擎1621a-1621d典型地在多个客户机之间被共享,该多个客户机可以是驱动器、应用、虚拟机(vm)、或任何其他功能软件组件。资源共享降低了为每个客户机建立独立的引擎的成本/负担。工作队列1601a-1601d将工作漏(funnel)到这些引擎1621a-1621d,并且要么被指派给各个客户机(例如,图13中的专用工作队列1310、1314),要么在这些客户机之间被共享(例如,图13中的共享工作队列1312)。参考图17,在共享虚拟存储器编程模型中,作为对工作描述符进行处理的部分,加速器1600将尝试例如通过使用pcie地址转换服务来获取与工作描述符中指定的地址相关联的地址转换。加速器1600可包括用于对虚拟到物理地址转换进行高速缓存的转换后备缓冲器1705。如果特定的转换在tlb 1705中未被发现,则转换请求1750被发送至主机处理器1710的根复合体1720内的iommu 1725。iommu将从其tlb检取转换或从存储器1715检取该转换,并且随后将用该转换向加速器1600传送转换响应1751。iommu 1725和加速器1600必须进行通信,以确保加速器1600的tlb1705与iommu 1725和主机处理器1710的tlb保持一致。由此,响应于诸如转换条目的修改或上下文切换之类的某些事件,iommu 1725将向加速器1600传送无效请求1753,该加速器1600将使相关的tlb条目无效并在完成时往回发送无效确认响应1754。在页不存在于存储器1715中的情况下或者如果许可不足以对页进行访问,则转换请求1750将例如通过使用pcie页请求服务来生成页请求1755。此类页请求被iommu 1725接
收,并被继续传递至系统软件(os/vmm)以处理i/o页错误。系统软件将修复页错误,并经由iommu 1725向加速器设备返回成功的页响应1756。在对页的访问被拒绝的情况下,具有对应差错的页响应被返回至加速器1600。在该操作序列期间,加速器1600(或加速器的引擎)可以停止引擎/执行,直到i/o页错误被处理(与在核上运行的应用如何被停止直到cpu页错误被处置类似),这被称为“svm错误时阻塞模式”。替代地,加速器/引擎可以生成页请求,保存当前工作上下文并转变至下一工作描述符,稍后一旦页错误被处置则重新开始工作,这被称为“svm错误和流动模式”。如所提及,错误时阻塞具有与缩放和嘈杂邻居有关的挑战。例如,在其中与4个不同客户机相关联的4个工作队列被映射到引擎的场景中,来自一个客户机的页错误将引起引擎停止,从而导致针对其他客户机的延迟的执行。这对于在其中页错误处置等待时间更高并且一个vm/租户的行为将影响共享同一引擎的其他vm/租户的服务质量的虚拟化配置变得甚至更成问题。错误和流动模式尝试解决此种停止问题;然而,它要求可以支持工作负荷上下文的保存和恢复的复杂硬件,并且在与上下文切换和保存/恢复操作相关联的成本/等待时间方面具有挑战。而且,针对在其中页错误的到达将导致虚拟机(vm)退出并且还将要求另一vm退出以用于使页响应排队的虚拟化配置,利用这些传统方式引入了附加的等待时间和开销。当利用指派的加速器资源支持vm的实况迁移时,出现附加的挑战。例如,一些vmm首先暂停虚拟处理器,并随后暂停用于vm的虚拟设备,这可能由于循环依赖性而导致死锁。图18图示出可在其上实现本发明的实施例的加速器1800的示例。多个引擎1821a-c处理来自多个工作队列1801a-c的描述符。加速器引擎1821a-c各自包括如本文中所描述的用于响应于错误状况的错误处理逻辑1805a-1805c(但出于简单起见仅针对引擎1821a进行图示)。引擎1821a-1821c可以是加速器的任何类型的处理引擎,包括但不限于数据复制引擎、数据压缩引擎、安全引擎、通信引擎和图形引擎。在一个实现方式中,代替于在i/o页错误时进行阻塞直到该错误被解决,错误处理逻辑1805a直接通知客户机1801并终止工作描述符处理。这允许引擎1821a继续处理其他工作描述符而不进行阻塞;客户机1801随后潜在地经由驱动器、os或其他特权软件执行页错误处置。例如,客户机应用随后可以(例如,通过访问出错的页)请求os解决页错误,并且在页错误被解决之后向工作队列1801a重新提交工作描述符以重新开始工作。替代地,客户机应用1801可决定使用某种其他方法(诸如,通过使用主机cpu 1710执行操作)而不是使用加速器1800来完成剩余工作。在各实施例中,i/o页错误经由诸如事件日志1812之类的指定机制被报告,并且被代理至客户机应用1801。系统软件(诸如,设备驱动器或os)随后可以基于在事件日志条目中接收到的信息来修复页错误,并将完成记录继续传递至(充当代理的)客户机1801。在一些实施例中,完成记录缓冲器1811被用于直接向客户机1801通知页错误和对应的消息。单个加速器设备1800可在不同的时间或出于不同的目的而使用以上技术中的任何技术。以下是加速器svm环境中典型的页错误来源:
1.源/目的地缓冲器:大多数加速器设备具有(多个)源/输入缓冲器,从该(多个)源/输入缓冲器,数据被读取、处理/操作并随后被写入到(多个)目的地/输出缓冲器。2.完成记录/响应队列缓冲器:许多高性能和可缩放设备依赖于完成记录或响应队列槽,存储器写入在该完成记录或响应队列槽处被生成以向软件通知工作完成。3.描述符列表缓冲器/环:许多高性能设备依赖于描述符列表或环来利用单个工作提交/门铃命中传输/执行多个描述符。4.分散-聚集列表缓冲器:一些加速器设备传输分散-聚集列表的地址而不是直接传输源/目的地地址。5.操作特定的缓冲器:一些加速器设备允许软件取决于操作而指定附加的缓冲器地址(例如,crc种子地址、排出读回地址、

(delta)记录地址
……
)。6.配置和控制结构:一些加速器设备还可具有在工作负荷执行期间可能遇到页错误的配置和控制结构(例如,迁移/工作上下文、许可表
……
)。图19a图示出工作描述符1900的示例,该工作描述符1900可被提交至工作队列1801a,并由加速器引擎1821a进行解释以执行工作。工作描述符1900包括用于指定要执行的操作的操作字段1901、多个标志1902(例如,完成记录地址有效、请求完成记录、请求完成中断)、用于将工作描述符与生成工作的进程/应用相关联的进程地址空间标识符(pasid)字段1903、用于指示用于完成记录的(例如,用于存储与所执行的工作有关的元数据)存储器位置的完成记录地址字段1904、用于指示用于源数据的存储器位置的源地址字段1905、用于指示用于结果数据的存储器位置的目的地地址字段1906、完成中断句柄1907、传输尺寸字段1908,并且(任选地)包括用于指定要执行的操作的附加细节的一个或多个操作特定字段1909。图19b中图示的批描述符1950的示例包括与工作描述符1900相同的字段中的许多字段,例外在于标识描述符列表(描述符批)的存储器位置的描述符列表地址1951和用于指示列表中的描述符数量的描述符计数字段1952。图20图示完成记录2000的示例。在一个实施例中,执行由描述符标识的工作的加速器引擎1821a生成完成记录,该完成记录被存储在完成记录缓冲器1811内。提交工作的客户机1801随后可访问来自缓冲器的完成记录。如图20中所图示,在一些实现方式中,完成记录2000是在所请求的工作完成或遇到差错时被写入到缓冲器1811的32字节结构。在某些实施例中,引擎1821a在完成记录2000中写入充足的信息,以允许引擎1821a在操作由于页错误而仅部分地被完成的情况下继续该操作。完成状态字段2004指示操作是否已经完成。如果操作成功完成,则取决于操作的类型,完成记录2000可(例如,在操作特定字段2006或结果字段2003中)包含操作的结果(如果存在任何结果)。结果还可被存储在存储器中的不同位置中,并由完成记录2000中的地址来标识。如果操作没有成功完成,则完成记录在错误信息字段2003内包含错误或差错信息。在一个实现方式中,如果该完成记录2000针对作为批的部分被提交的描述符,则索引字段(未示出)包含生成该完成记录的描述符的批中的索引。对于批描述符,该字段可以是0xff。对于并非批的部分的任何其他描述符,该字段可被保留。在一个实现方式中,如果操作由于页错误而部分地被完成,则完成字节字段2001
指示在错误发生之前被处理的源字节的数量。所有由该计数表示的源字节完全被处理,并且结果根据操作类型按需要被写入到目的地地址。对于一些操作类型,该字段也可在操作出于除错误之外的某个原因而在完成前停止时被使用。如果操作完全完成,则该字段可被设置为0。对于其中输出尺寸不能容易地从该值确定的操作类型,完成记录2000还包含被写入到目的地地址的字节的数量。如果操作由于页错误而部分地被完成,则错误地址字段2005包含导致该错误的地址。如所提及,本发明的实施例使用完成记录缓冲器1811直接向客户机1801通知页错误并提供对应的信息。例如,错误地址字段2005指示与页错误相关联的地址,错误信息字段2002捕捉与页错误相关联的信息(诸如,缓冲器的类型以及错误地址字段2005是否有效),并且状态字段2004传输相关联的状态信息。然而,当页错误在完成记录地址本身之上观察到时,使用完成记录缓冲器1811向客户机1801传达该信息可能不是可行的。在此种情形下,可以使用基于存储器的事件日志1812来以日志记录此类事件。此种类型的事件日志1812可以逐加速器设备1800地、逐引擎1821a-1821c地、和/或逐工作队列1801a-1801c地实现。图21图示出事件日志条目2100的示例,该事件日志条目2100具有用于提供与相关联的描述符和/或错误状况有关的信息的多个字段。关于描述符的完成记录2000的差错或在不具有有效的完成记录地址的描述符的处理期间的差错通常在寄存器(软件差错寄存器)中报告。在软件已处理寄存器结果之前出现多个此类差错导致溢出状况。相比之下,本发明的实施例支持在存储器中的事件日志1812中对此类事件的日志记录。如图22中所图示,事件日志配置寄存器(evlcfg)2201被配置成用于存储事件日志存储器区域的地址和尺寸。当在加速器控制寄存器(在图22中图示为通用配置寄存器(gencfg)2202所图示)中事件日志启用位被设置为1时,事件日志1812被启用。相比于向完成记录缓冲器1811的写入,向事件日志的写入可作为经转换的或未经转换的存储器访问被发布。在一些实现方式中,软件固定与事件日志相对应的存储器页,并且事件日志写入在通信量类别(tc)值为0的情况下被执行。在至少一些实施例中,如果evlcfg 2201中的pasid启用字段2201c为1,则向事件日志1812的写入作为使用pasid和对应的特权等级(在一些实现方式中也被存储在evlcfg 2201中)的写入被发布。如果事件日志1812被启用,则加速器设备1800初始化事件日志状态寄存器(evlstatus)2203中的头部字段2203a和尾部字段2203b(当设备1800被启用时)。一旦被启用,硬件就将每个事件写入到由事件日志尾部字段2203b指定的偏移,并递增尾部值2203b。当尾部到达日志的末尾时,它包裹至值0。要由软件处理的下一事件由事件日志头部字段2203a指定。在处理事件日志的头部处的一个或多个事件之后,软件更新头部字段2203a。当尾部值+1mod日志-尺寸=头部值时,日志为满。在将事件写入到事件日志1812时,如果加速器控制寄存器(genctrl)2204中的事件日志中断启用字段2204a为1并且evlstatus中的中断待决位2203c为0,则硬件将中断待决位2203c设置为1,将中断起因寄存器(intcause)2205中的事件日志字段2205a设置为1,并生成中断(例如,如果加速器1800包括msi-x,则使用msi-x条目0)。不针对附加的日志条目生成进一步的中断,直到软件清除中断待决位2203c。如果当硬件尝试追加事件时事件日志1812为满,则硬件阻塞,直到软件在处理来自日志的头部的一个或多个事件之后更新事
件日志头部字段2203a。由此,软件必须确保存储器中的事件日志区域尺寸充足,并且确保事件日志条目以及时的方式被处理。在各实施例中,如果页请求服务(prs)被禁用时硬件在完成记录地址上遇到页错误,则其作为差错而被报告。如果事件日志1812被启用,则硬件用指示页错误的起因的适当差错码向事件日志写入条目;否则,其经由软件差错寄存器(swerror)2206中的字段2206a被报告。在前一种情况下,硬件还将针对该描述符的完成记录2000写入到事件日志条目。被写入到事件日志1812的完成记录2000具有与上文所描述的相同的格式。期望负责处理事件日志1812的软件执行必要的动作,以在合适的情况下将完成记录2000传播至提交出错的描述符的软件实体(例如,客户机1801)。如果被请求,则软件还可以生成完成中断。参考图23,在针对批描述符需要完成记录或完成中断的情况下,如果针对批中的任何描述符的完成记录由于完成地址上的页错误而被写入到事件日志1812,则针对对应的批描述符1950的批完成记录2300也被写入到事件日志1812。在此种情况下,针对批描述符1950的事件日志条目中的差错码指示批中的一个或多个描述符具有含必须由软件处理的完成记录2000的相关联的事件日志条目。在各实施例中,加速器1800生成批标识符值以允许软件使针对批内的描述符的事件日志条目1812与针对对应的批描述符1950的事件日志条目1812相关,并且在事件日志1812条目的批标识符字段中被报告。一旦针对批描述符的事件日志条目已被写入,批标识符就可被硬件重新使用。其中批标志中的第一差错为1的事件日志条目标识用于该批的第一条目。这允许软件用同一批标识符来标识任何过时的事件日志条目。如果软件遇到其中该标志为1的条目,则先前针对同一批标识符被记录的任何未决页错误可以被丢弃。在图24中图示示例排出描述符2400和排出完成记录2401。排出描述符等待该排出描述符2400被提交到的工作队列1801a中的某些在先描述符的完成。如果排出描述符2400被提交至专用工作队列,则其等待该工作队列中所有描述符的完成。如果排出描述符被提交至共享工作队列1801a,则其等待用与该排出描述符相同的pasid提交的工作队列中的描述符。为了等待具有特定pasid的所有描述符,软件将单独的排出描述符提交至与该pasid一起使用的每一个工作队列。在一些实施例中,如果事件日志1812被启用,则排出描述符2400的完成总是被写入该事件日志1812。如果事件日志1812未被启用,则排出描述符完成记录2401被写入到完成记录地址。如图25中所图示,本发明的至少一些实施例实现逐wq的页请求服务(prs)2501-2502,其可逐wq地动态地被启用和禁用。在图25中,例如,prs 2501和prs 2502已经分别针对工作队列1801b和1801c动态地被启用并且针对工作队列1801c被禁用,该工作队列1801c使用本文中所描述的高性能技术而不是prs(例如,终止工作并向事件日志1812和/或完成记录缓冲器1811提交条目)。在一个实施例中,在控制寄存器中提供能力位来指示逐wq的prs是否可以在给定的可缩放加速器1800上被禁用。能力位可在上文所描述的寄存器中的任何寄存器中提供。当被支持时,逐wq的控制位指示prs针对特定wq被启用还是禁用——甚至在其在加速器设备1800级别被启用时也是如此,从而提供对页错误处置的细粒度控制。在一些实现方式中,例如,当逐wq的控制位针对特定的工作队列被置位(即,被设置为1)时,本文中所描述的可
缩放页错误处置技术中的一种或多种被使用。当被清除(即,二进制0)时,传统页错误处置技术被使用。图26图示根据本发明的实施例的方法。在2601处,在加速器的工作队列中接收工作描述符,并且在2602处,针对与特定工作队列中的描述符相关联的工作检测页错误。取决于在2603处确定的、针对特定工作队列配置的页错误模式,以不同的方式来处置页错误。例如,当页错误发生并且prs 2501-2502针对相关联的工作队列1801a-1801b被启用时(图26中的模式2),在2611处,与描述符相关联的工作被暂停,并且页错误作为prs请求被报告给iommu 1725以供os页错误处置程序进行服务。iommu 1725通过中断来通知os。在2612处,os验证地址,并且在成功校验时在页表中创建映射并通过iommu 1725返回prs响应。遇到错误的描述符被阻塞,直到prs响应被接收。具有错误的描述符之后的其他操作也可被阻塞。如果os无法创建映射,则其返回差错响应并且描述符用差错来完成。差错报告与在prs被禁用时的页错误报告相同,这在下一节进行描述。如上文所描述,对于其中prs被禁用的工作队列1801a(图26中的模式1),在2604处,与描述符相关联的工作被终止。当在2605处确定在完成记录地址上发生页错误时,在2606处,差错在事件日志(如果被启用)中被报告(或者在一些实施例中,在swerror寄存器2206中被报告)。在2607处,客户机解决页错误,并基于事件日志来确定接下来的步骤。在事件日志1812中报告的完成记录错误是可恢复的。描述符被完成,并且事件日志条目包含完成记录地址和完成记录的内容。在处置页错误之后,系统软件可以将完成记录复制到完成记录地址。在swerror中报告的完成记录错误可能是不可恢复的:由于仅单个差错可以进行日志记录,因此错误可能丢失;并且由于部分完成信息未被记录,描述未被完成并且必须被重启。当在2605处确定针对描述符中的地址而不是完成记录地址发生页错误时,在2608处,引擎1821a停止操作,并且将部分完成状态连同出错的地址和进展信息一起写入到完成记录缓冲器1811中的完成记录中(如上文所描述)。当客户机软件接收到指示部分完成的完成记录时,在2609处,其解决页错误,并基于完成记录来确定接下来的步骤。例如,客户机具有在主机处理器上(例如,通过触及页)修复错误并提交具有剩余工作的新的描述符的选项。替代地,软件可以在主机处理器上完成剩余工作。如上文所描述的在prs被禁用并且事件日志被启用的情况下的操作减少了在存在页错误时对其他应用的影响,由此改善了性能。在一些实现方式中,如果批描述符1950内的描述符由于完成地址而得到错误,则条目被推送至事件日志1812。在事件日志条目可以被处理(例如,被设备驱动器软件处理)之前,客户机1801可以潜在地观察对整个批描述符完成记录2200的更新——由此导致相对于完成记录更新不一致的状态或排序/时序问题。类似的问题适用于排出描述符2400。以下实施例解决该问题。在针对批描述符1950需要完成记录或完成中断的情况下,如果针对批中的任何描述符的完成记录被写入到事件日志1812(例如,由于完成地址上的页错误),则针对对应的批描述符1950的完成也被写入到事件日志。针对批内的描述符的或者针对具有与页错误有关的差错码的批描述符的每个事件日志条目包含批标识符,该批标识符用于(例如,由内核模式驱动器(kmd)用于)将事件日志中的完成记录与同一批相关联。
如果针对批描述符在完成记录2200地址上存储页错误并且不存在具有针对批中的任何描述符被写入入的差错码abc的事件日志条目,则针对批描述符的事件日志条目以差错abc写入。如果针对批描述符在完成记录2200地址上存储页错误并且存在具有针对批中的任何描述符被写入的差错码abc的事件日志条目,则针对批描述符的事件日志条目以差错xyz写入。使用不同的差错码abc/xyz允许软件在这两种情形之间进行区分。在一些实施例中,当prs 2501-2502被禁用时,页错误通过停止操作并在完成记录中报告部分完成状态来处置。另外,在事件日志1812被启用时,完成记录地址上的页错误通过该事件日志1812来报告。在至少一个实现方式中,内核模式驱动器(kmd)负责配置和启用事件日志1812。在这些实现方式中,kmd必须确保事件日志1812足够大并且必须以及时的方式来处理条目,以避免来自设备的后续事件日志写入由于事件日志完全被消耗而被阻塞。在客户机1801直接通过完成记录被通知页错误的情况下,客户机可以通过对页进行访问来修复(有效的)页错误。一旦页错误被纠正,客户机1801就具有在cpu上完成剩余工作或通过再次迁移至加速器1800(例如,将新的工作描述符存储在工作队列1801a中)而重启/继续工作。在各实施例中,当针对完成记录上的页错误处理事件日志1812中的条目时,kmd或其他特权软件组件执行以下操作:1.如果批标志中的第一差错为1,则丢弃与批标识符相关联的任何先前所记录的差错。这可以在批完成由于中止命令或内部硬件差错而丢失时发生。在通常情况下,将不记录差错并且无需采取动作。2.尝试修复与事件日志1812条目中报告的错误地址和pasid相对应的页错误,并且如果成功,则将完成记录写入到错误地址,并且在事件日志条目指示完成中断应当被生成的情况下生成完成中断。3.如果在写入完成记录时存在差错并且完成记录针对批中的描述符,则kmd(或其他软件组件)将该差错与事件日志条目的批描述符相关联并对其进行跟踪,直到针对对应批描述符的事件日志条目被观察到。kmd不需要跟踪被成功写入的完成记录。当处理针对其中差错码指示批中的一个或多个描述符具有事件日志条目并且该事件日志条目指示针对批描述符的完成记录应当被写入的批描述符的事件日志条目时,考虑到误差已经用匹配的批描述符来记录,kmd或其他特权软件组件在将批完成记录写入到存储器之前进行以下操作:1.如果事件日志条目内的完成记录的状态指示所有的描述符均成功,则kmd(或其他组件)将其改变为指示一个或多个描述符失败。2.kmd或其他组件应当随后在为具有同一批描述符的下一批进行准备时清除所记录的差错。如果针对该批没有差错被报告(所有完成记录均被成功写入),则kmd或其他组件按原样写入批完成记录。如果事件日志条目指示中断应当被生成,则软件随后应当生成完成中断。当应用、用户模式驱动器(umd)或其他客户机1801接收到指示部分完成的完成记录时,其可以选择修复页错误并向加速器设备1800重新提交描述符以完成操作的剩余部分。在大多数情况下,原始描述符可能需要被更新,以基于已经完成的工作量来调整传输尺
寸字段。对于某些操作,可能要求对原始描述符的附加更新。当重新提交早先被终止的批描述符时,软件可以基于部分完成的批的状态来设置描述符中的批差错标志,以确保针对该批的最终完成记录的状态反映跨该批中的所有描述符的正确状态。对于虚拟化配置,主机软件可以向宾客机披露虚拟事件日志,并且可(例如,经由宾客机kmd)将错误信息注入到宾客机以如上文所描述地来管理页错误。本文中所描述的本发明的实施例包括以下各项中的一项或多项:
·
逐wq页错误处置能力的选择,包括在基于prs的页错误处置与如上文所描述的高性能页错误处置之间的选择。
·
直接向应用/迁移客户机通知加速器页错误(当可能时)和使用事件日志以允许加速器驱动器将页错误处置/通知代理至迁移客户机(当直接通知不可行/不推荐时)的能力。
·
利用向下一上下文的立即切换的对出错的上下文的提早完成。
·
在软件中处置页错误并在主机处理器上或通过再次迁移至加速器设备来完成剩余工作。
·
用于处置批描述符的技术。本发明的实施例可包括上文已经描述的各步骤。这些步骤可以被具体化为机器可执行指令,这些机器可执行指令可以用于使通用或专用处理器执行这些步骤。替代地,这些步骤可由包含用于执行这些步骤的硬接线逻辑的特定硬件组件来执行,或者由经编程的计算机组件和定制硬件组件的任何组合来执行。示例以下是本发明的不同实施例的示例实现方式。示例1。一种装置,该装置包括:一个或多个加速器引擎,用于处理由客户机提交至多个工作队列的工作描述符;错误处理硬件逻辑,与一个或多个加速器引擎相关联,该错误处理硬件逻辑用于针对多个工作队列中的每个工作队列实现指定的页错误处置模式,该页错误处置模式包括第一页错误处置模式和第二页错误处置模式。示例2。如示例1所述的装置,其中,在第一页错误处置模式下,错误处理硬件逻辑用于通知客户机并终止与页错误相关联的工作描述符的处理。示例3。如示例2所述的装置,其中,错误处理硬件逻辑用于响应于页错误而向完成记录缓冲器和/或事件日志提交信息,该信息与页错误相关联并且可由客户机和/或系统软件使用以解决页错误。示例4。如示例3所述的装置,其中,信息用于允许客户机在与工作描述符相关联的工作由于页错误而仅部分地被完成的情况下继续处理或重新提交该工作。示例5。如示例4所述的装置,其中,信息包括错误地址和完成字节字段,该完成字节字段用于指示在页错误发生之前被处理的源字节的数量。示例6。如示例3所述的装置,其中,如果页错误在与完成记录缓冲器相关联的地址上发生,则信息被提交至事件日志而并非完成记录缓冲器。示例7。如示例6所述的装置,其中,事件日志用于与一个或多个加速器引擎中的特定加速器引擎或多个工作队列中的特定工作队列相关联。示例8。如示例1所述的装置,其中,在第二页错误处置模式下,工作描述符的处理
用于被暂停,并且错误处理硬件逻辑用于生成对存储器管理硬件逻辑的页请求,工作描述符的处理用于仅在从存储器管理硬件逻辑接收到响应之后才重新开始。示例9。一种方法,该方法包括:由加速器引擎处理工作描述符,该工作描述符由客户机提交至多个工作队列;响应于检测到与特定工作队列中的工作描述符相关联的页错误而进行以下操作:确定与该工作队列相关联的页错误处置模式,以及如果页错误处置模式包括第一页错误处置模式,则通知客户机并终止与页错误相关联的工作描述符的处理。示例10。如示例9所述的方法,进一步包括:如果页错误处置模式包括第二页错误处置模式,则执行以下操作:暂停与工作描述符相关联的工作,并向存储器管理硬件逻辑传送页错误请求;以及在从存储器管理硬件逻辑接收到响应之后,重新开始与该工作描述符相关联的工作。示例11。如示例9所述的方法,进一步包括:响应于页错误而向完成记录缓冲器和/或事件日志提交信息,该信息与页错误相关联。示例12。如示例11所述的方法,其中,基于信息,客户机用于在与工作描述符相关联的工作由于页错误而仅部分地被完成的情况下继续处理或重新提交该工作。示例13。如示例12所述的方法,其中,信息包括错误地址和完成字节字段,该完成字节字段用于指示在页错误发生之前被处理的源字节的数量。示例14。如示例11所述的方法,其中,如果页错误在与完成记录缓冲器相关联的地址上发生,则信息被提交至事件日志而并非完成记录缓冲器。示例15。如示例11所述的方法,其中,如果针对第一工作描述符的页错误信息被提交至事件日志,则针对第二工作描述符的页错误信息也被提交至事件日志而并非完成记录缓冲器。示例16。如示例15所述的方法,其中,至少一个工作描述符包括批描述符或排出描述符,该批描述符包括标识成批的描述符的存储器位置的描述符列表地址,该排出描述符用于使加速器引擎在处理该排出描述符之前等待工作队列中指定的在先描述符的完成。示例17。一种机器可读介质,具有存储于其上的程序代码,该程序代码当由机器执行时使机器执行以下操作:由加速器引擎处理工作描述符,该工作描述符由客户机提交至多个工作队列;响应于检测到与特定工作队列中的工作描述符相关联的页错误而进行以下操作:确定与工作队列相关联的页错误处置模式,以及如果页错误处置模式包括第一页错误处置模式,则通知客户机并终止与页错误相关联的工作描述符的处理。示例18。如示例17所述的机器可读介质,进一步包括:如果页错误处置模式包括第二页错误处置模式,则执行以下操作:暂停与工作描述符相关联的工作,并向存储器管理硬件逻辑传送页错误请求;以及在从存储器管理硬件逻辑接收到响应之后,重新开始与该工作描述符相关联的工作。示例19。如示例17所述的机器可读介质,进一步包括:响应于页错误而向完成记录缓冲器和/或事件日志提交信息,该信息与页错误相关联。示例20。如示例19所述的机器可读介质,其中,基于信息,客户机用于在与工作描述符相关联的工作由于页错误而仅部分地被完成的情况下继续处理或重新提交该工作。示例21。如示例20所述的机器可读介质,其中,信息包括错误地址和完成字节字段,该完成字节字段用于指示在页错误发生之前被处理的源字节的数量。
示例22。如示例19所述的机器可读介质,其中,如果页错误在与完成记录缓冲器相关联的地址上发生,则信息被提交至事件日志而并非完成记录缓冲器。示例23。如示例19所述的机器可读介质,其中,如果针对第一工作描述符的页错误信息被提交至事件日志,则针对第二工作描述符的页错误信息也被提交至事件日志而并非完成记录缓冲器。示例24。如示例23所述的机器可读介质,其中,至少一个工作描述符包括批描述符或排出描述符,该批描述符包括标识成批的描述符的存储器位置的描述符列表地址,该排出描述符用于使加速器引擎在处理该排出描述符之前等待工作队列中指定的在先描述符的完成。如本文中所描述,指令可以指诸如专用集成电路(asic)的硬件的特定配置,该专用集成电路被配置用于执行某些操作或者具有预定功能或存储在被具体化为非暂态计算机可读介质的存储器中的软件指令。由此,附图中示出的技术可以使用存储在一个或多个电子设备(例如,终端站、网络元件等)上并在该一个或多个电子设备上执行的代码和数据来实现。此类电子设备使用计算机机器可读介质(在内部和/或通过网络与其他电子设备)存储和传达代码和数据,计算机机器可读介质诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存设备;相变存储器)以及暂态计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如,载波、红外信号、数字信号等)。此外,此类电子设备典型地包括耦合到一个或多个其他组件(诸如,一个或多个存储设备(非暂态机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)、以及网络连接)的一个或多个处理器的集合。处理器的集合与其他组件的耦合典型地通过一个或多个总线和桥接器(也被称为总线控制器)。承载网络通信量的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备典型地存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数据。当然,可以使用软件、固件、和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。贯穿此具体实施方式,出于解释的目的,阐述了众多特定细节以便提供对本发明的透彻理解。然而,对于本领域的技术人员而言将显而易见的是,可以在没有这些特定细节中的一些细节的情况下实现本发明。在某些实例中,未详细地描述公知结构和功能以避免使本发明的主题模糊。因此,本发明的范围和精神应当根据所附权利要求来判定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1