HK1180795B - 促進計算環境的系統存儲器的管理的方法 - Google Patents
促進計算環境的系統存儲器的管理的方法 Download PDFInfo
- Publication number
- HK1180795B HK1180795B HK13108052.3A HK13108052A HK1180795B HK 1180795 B HK1180795 B HK 1180795B HK 13108052 A HK13108052 A HK 13108052A HK 1180795 B HK1180795 B HK 1180795B
- Authority
- HK
- Hong Kong
- Prior art keywords
- adapter
- address
- address space
- format
- dma
- Prior art date
Links
Description
技术领域
本发明一般地涉及管理计算环境的系统存储器,更具体地,涉及促进在系统存储器中地址空间的提供以及如果需要在访问系统存储器中可用的地址转换表的提供。
背景技术
系统存储器可通过读取和写入请求来访问。这些请求可来自于计算环境的各个组件,包括中央处理单元以及适配器。每个请求包括用于访问系统存储器的地址。然而,该地址典型地与系统存储器中的物理位置不具有一一对应的关系。因此,执行地址转换。
地址转换用于将以不能直接在访问系统存储器时使用的一种形式提供的地址转换为可在访问系统存储器中的物理位置时直接使用的另一种形式。例如,包括在由中央处理单元提供的请求中的虚拟地址被转换为系统存储器中的真实或绝对地址。作为又一个例子,在来自适配器的请求中提供的外围组件互连(PCI)地址可被转换为系统存储器中的绝对地址。
为了执行地址转换,使用一个或多个地址转换表。所述表按分级配置,并且使用在请求中提供的地址的位来定位最高级表中的项。然后,这个项指向要访问的另一转换表或页本身。
在2008年5月15日发布的美国申请No.2008/0114906A1,Hummel等“EfficientlyControllingSpecialMemoryMappedSystemAccesses”在一个实施例中描述了一种输入/输出存储器管理单元(IOMMU),包括:控制寄存器,配置为存储转换表集的基地址;和控制逻辑,耦合至控制寄存器。控制逻辑配置为响应于输入/输出(I/O)设备发起的请求,其具有地址空间的地址范围内与外围互连对应的地址。除了存储器操作之外的一个或多个操作关联至地址范围,并且控制逻辑配置为如果转换表指定从地址到第二地址的转换,将地址转换成地址范围之外的第二地址,由此响应于请求执行存储器操作,代替与地址范围相关联的一个或多个操作。
在2007年7月19日发布的美国申请No.2007/0168636A1,Hummel等“ChainedHybridIOMMU”在一个实施例中描述了一种输入/输出(I/O)节点,包括:I/O存储器管理单元(IOMMU),配置为转换存储器请求。I/O节点配置为耦合至互连并作为隧道在互连上操作,以及其中IOMMU是配置为转换在上游方向通过隧道的存储器请求。在另一实施例中,一种系统包括:另一I/O节点,配置为将另一互连桥接至该互连,其中I/O节点是用于其他I/O节点的隧道。
在2006年12月21日发布的美国申请No.2006/0288130A1,Madukkarumukumana等“AddressWindowSupportforDirectMemoryAccessTranslation”公开了一种装置。该装置包括:重映射电路,促进一个或多个I/O设备对于存储器设备的访问以用于直接存储器访问(DMA)事务。重映射电路包括一种转换机制,经由基于地址窗口的转换执行对于I/ODMA事务的存储器地址转换。
发明内容
通过提供如权利要求1所述的方法以及用于促进计算环境的系统存储器的管理的相应系统和计算机程序产品,克服了现有技术的缺陷并提供了优势。
附图说明
作为本说明书的结尾处的权利要求的例子,本发明的一个或多个方面被特别指出和明确要求。根据下列详细描述并结合附图,本发明的上述和其他目标、特征和优势将变得明显,在附图中:
图1示出了包含并使用本发明的一个或多个方面的计算环境的一个实施例;
图2A示出了根据本发明的一方面的图1的系统存储器和输入/输出(I/O)集线器(hub)的进一步细节的一个实施例;
图2B示出了根据本发明的一方面的向适配器功能分配多个地址空间的一个例子;
图3A示出了根据本发明的一方面的注册用于适配器的DMA(直接存储器访问)地址空间的逻辑的概况的一个实施例;
图3B示出了根据本发明的一方面的注册用于适配器的DMA地址空间的各种细节的一个实施例;
图4示出了根据本发明的一方面的处理DMA操作的逻辑的一个实施例;
图5A示出了当整个地址被用于索引到地址转换表中以转换地址并访问页时使用的转换等级的一个例子;
图5B示出了根据本发明的一方面,当索引到地址转换表中时忽略一部分地址时使用的转换等级的一个例子;
图5C示出了根据本发明的一个或多个方面可用的各种CPUDAT兼容格式的例子;
图5D示出了根据本发明的一个或多个方面可用的各种I/O扩展地址转换格式的例子;
图6A示出了根据本发明的一方面而使用的修改PCI功能控制指令的一个实施例;
图6B示出了根据本发明的一方面的由图6A的修改PCI功能控制指令使用的字段的一个实施例;
图6C示出了根据本发明的一方面的由图6A的修改PCI功能控制指令使用的另一个字段的一个实施例;
图6D示出了根据本发明的一方面而使用的功能信息块(FIB)的内容的一个实施例;
图7示出了根据本发明的一方面的修改PCI功能控制的逻辑的概况的一个实施例;
图8示出了根据本发明的一方面,与由修改PCI功能控制指令指定的注册I/O地址转换参数操作有关的逻辑的一个实施例;
图9示出了根据本发明的一方面,与由修改PCI功能控制指令指定的取消注册I/O地址转换参数操作有关的逻辑的一个实施例;
图10A示出了根据本发明的一方面而使用的呼叫逻辑处理器指令的一个实施例;
图10B示出了根据本发明的一方面的由图10A的呼叫逻辑处理器指令使用的请求块的一个实施例;
图10C示出了根据本发明的一方面的由图10A的呼叫逻辑处理器指令提供的响应块的一个实施例;
图11示出了根据本发明的一方面的使能PCI功能的逻辑的一个实施例;
图12A示出了根据本发明的一方面的由图10A的呼叫逻辑处理器指令用于查询群组操作的请求块的一个实施例;
图12B示出了根据本发明的一方面的由图12A的查询群组操作的响应块的一个实施例;
图13示出了包含本发明的一个或多个方面的计算机程序产品的一个实施例;
图14示出了包含并使用本发明的一个或多个方面的主计算机系统的一个实施例;
图15示出了包含并使用本发明的一个或多个方面的计算机系统的进一步的例子;
图16示出了包括包含并使用本发明的一个或多个方面的计算机网络的计算机系统的另一个例子;
图17示出了包含并使用本发明的一个或多个方面的计算机系统的各种元件的一个实施例;
图18A示出了包含并使用本发明的一个或多个方面的图17的计算机系统的执行单元的一个实施例;
图18B示出了包含并使用本发明的一个或多个方面的图17的计算机系统的分支单元的一个实施例;
图18C示出了包含并使用本发明的一个或多个方面的图17的计算机系统的加载/存储单元的一个实施例;以及
图19示出了包含并使用本发明的一个或多个方面的仿真的主计算机系统的一个实施例。
具体实施方式
根据本发明的一方面,适配器与多个地址空间相关联。这样使得多个地址转换格式能够由适配器用于访问系统存储器中,并且如果需要或期望,使得多个地址转换表集能够用于转换访问系统存储器中可用的地址中。具体地,一个实例中,适配器包括一个或多个适配器功能,并且向适配器功能的至少一个分配多个地址空间。
此外,如这里所使用的,术语适配器包括任意类型的适配器(例如存储适配器、网络适配器、处理适配器、PCI适配器、网络适配器、加密适配器、其他类型的输入/输出适配器等)。在一个实施例中,一适配器包括一个适配器功能。但是,在其他实施例中,一适配器可包括多个适配器功能。本发明的一个或多个方面可以应用,不管一适配器包含一个适配器功能或多个适配器功能。此外,在这里展示的例子中,适配器是与适配器功能(例如PCI功能)可互换地使用,除非另外说明。
参考图1描述包含并使用本发明的一个或多个方面的计算环境的一个实施例。在一个例子中,计算环境100是由国际商业机器公司提供的服务器。服务器是基于由国际商业机器公司提供的关于的细节在IBM出版物中描述,该出版物的标题是“z/ArchitecturePrinciplesofOperation”(z/Architecture操作原理),IBM出版号SA22-7832-07,2009年2月。和是位于纽约州阿蒙克的国际商业机器公司的注册商标。在此使用的其他名字可以是国际商业机器公司或其他公司的注册商标、商标或产品名称。
在一个例子中,计算环境100包括经由存储控制器106耦合到系统存储器104(也称为主存储器)的一个或多个中央处理单元(CPU)102。为了访问系统存储器104,中央处理单元102发出包括被用于访问系统存储器的地址的读或写请求。包括在请求中的地址典型地不能直接用于访问系统存储器,且因此,其被转换为可直接用于访问系统存储器的地址。所述地址经由转换机制(XLATE)108而被转换。例如,使用例如动态地址转换(DAT),将地址从虚拟地址转换为真实或绝对的地址。
包括转换的地址的请求被存储控制器106接收。在一个例子中,存储控制器106包含硬件且被用于仲裁对系统存储器的访问并维持存储器的一致性。该仲裁针对从CPU102接收的请求以及从一个或多个适配器110接收的请求而执行。与中央处理单元类似,适配器向系统存储器104发出请求以获得对系统存储器的访问。
在一个例子中,适配器110是外围组件互连(PCI)或PCIExpress(PCIe)适配器,其包括一个或多个PCI功能。PCI功能发出要求访问系统存储器的请求。请求经由一个或多个交换器(例如,PCIe交换器)114被路由到输入/输出集线器112(例如,PCI集线器)。在一个例子中,输入/输出集线器包括含有一个或多个状态机的硬件。
输入/输出集线器包括,例如,从交换器接收请求的根复合体(rootcomplex)116。请求典型地包括将需要被转换的输入/输出地址,且由此根复合体向地址转换和保护单元118提供地址。该单元是例如如果需要用于将I/O地址转换为可直接用于访问系统存储器104的硬件单元,如以下将详细描述的。
从适配器发起的、包括地址(转换的或不转换的,如果不需要转换)的请求经由例如I/O到存储器总线120而被提供给存储控制器106。存储控制器执行其仲裁,并在合适的时间将具有转换的地址(或初始地址,如果不转换)的请求转送给系统存储器。
将参考图2A描述关于系统存储器和输入/输出集线器的进一步细节。在本实施例中,没有示出存储控制器。但是,I/O集线器可直接或经由存储控制器而被耦合到系统存储器。在一个例子中,系统存储器104包括一个或多个地址空间200。地址空间是已被分配给计算环境的特定组件(诸如特定适配器或适配器功能)的系统存储器的特定部分。在一个例子中,地址空间可被由适配器(或适配器功能)启动的直接存储器访问(DMA)访问,且因此,系统空间在该例子中被称为DMA地址空间。但是,在其他例子中,直接存储器访问没有被用于访问地址空间。
而且,在一个例子中,系统存储器104包括地址转换表202,其被用于将不能直接用于访问系统存储器的地址转换为可直接使用的地址。在一个实施例中,有一个或多个地址转换表被分配给一DMA地址空间,且这些一个或多个地址转换表基于例如其被分配给的地址空间的大小、地址转换表本身的大小以及/或要访问的页(或其他存储器单元)的大小而被配置。
在一个例子中,存在地址转换表(AT)的分级结构。例如,如图2A所示,存在由(如下所述的)IOAT指针218指向的第一级表202a(例如,段表),以及由第一级表的项206a指向的第二、更低级表202b(例如,页表)。接收的地址204的一个或多个位可被用于索引到表202a中以定位特定项206a,其指示特定的更低等级表202a。然后,地址204的一个或多个其他位被用于定位该表中的特定项206b。在该例子中,该项提供用于定位正确页的地址,且地址204中的其他位被用于定位页中的特定位置208以执行数据传送。即,项206a中的地址和接收到的PCI地址204的选定的位被用于提供直接可用于访问系统存储器的地址。例如,从项206b中的地址的高阶位(例如,在4k页例子中的位63:12)以及来自于接收的PCI地址的选定的低阶位(例如,用于4k的页中的位11:0)的串接(concatenation)而形成直接可使用的地址。
根据本发明的一方面,可将多个地址空间分配给特定组件,例如特定适配器(或适配器功能)。例如,如图2B所示,将系统存储器104的两个或更多个地址空间200a…200n分配给适配器功能220a。这个实例中,示出两个地址空间,但是在其他实例中,分配多于两个地址空间。将多个地址空间分配给特定适配器功能允许操作系统分离DMA地址空间。例如,一个地址空间可用于控制信息和队列(例如SCSI控制数据块),一个地址空间可用于数据传输(例如SCSI块)。也存在其他实施例。然而,每个地址空间可小于一个大地址空间,由此提供改进的转换效率和更细粒度的保护。
一个实施例中,向适配器功能分配的每个DMA地址空间可关联于不同转换格式(例如,旁路、不获取、CPUDAT兼容、I/O扩展地址转换(下述)等)。此外,如果转换格式使用转换表,则将一个或多个地址转换表250a-250n的集分配给地址空间。向地址空间分配的一个或多个地址转换表的每个集具有特定格式(例如CPUDAT兼容格式或I/O扩展地址转换格式)。转换表的一个集的格式可与转换表的另一集相同或不同。
在一个例子中,是操作系统将一个或多个DMA地址空间分配给特定适配器。这种分配经由注册过程而执行,该注册过程引起用于该适配器的一个或多个设备表项210(图2A)的初始化(例如经由受信任软件)。注册处理也将地址空间标识符(例如PCI地址的一个或多个位)关联至每个地址空间,如以下更详细描述。
每个设备表项位于I/O集线器112中的设备表211中。例如,设备表211位于I/O集线器的地址转换和保护单元内。
在一个例子中,设备表项(DTE)210包括多个字段,诸如以下:
格式212:该字段包括多个位以指示各种信息,包括例如:地址转换表中的较高等级表的地址转换格式。地址转换格式指示表的等级(例如,上述例子中的第一级表)、以及在提供在访问系统存储器中直接可用的地址中使用的所选地址转换格式(还称,转换格式)(例如CPUDAT兼容、I/O扩展地址、旁路、不获取等);
页大小213:该字段指示将被访问的页(或其他存储器单元)的大小;
PCI基地址214和PCI界限216:这些值提供了用于定义DMA地址空间并验证接收到的地址(例如,PCI地址)是有效的范围;
IOAT(输入/输出地址转换)指针218:该字段包括指向用于DMA地址空间的地址转换表的最高等级的指针。
使能219:这个字段指示DTE是否被使能;和
密钥221:在系统存储器中执行DMA操作时用于存储保护的存储密钥。
在其他的实施例中,DTE可包括更多、更少或不同的信息。
根据本发明的一方面,存在依据地址空间的一个设备表项,因此,可存在依据适配器(或适配器功能)的多个设备表项。在一个实施例中,使用请求者标识符(RID)(和/或地址的一部分)和地址空间标识符来定位在特定转换中使用的设备表项。请求者ID(例如16位值,其指定例如总线号、设备号和功能号)包括在由与适配器相关的PCI功能220发出的请求中。地址空间标识符是包括在请求中的I/O地址的一个或多个位。先前将用作地址空间标识符的特定的一个或多个位定义为地址空间标识符。包括RID和I/O地址的该请求(包括地址空间标识符)经由例如交换器114提供给例如内容可寻址存储器(CAM)230。CAM用于提供索引值,其用于索引到设备表211中以定位特定设备表项210。例如,CAM包括多个项,每个项对应于设备表中的索引。每个CAM项包括RID的值和地址空间标识符。如果接收的RID和地址空间标识符匹配在CAM中的项中包含的值,则使用对应的设备表索引来定位设备表项。如果没有匹配,接收到的包被丢弃,而不对系统存储器进行访问。(在其他实施例中,不需要CAM或其他查找,且RID和地址空间标识符被用作索引。)
随后,设备表项中的字段被用于确保地址的有效性和地址转换表(如果有)的配置。例如,由I/O集线器的硬件(例如地址转换和保护单元)检查请求中的入站地址(inboundaddress)以确保其位于使用提供该地址的请求的RID和地址空间标识符定位的设备表项中存储的PCI基地址214和PCI界限216所定义的界限内。这确保了地址位于先前注册的范围内,且地址转换表(如果有)被有效地为其配置。
将参考图3A-3B描述该注册过程的一个实施例。在这个例子中,对于项适配器(或具体地,适配器功能)分配的每个地址空间执行注册过程。作为一个例子,这个逻辑通过与系统存储器耦合的中央处理单元之一响应于操作系统请求来执行。
初始地,参照图3A,确定适配器将访问的地址空间的大小和位置,步骤300。在一个例子中,地址空间的大小由操作系统设定的PCI基地址和PCI界限确定。操作系统使用一个或多个标准确定基和界限。例如,如果操作系统希望使得PCI地址直接映射到CPU虚拟地址,则基和界限被设置为如此。在又一个例子中,如果想要适配器和/或操作系统映像之间的额外隔离,则选择使用的地址以提供非重叠和不相交的地址空间。所述位置也由操作系统指定,且基于例如适配器的特点。
此外,作为注册过程的一部分,确定要为适配器功能注册哪个地址转换格式,步骤301。即,确定哪个格式用于为访问系统存储器中直接可用的适配功能提供地址。
在一个实施例中,多个地址转换格式可用,并且根据这样的多个格式,操作系统为适配器功能选择一个格式。这个选择基于例如地址空间的配置、适配器类型等。各个可能格式包括:
(a)旁路格式,其中绕过地址转换。在执行注册的适配器为被信任适配器时使用这个格式。适配器看作被信任适配器,如果例如适配器的硬件设计足够健壮并且被保护使得地址不被破坏。例如,提供自身的转换和保护机制的内部开发的适配器或由被信任固件管理的适配器可看作被信任适配器。
如这里所使用的,固件包括例如处理器的微代码、毫代码(millicode)和/或宏代码。它包括例如用于实现更高级的机器码的硬件级的指令和/或数据结构。在一个实施例中,它包括例如专有(proprietary)代码,该专有代码典型地作为包括可信软件的微代码或特定于底层硬件的微代码而被交付,并控制操作系统访问系统硬件。
通过例如在上I/O适配器的本机附件,采用I/O地址转换(IOAT)来提供适配器进行的系统存储器的DMA访问的保护和隔离。然而,存在不需要这样的特定保护级别的多种适配器,包括上述。因此,对于那些适配器,可选择旁路格式;
(b)不获取格式,来自适配器的初始请求中包括的地址可用而不获取任何转换表。在存储器为连续,页大小为已知,并且地址用于不需要获取来自系统存储器的任何转换表的强制区域(例如4k或1M页)时可选择这个格式。可用于访问系统存储器的地址(即,当选择不获取格式时得到的地址)从IOAT指针的地址导出。例如,对于4k页大小,PCI地址的低阶位(例如位11:0)与IOAT指针的高52位串接以获得可用于访问系统存储器而得到的地址;
(c)CPUDAT兼容格式,其中用于转换I/O地址的转换表兼容于用于CPUDAT转换的转换表。即,使用类似于和兼容于已经用于CPU动态地址转换的那样的地址转换表。这便于类似于使用这些类型的表的那些操作系统使用;能够在CPU和I/O适配器之间共享表;以及在管理其可调页客户的DMA空间中提供一定的操作系统(例如)效率。存在各种可用的CPUDAT兼容格式,如参考图5C以下更详细描述;
(d)I/O扩展地址转换格式,其中扩展地址转换表用于I/O地址转换。通过这个格式,地址转换表专用于I/O操作,并且其大小可大于典型地用于CPU地址转换的大小。例如,可存在1M或甚至更大的页表和/或其他转换表。此外,包括页表的转换表的不同等级的大小可彼此不同,并且他们可与自身的页不同。传统大小的增加减少了总线事务,并有助于提升I/O转换高速缓存。页表和其他转换表的大小、以及页的大小将确定需要多少等级的转换。以下参考图5D详细描述不同I/O扩展地址转换格式的例子。
此后,创建一个或多个地址转换表以涵盖该DMA地址空间,步骤302。在一个例子中,所述创建包括建立表并将适当的地址放置在表项中。作为一个例子,一个转换表是具有512个64位的项的4k的页表,且每个项包括与分配的地址空间兼容的4k页地址。
此后,为适配器(或适配器功能)注册DMA地址空间,步骤304,如参考图3B而详细描述的。在该例子中,假设每个适配器有一个PCI功能,且因此,每个适配器有一个请求者ID。例如,响应于操作系统请求,由耦合到系统存储器的中央处理单元执行该逻辑。
初始地,在一个实施例中,选择对应于适配器的请求者ID和地址空间标识符的可用设备表项,步骤310。即,将使用请求者ID来定位设备表项。在一个实施例中,中央处理单元之一的固件确定地址的那些位表示地址空间标识符,并且将这个信息提供给请求注册的操作系统(可在该CPU或另一CPU上执行),后者使用该信息选择设备表项。
另外,PCI基地址和PCI界限被存储在设备表项中,步骤312。而且,最高等级地址转换表(如果有)的格式也被存储在设备表项中,步骤314。例如,格式字段包括多个位,并且那些位的一个或多个指示最高等级表的格式和所选地址转换格式(例如段等级、CPUDAT兼容)。在其他实施例中,一个或多个位指示最高等级,并且一个或多个其他位指示所确定的转换格式(例如,旁路、不获取、特定CPUDAT兼容格式、特定I/O扩展地址转换格式等)。
此外,用于指向最高等级地址转换表(或页,在不获取的情况下)的输入/输出地址转换(IOAT)指针也被存储在设备表项中,步骤316。这完成了注册过程。
响应于执行注册,DMA地址空间和对应的地址转换表(如果有)以及设备表项已准备好被使用。参考图4描述关于处理由诸如适配器的请求者发出的访问系统存储器的请求的细节。以下描述的处理由I/O集线器执行。在一个例子中,执行该逻辑的是地址转换和保护单元。
在一个实施例中,初始地,DMA请求在输入/输出集线器处被接收,步骤400。例如,PCI功能发出例如经由PCI交换器被转送给PCI集线器的请求。使用请求中的请求者ID和地址空间标识符(为请求中的I/O地址的一个或多个位),可定位适当的设备表项,步骤402。例如,CAM知晓哪些位指定为地址空间标识符,并且他使用哪些位和RID建立在设备表中的索引,以选择适当设备表项。
此后,确定设备表项是否有效,查询404。在一个例子中,通过检查项本身的有效位来确定有效性。该位例如是响应于操作系统的启用功能请求的执行而设置的。如果被启用,该位被设置为例如1(即,有效);否则,其保留在零(即,无效)。在又一个例子中,注册过程完成时可设置该位。
如果设备表项是无效的,呈现错误,步骤405。否则,进一步确定在请求中提供的PCI地址是否小于存储在设备表项中的PCI基地址,查询406。如果是,则该地址位于有效范围之外并提供错误,步骤407。但是,如果PCI地址大于或等于基地址,则进一步确定PCI地址是否大于设备表项中的PCI界限值,查询408。如果PCI地址大于界限,则再次呈现错误,因为地址位于有效范围外,步骤409。但是,如果地址位于有效范围内,则处理继续。
在一个例子中,确定在设备表项中指定的地址转换格式是否指示旁路转换,查询410。如果是,则在I/O总线上将地址直接传送至存储器控制器,以在不获取任何转换项的情况下访问存储器。I/O集线器继续处理,以能够在该地址处进行数据的获取/存储,步骤426。
返回查询410,如果格式未指示旁路,则进一步查询格式是否指示基于IOAT指针直接访问存储器而不需地址转换表的任何获取,查询412。如果指示不获取,则得到的地址源自IOAT指针,并且不需要获取来自系统存储器的地址转换表,步骤414。将得到的地址发送至存储器控制器,并用于定位页和页中的特定项。例如,如果页大小为4k,则位11:0被用作从IOAT指针的便宜。I/O集线器继续处理以能够在该页项处获取/存储数据,步骤426。
返回查询412,另一方面,如果需要使用转换表,则在设备表项中提供的格式用来确定转换表的类型(例如CPUDAT兼容或I/O扩展地址转换)并确定用于地址转换的地址中的PCI地址位,步骤416。例如,如果格式指示具有4k页和4k地址转换表的I/O扩展地址转换格式(如下所述),并且上级表是具有4k页的第一级表,则地址的位29:21被用于索引到第一级表中;位20:12被用于索引到页表中;且位11:0被用于索引到4k的页中。使用的位取决于需要多少位来索引到给定大小的页或表中。例如,对于具有字节级寻址的4k页来说,使用12位来寻址4096个字节;而对于具有512个项、每项8个字节的4k页表来说,使用9个位来寻址512个项。
接下来,PCI集线器取得适当的地址转换表项,步骤418。例如,初始地,使用设备表项的IOAT指针来定位最高级的转换表。随后,使用地址的位(用于有效而不是转换的高阶位之后的那些位;例如,上述例子中的位29:21)来定位表中的特定项。
随后基于例如在设备表项中提供的格式来确定关于定位的地址转换项是否具有正确格式,查询420。例如,将设备表项中的格式与在地址转换项中指示的格式进行比较。如果相等,则设备表项中的格式是有效的。如果不是,指示错误,步骤422;否则,继续处理,确定这是否是最后将被处理的表,查询416。即,确定是否需要其他的地址转换表来获得真实或绝对的地址或者是否已定位最低级表项。这种确定是基于提供的格式和已被处理的表的大小而做出的。如果它不是最后的表,则处理继续到步骤412。否则,I/O集线器继续处理以使能在转换的地址获取或存储数据,步骤426。在一个例子中,I/O集线器将转换的地址转发给存储控制器,其使用该地址在转换的地址指定的DMA位置获取或存储数据。
在一个实施例中,转换的等级数以及由此执行转换所需要的获取次数减少。这是通过例如在转换期间忽略地址的高阶位且仅使用低阶位来遍历转换表完成的,所述转换表基于例如分配给适配器的DMA地址空间的大小。在以下例子中进一步示出相对于完整地址的部分地址的使用。
初始地,参考图5A,其描述了这样的例子,其中在地址转换/存储器访问中使用整个地址。使用该现有技术,需要六个等级的转换表,包括页表。最高级表的开始(例如,在该例子中是第五级表)由IOAT指针指向,且随后PCI地址的位被用于在表中定位项。每个转换表项指向较低级转换表或页的开始(例如,第五级表中的项指向第四级表的开始等)。
在该例子中,DMA地址空间(DMAAS)是6M的大小,且每个表是4k字节,具有最多512个8字节的项(除了基于地址大小仅支持128个项的第五级表)。地址是例如64位:FFFFC0000009C600。第五级表的开始由IOAT指针指向,且PCI地址的位63:57被用于索引到第五表中以定位第四级表的开始;PCI地址的位56:48被用于索引到第四级表中以定位第三级表的开始;位47:39被用于索引到第三级表中以定位第二级表的开始;位38:30被用于索引到第二级表中以定位第一级表的开始;位29:21被用于索引到第一级表中以定位页表的开始;位20:12被用于索引到页表中以定位页的开始;且位11:0被用于定位4k页中的项。因此,在该例子中,所有的地址位被用于转换/访问。
这与图5B中的例子形成对比,在该例子中地址空间是相同的大小(例如,6M),且地址是相同的,但转换技术在转换中忽略了一些地址位。在该例子中,地址的位63:30在转换中被忽略。IOAT指针指向第一级表的开始,且PCI地址的位29:21被用于索引到第一级表中以定位页表的开始;位20:12被用于索引到适当的页表中以定位页的开始;且位11:0被用于索引到4k的页中。
如图所示,第一级表500包括三个项502,每个项向三个页表504中的一个提供地址。所需要的页表的数量且由此其他级表的数量取决于例如DMA地址空间的大小、转换表的大小以及/或页的大小。在该例子中,DMA地址空间是6M,且每个页表是4k,具有最多512个项。因此,每个页表可映射最多2M的存储器(4k×512个项)。因此,需要三个页表以用于6M的地址空间。第一级表能持有三个项,每个页表一个,且由此,在该例子中不需要更多级的地址转换表。
此外,如上所述,地址转换表的不同格式可用于地址转换,并且格式中可存在变形。例如,可存在各种CPUDAT兼容格式,参考图5C描述其实例。如图所示,一个CPUDAT兼容格式为4k页CPUDAT兼容格式550,另一个为1M页CPUDAT兼容格式552,作为例子。所示的位的数量为用于索引到该页或表(或在该页或表中定位项)的地址位的数量。例如,PCI地址的12位554用作4k页556中的字节偏移;8位558用作页表560中的索引;11位562用作到段表564中的索引等。在指定地址转换表下的定位为地址转换表支持的地址空间的最大大小。例如,页表560支持1MDMA地址空间;段表564支持2GDMA地址空间等。这个图中,以及图5D中,K=kilobytes(千字节),M=megabytes(兆字节),G=gigabytes(十亿字节),T=terabytes(兆兆字节),P=petabytes(拍字节),和E=exabytes(艾字节)。
如图所示,在页的大小增加时,转换表的等级的数量减少。例如,对于4k页556,需要页表,但是对于1M页则不需要。其他实例和变形是可能的。
在图5D中示出I/O扩展地址转换格式的各个例子。例如,示出以下格式:具有4k页的4k地址转换表570;具有4k页的1M地址转换表572;和具有1M页的1M地址转换表574。由于具有CPUDAT兼容格式,列出的位的数量是用于在特定表中定位项的那些位。例如,在标号576,12位是4k页中的偏移。类似地,在标号578,9位用于索引到I/O页表。这个I/O页表允许具有2M大小的DMA地址空间。存在许多其他实例。
如这里描述的,一个地址空间的一个地址转换格式可不同于另一地址空间的地址转换格式。例如,格式可具有不同类型(例如,一个地址空间的旁路格式,另一地址空间的CPUDAT兼容格式;一方的CPUDAT兼容格式,另一方的I/O扩展地址转换格式;或任意其他组合),或可以是格式的特定类型的变形(例如,一个地址空间的4k页CPUDAT兼容格式,另一地址空间的1M页DAT兼容格式;一方的具有4k页I/O扩展地址转换的4k表,另一方的具有4k页I/O扩展地址转换格式的1M表等)。此外,地址空间可具有相同格式,具有不同(或甚至相同)长度,可通过唯一地址标识符来识别。支持的地址空间的数量可大于2,支持的数量取决于实施方案。
一个特定方案中,为了执行在适配器注册DMA地址空间,使用称为修改PCI功能控制(MPFC)指令的指令。例如,操作系统确定他希望使用哪个地址转换格式,对于该格式建立地址转换表,然后发出MPFC指令(其具有作为指令的操作数而包括的格式)。一个实例中,指令的格式和其他操作数包括在功能信息块(以下描述)中,这是指令的操作数。然后,使用功能信息块更新DTE,并且一个实施例中,可选地,更新包括适配器的操作参数的功能表项(FTE)。
参考图6A-9描述与这个指令相关的细节的一个实施例,特别是注册处理。参考图6A,修改PCI功能控制指令600包括例如指示修改PCI功能控制指令的操作码602;指定所包括的各种信息所在位置的第一字段604,所述信息是关于操作参数正为其建立的适配器功能的信息;以及指明从其获取PCI功能信息块(FIB)的位置的第二字段606。以下将进一步描述由字段1和2指定的位置的内容。
在一个实施例中,字段1指定包括各种信息的通用寄存器。如图6B所示,寄存器的内容包括例如功能句柄(handle)610,其标识适配器功能的句柄,修改指令是代表该功能执行的;地址空间612,其指定与由功能句柄指定的适配器功能有关的系统存储器中的地址空间;操作控制614,其指定将针对适配器功能而执行的操作;以及状态616,其以预定码提供当完成指令时关于指令的状态。
在一个实施例中,功能句柄包括例如指示句柄是否被使能的使能指示符,标识适配器功能的功能号(这是静态标识符,且可被用于索引到功能表中);以及实例号,其指定该功能句柄的特定实例。存在用于每个适配器功能的功能句柄,且其用于定位功能表中的功能表项(FTE)。每个功能表项包括操作参数和/与其适配器功能有关的其他信息。作为例子,功能表项包括:
实例号:该字段指示与功能表项有关的适配器功能句柄的特定实例;
设备表项(DTE)索引1…n:存在一个或多个设备表索引,且每个索引是到一个设备表中的索引,用于定位设备表项(DTE)。每个适配器功能有一个或多个设备表项,且每个项包括与其适配器功能有关的信息,包括用于处理适配器功能的请求(例如,DMA请求、MSI请求)的信息以及涉及与适配器功能有关的请求(例如,PCI指令)的信息。每个设备表项与分配给适配器功能的系统存储器内的一个地址空间有关。适配器功能可具有分配给适配器功能的系统存储器内的一个或多个地址空间。
示忙器:该字段指示适配器功能是否忙;
持久错误状态指示器:该字段指示适配器功能是否处于持久错误状态;
恢复启动指示器:该字段指示是否已启动对于适配器功能的恢复;
许可指示器:该字段指示尝试控制适配器功能的操作系统是否有权限这么做;
使能指示器:该字段指示适配器功能是否被使能(例如1=使能,0=禁止);
请求者标识符(RID):这是适配器功能的标识符,且包括例如总线号、设备号和功能号。
在一个例子中,该字段用于访问适配器功能的配置空间。(适配器的存储器可被定义为地址空间,包括例如配置空间、I/O空间和/或一个或多个存储器空间。)在一个例子中,可通过在由操作系统(或其他配置)发出到适配器功能的指令中指定配置空间来访问配置空间。在该指令中指定的是到配置空间中的偏移,以及用于定位包括RID的恰当的功能表项的功能句柄。固件接收指令并确定其用于配置空间。因此,它使用RID来生成对I/O集线器的请求,且I/O集线器创建访问适配器的请求。适配器功能的定位是基于RID,且该偏移指定到适配器功能的配置空间中的偏移。
基地址寄存器(BAR)(1到n):该字段包括多个无符号整数,被指定为BAR0-BARn,其与原始指定的适配器功能有关,且其值也被存储在与适配器功能有关的基地址寄存器中。每个BAR指示适配器功能内的存储器空间或I/O空间的开始地址,并也指示地址空间的类型,即,它是例如64或32位的存储空间,或是32位的I/O空间;
在一个例子中,它被用于访问适配器功能的存储空间和/或I/O空间。例如,在访问适配器功能的指令中提供的偏移被添加到与在指令中指定的地址空间有关的基地址寄存器中的值,以获得用于访问适配器功能的地址。在指令中提供的地址空间标识符标识将被访问的适配器功能内的地址空间,以及将被使用的对应的BAR;
大小1…n:该字段包括多个无符号整数,被指定为SIZE0-SIZEN;大小字段的值,当不是零时,表示每个地址空间的大小,且每个项对应于先前描述的BAR。
以下将描述关于BAR和Size的进一步细节。
1.当BAR没有针对适配器功能而实现时,BAR字段及其对应的大小字段都被存储为零。
2.当BAR字段表示I/O地址空间或者32位存储器地址空间时,对应的大小字段是非零的并表示地址空间的大小。
3.当BAR字段表示64位存储器地址空间时,
a.BARn字段表示最低有效(leastsignificant)的地址位。
b.下一个连续BARn+1字段表示最高有效(mostsignificant)的地址位。
c.对应的SIZEn字段是非零的,并表示地址空间的大小。
d.对应的SIZEn+1字段不是有意义的,且被存储为零。
内部路由信息:该信息被用于执行到适配器的特定路由。作为例子,它包括例如节点、处理器芯片和集线器寻址信息。
状态指示:这提供了关于例如加载/存储操作是否被阻止或适配器是否处于错误状态的指示,以及其他指示。
在一个例子中,示忙器、持久错误状态指示器以及恢复启动指示器基于由固件执行的监督而被设置。而且,许可指示器基于例如策略而被设置;且BAR信息基于在处理器(例如,处理器的固件)的总线行走(buswalk)期间发现的配置信息而被设置。其他字段可基于配置、初始化和/或事件而被设置。在其他实施例中,功能表项可包括更多、更少或不同的信息。包括的信息可取决于由适配器功能支持或使能的操作。
参考图6C,在一个例子中,字段2指示PCI功能信息块(FIB)的逻辑地址620,该PCT功能信息块包括关于有关适配器功能的信息。功能信息块被用于更新设备表项和/或与适配器功能有关的功能表项(或其他位置)。该信息在适配器的初始化和/或配置期间,以及/或者响应于特定事件而被存储在FIB中。
参考图6D描述关于功能信息块(FIB)的进一步细节。在一个实施例中,功能信息块650包括以下字段:
格式651:该字段指定FIB的格式。
拦截控制652:该字段被用来指示特定指令由可调页模式客户(pageablemodeguest)进行的客户执行是否导致指令拦截;
错误指示654:该字段包括用于直接存储器访问和适配器中断的错误状态指示。当该位被设置(例如1)时,在执行用于适配器功能的直接存储器访问或适配器拦截时,检测到一个或多个错误;
加载/存储阻止656:该字段指示加载/存储操作是否被阻止;
PCI功能有效658:该字段包括用于适配器功能的使能控制。当该位被设置(例如1)时,适配器功能被认为对于I/O操作而被使能;
地址空间注册660:该字段包括用于适配器功能的直接存储器访问使能控制。当该字段被设置(例如1)时,直接存储访问被使能;
页大小661:该字段指示将被DMA存储器访问所访问的页或其他存储单元的大小;
PCI基地址(PBA)662:该字段是用于分配给适配器功能的系统存储器中的地址空间的基地址。它表示适配器功能被允许使用以直接存储器访问指定的DMA地址空间的最低虚拟地址;
PCI地址界限(PAL)664:该字段表示适配器功能被允许在指定的DMA地址空间内访问的最高虚拟地址;
输入/输出地址转换指针(IOAT)666:输入/输出地址转换指针指定由PCI虚拟地址转换使用的任何转换表中的第一个,或者它可直接指定作为转换结果的存储帧的绝对地址;
中断子类(ISC)668:该字段包括用于针对适配器功能给出适配器中断的中断子类;
中断数(NOI)670:该字段指定针对适配器功能接受的不同的中断代码的数量。该字段也以位定义了由适配器中断位向量地址和适配器中断位向量偏置字段指定的适配器中断位向量的大小;
适配器中断位向量地址(AIBV)672:该字段指定用于适配器功能的适配器中断位向量的地址。该向量在中断处理中使用;
适配器中断位向量偏移674:该字段指定用于适配器功能的第一适配器中断位向量位的偏移;
适配器中断概要位地址(AISB)676:该字段提供指定可选地在中断处理中使用的适配器中断概要位的地址;
适配器中断概要位偏移678:该字段提供到适配器中断概要位向量中的偏移;
功能测量块(FMB)地址680:该字段提供用于收集关于适配器功能的测量的功能测量块的地址;
功能测量块键(key)682:该字段包括访问功能测量块的访问键;
概要位通知控制684:该字段指示是否存在正使用的概要位向量;
指令授权令牌686:该字段用于确定可调页存储模式客户是否被授权执行PCI指令而没有主机干预。
在一个例子中,在中,可调页客户经由开始解释执行(SIE)指令以解释等级2被解释性地执行。例如,逻辑分区(LPAR)管理程序(hypervisor)执行SIE指令以开始物理的、固定的存储器中的逻辑分区。如果是该逻辑分区中的操作系统,它发出SIE指令以在其V=V(虚拟)存储中执行其客户(虚拟)机。因此,LPAR管理程序使用等级1SIE,且管理程序使用等级2SIE;以及
地址转换格式687:该字段指示用于将在转换中使用的最高级转换表的地址转换的所选择的格式(例如,最高级表(例如,段表、区域(region)第三等)的指示,和所选格式的指示(例如CPUDAT兼容、I/O扩展地址转换格式、旁路格式、不获取格式)。
在修改PCI功能控制指令中指定的功能信息块被用于修改选择的设备表项、功能表项和/或与在指令中指定的适配器功能有关的其他固件控制。通过修改设备表项、功能表项和/或其他固件控制,为适配器提供某些服务。这些服务包括,例如,适配器中断;地址转换;重置错误状态;重置加载/存储阻止;设置功能测量参数;以及设置拦截控制。
参考图7描述与修改PCI功能控制指令有关的逻辑的一个实施例。在一个例子中,指令由操作系统(或其他配置)发出并由执行操作系统的处理器(例如,固件)执行。在此处的例子中,指令和适配器功能是基于PCI的。但是,在其他实施例中,可使用不同的适配器结构和相应的指令。
在一个例子中,操作系统向指令提供以下操作数(例如,在由指令指定的一个或多个寄存器中);PCI功能句柄;DMA地址空间标识符;操作控制;以及功能信息块的地址。
参考图7,初始地,确定是否安装了允许修改PCI功能控制指令的工具(facility),查询700。该确定通过例如检查存储在例如控制块中的指示器而做出。如果工具未安装,提供异常条件,步骤702。否则,确定指令是否由可调页存储模式客户(或其他客户)发出,查询704。如果是,主机操作系统将仿真用于该客户机的操作,步骤706。
否则,确定一个或多个操作数是否被对准,查询708。例如,确定功能信息块的地址是否是在双字边界。在一个例子中,这是可选的。如果操作数未被对准,则提供异常条件,步骤710。
否则,确定功能信息块是否可访问,查询712。如果否,则提供异常条件,步骤714。否则,确定在修改PCI功能控制指令的操作数中提供的句柄是否被使能,查询716。在一个例子中,该确定通过检查句柄中的使能指示器而做出。如果句柄没有被使能,则提供异常条件,步骤718。
如果句柄被使能,则句柄被用于定位功能表项,步骤720。即,至少一部分句柄被用于索引到功能表中以定位对应于适配器功能的功能表项,操作参数将为该适配器功能建立。
确定功能表项是否被发现,查询722。如果否,则提供异常条件,步骤724。否则,如果发出指令的配置是客户,查询726,则提供异常条件(例如拦截到主机),步骤728。如果配置不是客户,则该查询可被忽略,或者如果指定的话,可检查其他授权。
随后确定该功能是否被使能,查询730。在一个例子中,该确定是通过检查功能表项中的使能指示器而做出的。如果它未被使能,则提供异常条件,步骤732。
如果功能被使能,则确定恢复是否是活动的,查询734。如果由功能表项中的恢复指示器确定恢复是活动的,则提供异常条件,步骤736。但是,如果恢复不是活动的,则进一步确定功能是否忙,查询738。该确定是通过查询功能表项中的示忙器而做出的。如果功能忙,则提供忙条件,步骤740。利用该忙条件,可重试该指令,而不是放弃它。
如果功能不忙,则进一步确定功能信息块格式是否有效,查询742。例如,检查FIB的格式字段以确定该格式是否由系统支持。如果它是无效的,则提供异常条件,步骤744。如果功能信息块格式是有效的,则进一步确定在指令的操作数中指定的操作控制是否是有效的,查询746。即,该操作控制是否是用于该指令的指定操作控制中的一个。如果它是无效的,则提供异常条件,步骤748。但是,如果该操作控制是有效的,则继续处理指定的特定操作控制。
可被指定的一种操作控制是在控制用于适配器的地址转换时使用的注册I/O地址转换参数操作。利用该操作,与I/O地址转换有关的PCI功能参数由FIB(其是该指令的操作数)的适合参数设置在DTE、FTE和/或其他位置中。这些参数包括,例如,PCI基地址;PCI地址界限(也被称为PCI界限或界限);地址转换格式;页大小;以及I/O地址转换指针,它们是该操作的操作数。也存在暗示的操作,包括开始DMA地址(SDMA)以及结束DMA地址(EDMA),其存储在可被执行指令的处理器访问的位置。
参考图8描述建立用于I/O地址转换的操作参数的逻辑的一个实施例。初始地,确定FIB中的PCI基地址是否大于FIB中的PCI界限,查询800。如果基地址和界限的比较指示基地址大于界限,则识别异常条件,步骤802。但是,如果基地址小于或等于界限,则进一步确定地址转换格式和页大小是否有效,查询804。如果它们无效,则提供异常条件,步骤806。但是,如果它们有效,则进一步确定地址空间的大小(基于基地址和界限)是否超过转换能力,查询808。在一个例子中,地址空间的大小与基于上级表的格式可能的最大地址转换能力进行比较。例如,如果上级表是DAT兼容段表,最大转换能力是2千兆字节。
如果地址空间的大小超过转换能力,则提供异常条件,步骤88。否则,进一步确定基地址是否小于开始DMA地址,查询812。如果这样,则提供异常条件,步骤814。否则,进一步确定地址界限是否大于结束DMA地址,查询816。如果是这样,则提供异常条件,步骤818。在一个例子中,开始DMA地址和结束DMA地址是基于全系统策略。
此后,确定是否可获得足够的资源(如果需要任何资源的话)来执行I/O地址转换,查询820。如果否,则提供异常条件,步骤822。否则,进一步确定I/O地址转换参数是否已在FTE和DTE中注册,查询824。这是通过检查FTE/DTE中的参数的值而确定的。例如,如果FTE/DTE中的值是零或另一个定义的值,则还没有执行注册。为了定位FTE,使用在指令中提供的句柄,且为了定位DTE,使用FTE中的设备索引。
如果适配器功能已被注册用于地址转换,则提供异常条件,步骤826。如果否,则确定指定的DMA地址空间是否有效,(即,其是否是DTE为其使能的地址空间),查询828。如果否,则提供异常条件,步骤830。如果所有的检查都成功,则转换参数被放置在设备表项中,并可选地,放置在相应的功能表项中(或其他指定位置),步骤832。例如,与I/O地址转换有关的PCI功能参数从功能信息块被复制并放置在DTE/FTE中。这些参数包括,例如PCI基地址、PCI地址界限、转换格式、页大小以及I/O地址转换指针。该操作使能对指定的DMA地址空间的DMA访问。它使能用于适配器功能的I/O地址转换。
可由修改PCI功能控制指令指定的另一个操作控制是注销I/O地址转换参数操作,其例子将参考图9描述。利用该操作,与I/O地址转换有关的功能参数被重设为零。该操作禁止了对指定的DMA地址空间的DMA访问,并引起用于该DMA地址空间的I/O转换后备缓冲器(translationlookasidebuffer)项的清除。它禁止地址转换。
参考图9,在一个实施例中,确定I/O地址转换参数是否未注册,查询900。在一个例子中,该确定是通过检查FTE或DTE中合适的参数的值而做出的。如果这些字段是零或某个指定值,它们未被注册。因此,提供异常条件,步骤902。如果它们被注册,则确定DMA地址空间是否有效,查询904。如果它无效,则提供异常条件,步骤906。如果DMA地址空间有效,则设备表项中以及可选地对应的功能表项中的转换参数被清除,步骤908。
在一个实施例中,对于向适配器分配的每个DMA地址空间执行注册过程。如这里所述,可分配多个地址空间,并且在一个特定方案中,由呼叫逻辑处理器指令使能功能指示要分配的地址空间的数量。
图10A中示出了这个指令的一个实施例。如图所示,在一个例子中,呼叫逻辑处理器指令1000包括指示其是呼叫逻辑处理器指令的操作码1002;以及用于命令1004的指示。在一个例子中,这个指示时描述要被执行的命令的请求块的地址。图10B中示出了这种请求块的一个实施例。
如图10B所示,在一个例子,请求块1020包括多个参数,例如长度字段1022,指示请求块的长度;命令字段1024,指示集合PCI功能命令;PCI功能句柄1026,其是被提供给使能或去能功能的句柄;操作码1028,其用于指定使能或去能操作;以及DMA地址空间(DMAAS)的号1030,其指示与特定PCI功能相关联的所请求的地址空间号。在其他实施方式中可包括更多、更少或不同的信息。例如,在可调页存储模式客户的主机发出指令的虚拟环境,提供客户身份(identity)。其他变化也是可能的。
响应于发出和处理呼叫逻辑处理器指令,返回响应块并且响应块中包括的信息依赖于要被执行的操作。图10C中示出了响应块的一个实施例。在一个例子中,响应块1050包括:长度字段1052,指示响应块的长度;响应码1054,指示命令的状态;以及PCI功能句柄1056,其标识PCI功能。响应于使能命令,PCI功能句柄是PCI功能的使能句柄。此外,在去能操作完成时,PCI功能句柄是未来可以由使能功能来进行使能的通用句柄。
通过参照图11来描述使能PCI功能的逻辑的一个实施例。在一个例子中,响应于发出呼叫逻辑处理器指令来发起所述逻辑,其中将所述命令设置为集合PCI功能命令并且将所述操作码设置为使能功能。例如,响应于操作系统或被授权以执行发出指令的所述逻辑的操作系统的设备驱动器,由处理器来执行所述逻辑。在其他实施方式中,在不使用呼叫逻辑处理器指令的情况下,可以执行逻辑。
参照图11,最初,做出呼叫逻辑处理器指令的请求块中提供的句柄是否是有效句柄的确定,查询1100。即,句柄指向功能表中的有效项?或其在有效项范围之外(例如,句柄的功能号部分指定安装的功能)。如果句柄是未知的,那么提供指示句柄未被识别的相应响应码,步骤1102。然而,如果句柄是已知的,那么做出句柄是否是使能的进一步查询,查询1104。通过检查PCI功能句柄中的使能指示器来做出上述确定。如果设置指示句柄是使能的的指示,那么如所指示的返回响应码,步骤1106。
然而,如果句柄是已知的并且不是使能的(即,对于实现是有效的),那么做出被分配给PCI功能的所请求的地址空间号是否大于最大值的确定,查询1108。为了做出这个确定,将请求块中指定的DMA地址空间号与最大值(在一个例子中,基于策略来提供)进行比较。如果地址空间号大于最大值,那么提供指示用于DMA地址空间的无效值的响应码,步骤1110。否则,做出所请求的地址空间号是否可用的确定,查询1112。通过检查是否存在可用于所请求的地址空间号的设备表项来做出上述确定。如果所请求的地址空间号不可用,那么返回指示不存在足够资源的响应码,步骤1114。否则,处理继续使能PCI功能。
所提供的句柄用于对功能表项进行定位,步骤1116。例如,将句柄的一个或多个指定的比特用作功能表中的索引,以对特定功能表项进行定位。响应于对适当的功能表项进行定位,做出功能是否是使能的的确定,查询1118。通过检查功能表项中的使能指示器来做出这种确定。如果功能已经被使能(即,将指示器设置为1),那么返回指示PCI功能已经处于所请求的状态的响应码,步骤1120。
如果功能还没有被使能,那么处理继续确定功能是否处于永久错误状态,查询1122。如果功能表项中的永久错误状态指示器指示其处于永久错误状态,那么返回指示这种情况的响应代码,步骤1124。然而,如果功能不处于永久错误状态,那么做出是否已经为功能发起错误恢复的进一步确定,查询1126。如果设置了功能表项中的恢复发起指示器,那么提供指示已经发起恢复的响应码,步骤1128。否则,做出PCI功能是否忙的进一步查询,查询1130。再次,如果功能表项中的忙指示器的检查指示PCI功能为忙,那么提供这种指示,步骤1132,然而,如果PCI功能不处于永久错误状态,不发起恢复并且其不忙,那么做出是否允许操作系统使能所述PCI功能的进一步查询,步骤1134。如果基于功能表项的允许指示器不进行允许,那么提供指示未经授权的动作的响应码,步骤1136。然而,如果成功地通过所有测试,那么可做出是否存在可用于这种PCI功能的任意DTE的进一步确定,查询1138。作为例子,DTE是可用的的确定可基于I/O集线器中目前不是使能的的DTE。因此,可应用策略以进一步限制可用于指定操作系统或逻辑分区的DTE的数量。可以分配可访问适配器的任意可用DTE。如果不存在可用的DTE,那么返回指示一个或多个所请求的DTE是不可用的的响应码,步骤1140。
如果DTE是可用的,那么分配且使能对应于所请求的地址空间号的多个DTE,步骤1142。在一个例子中,所述使能包括设置要被使能的每个DTE中的使能指示器。此外,在这个例子中,所述使能包括建立CAM以提供索引给每个DTE。例如,对于每个DTE,将CAM中的条目与索引一起加载。
此外,DTE与概念表项相关联,步骤1144。这包括,例如,在功能表项中包括每个DTE索引。然后,通过设置功能表项中的使能指示器来将功能标记为使能,步骤1146。此外,设置句柄中的使能位,并且更新实例号,步骤1148。然后返回这个允许对PCI适配器的使用的使能句柄,步骤1150。例如,响应于对功能进行使能,可以执行用于地址转换和中断的注册,可由PCI功能来执行DMA操作和/或可以将加载、存储和存储块指令发布给功能。
每个地址空间由地址空间标识符(即为适配器接收的地址的一个或多个位)识别。特定位在由CLP查询群组命令检索的DMA地址空间掩码中指示。以上参考图10A描述CLP指令的例子。
参考图12A描述对于查询PCI功能群组命令的请求块的一个实施例。在一个例子中,请求块1200包括以下字段:
长度字段1202:这个字段指示请求块的长度;
命令码1204:这个字段指示查询PCI功能群组命令;和
功能群组ID1206:这个字段指定要获得哪些属性的PCI功能群组标识符。在一个例子中,他从提供所选功能相关的细节的查询功能命令来获得。
响应于发出和处理具有查询PCI功能群组命令的呼叫逻辑处理器指令,返回响应块。图12B中示出响应块的一个实施例。在一个例子中,响应块1250包括:
长度字段1252:这个字段指示响应块的长度;
响应码1254:这个字段指示命令的状态;
中断的数量1256:这个字段指示对于指定PCI功能群组中的每个PCI功能由PCI工具支持的连续MSI向量数量(即中断事件指示符)的最大数量。在一个例子中,中断的数量的可能有效值在零至2048的范围内;
版本1258:这个字段指示由指定PCI群组标识符指明的PCI功能的群组附加的PCI工具支持的PCI规范的版本;
帧1262:这个字段指示对于I/O地址转换所支持的帧(或页)大小;
测量块更新间隔1264:这是指示更新PCI功能测量块的大概时间间隔(例如按毫秒)的值;
DMA地址空间掩码1266:这是用于指示PCI地址中的哪些位用于识别DMA地址空间的值。他可隐含地定义所支持的DMA地址空间的最大数量。即,他是与掩码中为一的位的数量进行2取幂;和
MSI地址1268:这是用于消息信号中断请求的值。
群组信息基于给定系统I/O架构和固件与I/O集线器的能力。这可存储于FTE或任意其他传统位置中,用于在查询处理期间稍后检索。具体地,查询群组命令检索信息,并将其存储于操作系统可访问的其响应块中。
以上描述了将多个DMA地址空间分配给每个适配器,具体地每个适配器功能(其与其他适配器功能共享PCI总线)的能力。依据适配器或适配器功能对多个地址空间的使用能够实现不同大小地址空间的使用、不同转换格式的使用、和/或不同地址转换表的使用,如果需要。多个地址空间的使用通过将DTE关联至每个地址空间来实现。DTE定义了他相关的地址空间的特征。通过RID和地址空间标识符的组合来选择适当DTE。
在此描述的实施例中,适配器是PCI适配器。如在此使用的,PCI指根据由外围组件互连特别兴趣组(PCI-SIG)定义的基于PCI的规范而实现的任何适配器(www.pcisig.com/home),包括但不限于PCI或PCIe。在一个特定例子中,快速外围组件互连(PCIe)是组件级互连标准,其定义了用于I/O适配器和主机系统之间的事务的双向通信协议。根据用于PCIe总线上的传输的PCIe标准,PCIe通信被封装在包中。源于I/O适配器且止于主机系统的事务被称为上行事务。源于主机系统且止于I/O适配器的事务被称为下行事务。PCIe拓扑基于成对(例如,一个上行链路,一个下行链路)以形成PCIe总线的点对点单向链路。PCIe标准由PCI-SIG维护并公布。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图13,在一个例子中,计算机程序产品100包括,例如,一个或多个计算机可读存储介质1302,在其上存储有计算机可读的程序代码装置或逻辑1304,以提供并方便本发明的一个或多个方面。
体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
尽管以上描述了各种实施例,这些仅是例子。例如,其他体系结构的计算环境可包含并使用本发明的一个或多个方面。作为例子,除了服务器之外的服务器,诸如由国际商业机器公司提供的PowerSystems服务器或其他服务器,或其他公司的服务器,可包括、使用和/或受益于本发明的一个或多个方面。而且,尽管在此示出的例子中,适配器和PCI集线器被认为是服务器的一部分,在其他实施例中,它们不是必须被认为是服务器的一部分,而是可被简单地认为是耦合到计算环境的系统存储器和/或其他组件。计算环境不需要是服务器。而且,尽管描述了转换表,可使用任何数据结果,且术语表将包括所有这样的数据结果。而且,尽管适配器是基于PCI的,可与其他适配器或其他I/O组件一起使用本发明的一个或多个方面。适配器和PCI适配器仅仅是例子。而且,可使用其他大小的地址空间、地址表和/或页,而不脱离本发明的范围。而且,DTE可包括更多、更少或不同的信息。进一步地,可使用本发明的一个或多个方面转换其他类型的地址。此外,其他值可用于地址空间标识符和/或请求者标识符。许多其他变化是可能的。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumbdrive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其他的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
参考图14,其描述了实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即,中央存储器)5002通信的一个或多个CPU,以及到存储介质设备5011和网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU5001符合具有架构指令集和架构功能的架构。CPU5001可具有动态地址转换(DAT)5003,其用于将程序地址(虚拟地址)转变为存储器的真实地址。DAT典型地包括用于高速缓存转换的转换后备缓冲器(TLB)5007,这样稍后对计算机存储器5002块的访问不需要地址转换的延迟。典型地,高速缓存5009被使用在计算机存储器5002和处理器5001之间。高速缓存5009可以是分层的,具有可被多于一个的CPU获得的大高速缓存,以及大高速缓存和每个CPU之间的较小、较快(较低级)的高速缓存。在一些实施方式中,较低级的高速缓存被拆分以为指令获取和数据访问提供单独的低级高速缓存。在一个实施例中,由指令获取单元5004经由高速缓存5009从存储器5002获取指令。指令在指令解码单元5006中被解码,且(在一些实施例中与其他指令一起)被发送到一个或多个指令执行单元5008。典型地,使用若干执行单元5008,例如算术执行单元、浮点执行单元和分支指令执行单元。指定被执行单元执行,如需要,从指令指定的寄存器或存储器访问操作数。如果将从存储器5002访问(加载或存储)操作数,加载/存储单元5005典型地在被执行的指令的控制下处理该访问。指令可在硬件电路或内部微代码(固件)中或其组合中被执行。
需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括持久分配地存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数界限上。模型可提供EXTRACTCACHEATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCHDATA(预取数据)和PREFETCHDATARELATIVELONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预取,或数据从高速缓存的释放。
存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左边从0开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间传递。除非另有指定,例如在中,存储器中的一组字节由该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的每个组内,例如在中,位以从左到右的顺序被编号。在中,最左边的位有时候被称为“高阶”位且最右边的位被称为“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号为0到7(例如在中)。地址中的位被编号为对于24位地址的8-31或40-63,或者对于31位地址的1-31或33-63;它们被编号为对于64位地址的0-63。在多个字节的任何其他的固定长度的格式中,构成格式的位从0开始被连续编号。为了错误检测,且优选地为了校正,一个或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时,该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被放在存储器中时,仅替换被包括在指定的字段中的哪些字节位置的内容,即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。
某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特殊的名称被给予整数界限上的2、4、6、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合本发明)实施。参考图11,体现本发明的软件程序代码可典型地由主系统5000的处理器从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这样的其他系统的用户使用。
软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上和/或体现软件程序代码或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执行。
图15示出了可在其中实施本发明的代表性工作站或服务器硬件系统。图12的系统5020包括代表性基本计算机系统(basecomputersystem)5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连接并使能处理器5026和系统5021的其他组件之间的通信的总线。总线将处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括磁介质、CD、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化输入垫(digitizedentrypad)等。总线也可经由显示适配器将诸如LCD屏幕或监视器的显示设备5022连接到微处理器5026。
系统5021可通过能与网络5029通信5028的网络适配器与其他计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
图16示出了其中可实施本发明的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
仍然参考图16,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个连网协议连接到另一个时,需要网关。网关5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、5044。可以利用可从国际商业机器公司获得的IBMeServerTM服务器来实现网关计算机。
同时参考图15和16,可体现本发明的软件编程代码可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。
或者,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,且不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保持将被执行的机器指令的指令缓存(I-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
参考图17,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前的寻址界限。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。的指令是具有长度为2、4或6字节的CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序内循环。
典型地,使用指令获取单元5055代表处理器5026获取指令。获取单元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。
获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正被执行的指令的立即字段(immediatefield)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机器硬件(诸如控制寄存器、PSW寄存器等)中。
处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图18A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元5056、加载存储单元5060和其他5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如和、或以及异或(XOR)、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专门操作。其他电路可提供其他架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行,而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如移位、旋转、和、或以及异或,以及多种代数函数,包括加减乘除中的任何一个。一些ALU5056被设计为用于标量运算,且有些用于浮点。根据架构,数据可以是大端(bigendien)(其中最低有效字节位于最高字节地址)或小端(littleendien)(其中最低有效字节位于最低字节地址)。IBM是大端。根据架构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力,因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被描述为例如4Kbyte(千字节)块。
参考图18B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路5073通信。
一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。此处的位置典型地意味着主存储器(主存储设备)中的位置,除非另外指明。
参考图18C,处理器使用加载/存储单元5060访问存储器。加载/存储单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执行存储操作。加载/存储单元5060可以是推测性的,且可以相对于指令顺序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/分派单元5056、高速缓存/存储器接口5053或其他元件5083通信,且包括各种寄存器电路、ALU5085和控制逻辑5090以计算存储器地址并提供流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本领域所熟知的。
优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和页表(单独地或组合地),优选地,段表具有指向页表的项。在中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段表和可选的页表。转换表的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用的)多个替换算法来管理。
在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
I/O单元5054(图17)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向计算机程序呈现。在诸如来自的的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/O单元。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的大型计算机服务器以及的其他机器(例如,PowerSystems服务器和服务器)中被仿真。它们可在使用由AMDTM等制造的硬件的各种机器上运行Linux的机器中被执行。除了在下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules(见www.hercules-390.org/)或FSI(FundamentalSoftware,Inc)(www.funsoft.com/)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。
本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。尽管,仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人员在理解优选实施例的描述后将理解的。包括但不限于Beausoleil等人的标题为“MultiprocessorforHardwareEmulation”的美国专利证书号5,551,013;以及Scalzi等人的标题为“PreprocessingofStoredTargetRoutinesforEmulatingIncompatibleInstructionsonaTargetProcessor”的美国专利证书号6,009,261;以及Davidian等人的标题为“DecodingGuestInstructiontoDirectlyAccessEmulationRoutinesthatEmulatetheGuestInstructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“SymmetricalMultiprocessingBusandChipsetUsedforCoprocessorSupportAllowingNon-NativeCodetoRuninaSystem”的美国专利证书号6,308,255;以及Lethin等人的标题为“DynamicOptimizingObjectCodeTranslatorforArchitectureEmulationandDynamicOptimizingObjectCodeTranslationMethod”的美国专利证书号6,463,582,;以及EricTraut的标题为“MethodforEmulatingGuestInstructionsonaHostComputerThroughDynamicRecompilationofHostInstructions”的美国专利证书号5,790,825;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
在图19中,提供了仿真主计算机系统5092的例子,其仿真主架构的主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU)5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架构指令集的本机指令(即来自仿真程序处理器5097的本机指令),且可通过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令执行例程。被定义用于主计算机系统5000’架构的其他工具可被架构工具例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在仿真处理器5093中可获得功能(诸如通用寄存器和虚拟地址的动态转换)以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093来仿真主计算机5000’的功能。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
Claims (20)
1.一种促进计算环境的系统存储器的管理的方法,该方法包括以下步骤:
响应于执行用于使能适配器和请求向适配器分配多个直接存储器访问DMA地址空间的呼叫逻辑处理器CLP指令,所述CLP指令包括识别适配器的功能句柄,所述功能句柄具有适配器未使能指示器,使能一个或多个DMA地址空间并返回具有适配器使能指示器的功能句柄;
响应于执行指定寄存器地址转换参数操作的修改PCI功能控制MPFC指令,为适配器定义使能的一个或多个DMA地址空间的第一DMA地址空间,其中DMA地址空间被关联一个或多个地址转换表,所述一个或多个地址转换表具有第一格式;
接收来自适配器的访问系统存储器的请求;
使用在请求中提供的请求者标识符和地址空间标识符以选择在访问中使用的DMA地址空间,所述DMA地址空间选自为适配器使能的一个或多个DMA地址空间,其包括:为适配器选择另一DMA地址空间,将一个或多个其他地址转换表关联至所述另一DMA地址空间,所述一个或多个其他地址转换表具有第二格式,所述第二格式不同于所述第一格式。
2.如权利要求1所述的方法,其中所述DMA地址空间标识符包括一个或多个位,以及其中该方法还包括:响应于执行用于查询群组的CLP指令,确定适配器提供的地址的哪一个或哪些个位是DMA地址空间标识符的一个或多个位。
3.如权利要求1所述的方法,其中所述使用的步骤包括:使用请求者标识符和DMA地址空间标识符以定位在与适配器相关的数据结构中的项,所述项提供关于DMA地址空间的一个或多个特征。
4.如权利要求3所述的方法,其中所述项位于与适配器和系统存储器耦合的输入/输出集线器的设备表中。
5.如权利要求1所述的方法,其中所述第一格式包括地址转换格式的第一变形,以及所述第二格式包括地址转换格式的第二变形。
6.如权利要求1所述的方法,其中所述第二格式具有与所述第一格式不同的地址转换格式的类型。
7.如权利要求1所述的方法,其中所述适配器包括适配器功能模块,以及其中从适配器功能模块接收所述请求,所述适配器功能模块具有为其分配的多个DMA地址空间。
8.如权利要求1所述的方法,其中所述DMA地址空间标识符包括在请求中提供的地址的位,其中所述位的第一值与请求者标识符组合指示第一DMA地址空间,以及所述位的第二值与请求者标识符组合指示第二DMA地址空间。
9.如权利要求1所述的方法,其中所述DMA地址空间标识符包括请求中提供的地址的一个或多个位。
10.如权利要求1所述的方法,其中该方法还包括:
接收来自适配器的另一请求;和
使用在请求中提供的另一请求者标识符和另一DMA地址空间标识符以选择另一DMA地址空间,其中所述DMA地址空间具有与其相关联的第一地址转换格式,以及所述另一DMA地址空间具有与其相关联的第二地址转换格式,所述第一地址转换格式不同于所述第二地址转换格式。
11.一种促进计算环境的系统存储器的管理的系统,该系统包括:
用于响应于执行用于使能适配器和请求向适配器分配多个直接存储器访问DMA地址空间的呼叫逻辑处理器CLP指令,所述CLP指令包括识别适配器的功能句柄,所述功能句柄具有适配器未使能指示器,使能一个或多个DMA地址空间并返回具有适配器使能指示器的功能句柄的装置,其中DMA地址空间被关联一个或多个地址转换表,所述一个或多个地址转换表具有第一格式;
用于响应于执行指定寄存器地址转换参数操作的修改PCI功能控制MPFC指令,为适配器定义使能的一个或多个DMA地址空间的第一DMA地址空间的装置;
用于接收来自适配器的访问系统存储器的请求的装置;和
用于使用在请求中提供的请求者标识符和DMA地址空间标识符以选择在访问中使用的DMA地址空间的装置,所述DMA地址空间选自为适配器使能的一个或多个DMA地址空间,其包括:用于为适配器选择另一DMA地址空间,将一个或多个其他地址转换表关联至所述另一DMA地址空间的装置,所述一个或多个其他地址转换表具有第二格式,所述第二格式不同于所述第一格式。
12.如权利要求11所述的系统,其中所述DMA地址空间标识符包括一个或多个位,其中该系统还包括:用于响应于执行用于查询群组的CLP指令,确定适配器提供的地址的哪一个或哪些个位是DMA地址空间标识符的一个或多个位的装置。
13.如权利要求11所述的系统,其中所述用于使用在请求中提供的请求者标识符和DMA地址空间标识符以选择在访问中使用的DMA地址空间的装置包括:用于使用请求者标识符和DMA地址空间标识符以定位在与适配器相关的数据结构中的项的装置,所述项提供关于DMA地址空间的一个或多个特征。
14.如权利要求13所述的系统,其中所述项位于与适配器和系统存储器耦合的输入/输出集线器的设备表中。
15.如权利要求13所述的系统,其中所述第一格式包括地址转换格式的第一变形,以及所述第二格式包括地址转换格式的第二变形。
16.如权利要求13所述的系统,其中所述第二格式具有与所述第一格式不同的地址转换格式的类型。
17.如权利要求13所述的系统,其中所述适配器包括适配器功能模块,以及其中从适配器功能模块接收所述请求,所述适配器功能模块具有为其分配的多个DMA地址空间。
18.如权利要求13所述的系统,其中所述DMA地址空间标识符包括在请求中提供的地址的位,其中所述位的第一值与请求者标识符组合指示第一DMA地址空间,以及所述位的第二值与请求者标识符组合指示第二DMA地址空间。
19.如权利要求13所述的系统,其中所述DMA地址空间标识符包括请求中提供的地址的一个或多个位。
20.如权利要求13所述的系统,其中该系统还包括:
用于接收来自适配器的另一请求的装置;和
用于使用在请求中提供的另一请求者标识符和另一DMA地址空间标识符以选择另一DMA地址空间的装置,其中所述DMA地址空间具有与其相关联的第一地址转换格式,以及所述另一DMA地址空间具有与其相关联的第二地址转换格式,所述第一地址转换格式不同于所述第二地址转换格式。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US12/821,174 US9195623B2 (en) | 2010-06-23 | 2010-06-23 | Multiple address spaces per adapter with address translation |
| US12/821,174 | 2010-06-23 | ||
| PCT/EP2010/067024 WO2011160708A1 (en) | 2010-06-23 | 2010-11-08 | Multiple address spaces per adapter |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| HK1180795A1 HK1180795A1 (zh) | 2013-10-25 |
| HK1180795B true HK1180795B (zh) | 2017-03-17 |
Family
ID=
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP2430552B1 (en) | Multiple address spaces per adapter | |
| EP2585925B1 (en) | Runtime determination of translation formats for adapter functions | |
| US9626298B2 (en) | Translation of input/output addresses to memory addresses | |
| HK1180795B (zh) | 促進計算環境的系統存儲器的管理的方法 | |
| HK1180793B (zh) | 輸入/輸出地址到存儲器地址的轉換 | |
| HK1180803B (zh) | 在計算環境中控制對適配器的訪問的方法和系統 | |
| HK1180794B (zh) | 與訪問地址空間並行地對地址空間調整大小 | |
| HK1180796B (zh) | 將消息信號中斷轉換為i/o適配器事件通知 | |
| HK1180801A (zh) | 用於執行有選擇地修改適配器功能參數的指令的方法、用於相同操作的計算機系統和計算機程序產品 | |
| HK1180803A1 (zh) | 在計算環境中控制對適配器的訪問的方法和系統 | |
| HK1180796A1 (zh) | 將消息信號中斷轉換為i/o適配器事件通知 | |
| HK1180802B (zh) | 用於與適配器進行通信的加載指令的方法和系統 | |
| HK1180794A1 (zh) | 與訪問地址空間並行地對地址空間調整大小 | |
| HK1180802A1 (zh) | 用於與適配器進行通信的加載指令的方法和系統 |