CN101165664B - 用于在数据处理系统中管理地址转换的方法和装置 - Google Patents

用于在数据处理系统中管理地址转换的方法和装置 Download PDF

Info

Publication number
CN101165664B
CN101165664B CN2007101533287A CN200710153328A CN101165664B CN 101165664 B CN101165664 B CN 101165664B CN 2007101533287 A CN2007101533287 A CN 2007101533287A CN 200710153328 A CN200710153328 A CN 200710153328A CN 101165664 B CN101165664 B CN 101165664B
Authority
CN
China
Prior art keywords
device driver
address
data structure
atpt
end points
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2007101533287A
Other languages
English (en)
Other versions
CN101165664A (zh
Inventor
D·F·莫特尔
R·J·雷西奥
C·A·萨尔茨伯格
S·M·瑟伯尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN101165664A publication Critical patent/CN101165664A/zh
Application granted granted Critical
Publication of CN101165664B publication Critical patent/CN101165664B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Bus Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

提供了一种用于与诸如InfiniBand TM主机通道适配器的存储器注册使能的适配器进行通信的装置和方法。通过该装置和方法,可以由设备驱动器调取设备驱动器服务,用于初始化根联合体的地址转换数据结构中的地址转换条目。由设备驱动器将注册修改符和设备驱动器存储器数据结构的地址传递到设备驱动器服务。设备驱动器服务可以在与根联合体相关联的地址转换数据结构中创建地址转换数据结构条目,并在适配器的存储器注册(MR)地址转换数据结构中创建MR地址转换条目。然后,可以使用MR ATPT数据结构和I/O操作来旁路与根联合体相关联的地址转换数据结构。

Description

用于在数据处理系统中管理地址转换的方法和装置
技术领域
本申请通常涉及改进的数据处理系统和方法。更具体地,本申请涉及使用高速缓存的地址转换与存储器注册使能的适配器进行通信的装置和方法。
背景技术
在具有当前的外设组件互连(PCI)协议的某些系统上,当执行直接存储器访问(DMA)操作的时候,使用地址转换和保护表(ATPT)来执行地址转换和访问检查。尽管ATPT已经使用了几十年,它们对于较低端系统来说是新的,并且通过许多其他名称为人所知,诸如直接存储器访问(DMA)重映射资源或者输入/输出存储器管理单元(IOMMU)。ATPT存储条目,用于将在DMA事务中使用的PCI总线地址转换为用于访问实际存储器资源的实际存储器地址。在ATPT中的条目存储保护信息,该保护信息标识哪些设备可以访问存储器的相应部分、以及这样的设备可以在存储器的这些部分上执行的特殊操作。
最近,PCI-SIG(www.pcisig.com/home)已经处于对允许驻留在ATPT中的地址转换高速缓存在PCI系适配器中的机制进行标准化的过程中。这些机制公知为地址转换服务(ATS)。ATS允许PCI系适配器针对未转换的PCI总线地址请求转换,其中在支持ATS的系统上,这种请求的成功完成可将已转换的(即实际存储器地址)地址返回到PCI系适配器。然后,ATS允许PCI系适配器将在DMA操作中使用的PCI总线地址标记为已转换。然后支持ATS的系统将使用已转换的地址以旁路ATPT。ATS还提供一种机制,通过该机制主机侧(例如,硬件或者虚拟化媒介)可使先前所广告的地址转换无效。
图1是示出了用于使用ATPT和PCI express(PCIe)通信协议执行DMA操作的传统机制的示范性图示。描绘的例子还示出了上述PCIe地址转换服务(ATS),其通过PCIe端点(诸如使用ATS执行地址转换操作的PCIe输入/输出(I/O)适配器)来调取(invoke)。ATS功能在PCIe端点和主机系统的根联合体之中构建,如下所述。有关PCIe ATS的更多信息,请参考可从外设组件互连特别兴趣组(PCI-SIG)网站www.pcisig.com处获得的PCIe ATS规范。
如图1中所示,主机CPU和存储器110借助于系统总线115耦合到PCIe根联合体120,该PCIe根联合体120包含地址转换和保护表(ATPT)130。PCIe根联合体120接着经由PCIe链路135耦合到一个或者多个PCIe端点140(在PCIe规范中术语“端点”用于指支持PCIe的I/O适配器)。根联合体120指示I/O层次的根,其将CPU/存储器连接到PCIe端点140。根联合体120包括主机桥(host bridge)、零个或者多个根联合体集成的端点、零个或者多个根联合体事件采集器、以及一个或者多个根端口。每个根端口支持分离的I/O层次。I/O层次可以包括根联合体120、零个或者多个互联交换机和/或桥(其包括交换机或者PCI结构)、以及诸如端点140的一个或者多个端点。例如,PCIe交换机可以用以增加诸如附加到根联合体120的端点140的PCIe端点的数目。有关PCI和PCIe的更多信息,请参考可从PCI-SiG网站www.pcisig.com处获得的PCI和PCIe规范。
PCIe端点包括内部路由电路142、配置管理逻辑144、一个或者多个物理功能(PF)146以及零个或者多个虚拟功能(VF)148-152,其中每个VF关联于PF。ATS允许每个虚拟功能使用地址转换高速缓存(ATC)160-164,用于将已转换的PCI存储器地址高速缓存,并且当执行DMA操作的时候,该PCI存储器地址可由虚拟功能使用以旁路主机ATPT130。
在操作中,PCIe端点140可以调取PCIe ATS事务以请求将给定PCI总线地址转换成为系统总线地址,并且指示后续事务(例如DMA操作)已经转换并且可旁路ATPT。根联合体120可以调取PCIe ATS事务以使得被提供给PCIe端点140的转换无效,从而转换不再由PCIe端点140的物理和/或虚拟功能所使用。
例如,当将要执行DMA操作的时候,可以在处理DMA操作的特殊虚拟功能148-152的ATC 160-164中查找DMA操作的地址。如果在ATC 160-164中没有出现地址转换,则可由PCIe端点140向根联合体120提出转换请求。根联合体120则可以使用ATPT 130执行地址转换并将已转换的地址返回PCIe端点140。PCIe端点140则可以在对应于处理DMA操作的物理和/或虚拟功能的适当ATC
160-164中存储该转换。使用已转换的地址可以将DMA操作传递到系统总线115上。
如果在ATC 160-164中已经存在此地址的转换,则已转换的地址与DMA操作一起使用。在DMA头部中可以设置一个位来指示该地址已经转换并且针对此DMA根联合体120中的ATPT 130可以被旁路。作为结果,在PCIe端点140与主机CPU和存储器110之间经由PCIe链路135和系统总线115来直接执行DMA操作。访问检查仍然可以由根联合体120执行,用以确保PCIe端点的虚拟功能的特殊BDF号对应于允许以由DMA操作请求的方式来访问该地址的BDF。
一段时间之后,如果提供到PCIe端点140的转换不再由PCIe端点140所使用,诸如当转换已经在ATPT 130内部变化时,根联合体120必须向PCIe端点140发布ATS无效请求。PCIe端点140并不立刻冲刷针对该无效地址的所有未决请求。相反,PCIe端点140等待引用无效的已转换的地址的所有未完成的读取请求退回(retire),并释放ATC 160-164中的转换,诸如通过设置一个位来将ATC 160-164中的条目标记为无效。PCIe端点140向根联合体120返回ATS无效完成消息,指示ATC 160-164中转换无效的完成。PCIe端点140确保无效完成指示在使用无效地址的任何先前发出的写入之后到达根联合体120。
通常,ATPT 130可以提供为系统存储器中的树状结构转换表。针对计算系统的每个PCI总线/设备/功能(BDF)可以提供不同的树状结构。使用这些ATPT数据结构,设备可以共享设备地址空间,并且设备可以具有专用的地址空间。由此,不是所有的设备可以在系统存储器的所有地址空间上执行所有的DMA操作。
作为DMA事务的一部分来同步进行ATPT 130的访问。这包括使用一种耗时的转换机制用于:将DMA事务未转换的PCI总线存储器地址转换至用以访问主机的存储器的已转换的实际存储器地址;以及检查ATPT以确保提交DMA事务的设备具有足够的许可用于访问已转换的实际存储器地址、并且具有足够的许可以在已转换的实际存储器地址上执行希望的DMA操作。
作为访问ATPT 130的部分,必须标识对应于特殊BDF的正确的ATPT树状数据结构、并且必须遍历(walk)树状数据结构,以便执行转换和访问检查。ATPT树状数据结构的位置可能需要一次或者两次访问来找到关联于BDF的树状数据结构的地址。一旦发现,则可以采取对树状数据结构的3次或者4次访问来遍历树。由此,此转换和访问检查是造成与DMA操作关联的大量等待时间的原因。这些等待时间可以导致端点的严重问题,端点需要低的通信等待时间。
作为减轻这些等待时间的一种方式,在PCIe端点140中实现的ATS使用ATC 160-164来存储已经执行的地址转换,从而不必再次执行这些转换。由此,通过ATPT和ATC的结合,PCI ATS以此方式执行地址转换和访问检查,以便减少与DMA操作相关联的等待时间。尽管PCI SiG已经阐明针对PCIe ATS的规范,但PCI SiG没有指定在实现PCIe ATS的系统中怎样分配用于使用ATS执行地址转换和管理诸如ATPT和ATC的ATS结构的责任。
发明内容
示例性实施方式提供了一种方法和装置,用于使用高速缓存的地址转换来与存储器注册使能的适配器或者端点进行通信。通过该装置和方法,在设备驱动器和设备驱动器服务之间分配用于地址转换信息的高速缓存管理的责任。设备驱动器可以提供在不受信任的任务逻辑分区(LPAR)中,而设备驱动器服务可以提供在受信任的虚拟化媒介中,诸如虚拟化媒介操作系统、管理程序、服务分区等。
设备驱动器负责管理用于在LPAR和PCIe端点中应用之间传送请求的队列,反之亦然。设备驱动器进一步负责经由设备驱动器服务调取存储器管理。设备驱动器服务负责管理由PCIe端点可访问的存储器,包括PCIe端点的地址转换高速缓存(ATC)以及地址转换和保护表(ATPT)。
通过在设备驱动器和设备驱动器服务之间划分与PCIe端点进行通信的责任,在OS内部运行的设备驱动器不能向PCIe端点提供与另一OS的存储器相关联的转换。作为结果,维护了与系统虚拟化相关联的受信任模式。即,将地址转换高速缓存管理责任放置在设备驱动器服务中可以防止一个OS请求端点对另一OS的存储器执行DMA操作。
在一个示意性实施方式中,在主机系统的不受信任的任务逻辑分区(LPAR)系统镜像中设备驱动器的初始化期间,用于PCIe端点的设备驱动器调取设备驱动器服务(在下文中简单称为“驱动器服务”)以针对适配器资源来初始化地址转换和保护表(ATPT)条目,并向设备驱动器返回PCI存储器地址,诸如工作、完成和事件队列,其中该适配器资源驻留在系统存储器中,并且PCIe端点通过直接存储器访问(DMA)操作可访问该适配器资源。。设备驱动器和PCIe端点通过该命令、响应和事件队列通信。在此文档中,这些队列将称作“设备驱动器的队列”。
实际上,设备驱动器服务钉住(pin)用于设备驱动器的队列的主机存储器,为设备驱动器的队列分配DMA地址,针对这些DMA地址来对ATPT条目编程,并使能一个位,该位表示ATPT条目可高速缓存,即,在PCIe端点上的队列上下文(例如,地址转换高速缓存)中可高速缓存。然后,设备驱动器服务将未转换的PCIe存储器地址(即,DMA地址)返回到设备驱动器用于ATPT条目,例如,用于设备驱动器的队列的开始地址,其与偏移一起可以用于标识队列中的特殊条目。未转换的PCIe存储器地址是这样的地址,它不处于系统的存储器空间中,而且在其用以访问系统存储器之前必须被转换。
使用示意性实施方式的机制,这个未转换的PCIe存储器地址可以提供到PCIe端点、并且由PCIe端点所使用以向根联合体发送转换请求。即,PCIe端点可请求根联合体来返回与未转换的PCIe存储器地址相关联的一个或多个已转换的PCIe存储器地址。然后,PCIe端点可以将一个或多个已转换的PCIe存储器地址存储在与设备驱动器的队列相关联的上下文中,例如,与PCIe端点中的一个或者多个虚拟功能相关联的一个或者多个地址转换高速缓存。
将未转换的PCIe存储器地址的转换存储在适配器的设备驱动器队列上下文中允许在目标为设备驱动器队列条目的DMA时,PCIe端点旁路根联合体的ATPT。由此,当根联合体接收到标记为已转换的PCIe DMA事务的时候,根联合体验证转换高速缓存针对该端点而使能,并且使用已转换的PCIe存储器地址直接访问主机的实际存储器。
在之后的某时间点处,诸如从系统移除PCIe端点之后,从系统移除与设备驱动器相关联的功能(物理的或者虚拟的)之后等,需要使得对应于未转换的PCIe存储器地址的ATC条目和ATPT条目无效。为了执行这种无效,设备驱动器或者某较高级别的实体(诸如管理程序管理组件)调取设备驱动器服务以将主机存储器解钉(unpin)并释放DMA地址,即,未转换的PCIe存储器地址。然后,设备驱动器服务清除对应于未转换的PCIe存储器地址的ATPT条目,并且根联合体向PCIe端点发布ATC条目无效请求。然后,PCIe端点执行操作以使得对应于未转换的PCIe存储器地址的任何ATC条目无效,并且在不再使用未转换的PCIe存储器地址之后,向设备服务返回ATC无效完成响应。然后,设备服务将控制返回给设备驱动器。在可替换实现中,设备驱动器服务可以向PCIe端点发布ATC条目无效请求,并且在PCIe端点完成ATC条目无效之后,设备驱动器服务可以清除ATPT条目并返回到设备驱动器。
如上所提及,可以利用示意性实施方式的机制来建立ATPT条目,用于在系统镜像、运行在系统镜像中的应用等与PCIe端点之间使用一个或者多个队列数据结构进行的通信中。在示意性实施方式的如此实现中,以上文先前所述的方式将用于一个或者多个队列数据结构的ATPT条目初始化。在PCIe端点的初始化阶段期间,PCIe端点验证设备驱动器已经初始化。例如,这可以通过从PCIe端点的PCI配置空间、重要产品数据(VPD)字段、或者存储器映射的输入/输出(MMIO)字段读取信息来执行。
设备驱动器可以向PCIe端点提供一个或者多个队列的开始和结束地址、开始地址和长度等。例如,设备驱动器可以将这些地址写入对应于队列配置空间的PCIe端点的PCI配置空间字段、VPD或者MMIO字段。这些地址是未转换的PCIe地址。PCIe端点可以调取用于队列地址的已转换的PCIe ATS请求。作为结果,根联合体可以使用ATPT来执行地址转换并将结果返回到PCIe端点,其可以将已转换的地址在队列上下文中高速缓存,用于从一个或者多个队列获取项目使用,并将项目放置在一个或者多个队列中。
在一个示意性实施方式中,设备驱动器生成用于与PCIe端点进行通信的队列数据结构。队列数据结构可以包括例如工作、完成以及事件队列。工作队列数据结构可以发送工作队列、接收工作队列或者共享接收工作队列。这些队列数据结构可以以包括链接的列表队列、循环缓冲队列等的任何方式配置。
在生成这些队列数据结构时,作为由设备驱动器执行操作的部分,设备驱动器调取设备驱动器服务以针对队列数据结构来对ATPT条目编程,并且向设备驱动器返回用于队列的未转换的PCIe地址(即,DMA地址)。ATPT条目的编程可以包括:钉住用于队列数据结构的主机存储器空间,利用用于从未转换PCIe地址到系统存储器地址的转换信息来对根联合体的ATPT中的ATPT条目进行编程,并在ATPT条目中设置一个高速缓存使能位,该位指示对应于ATPT条目的地址转换在PCIe端点的ATC中是可高速缓存的。在执行此操作之后,用于一个或多个ATPT条目的未转换的PCIe地址返回到设备驱动器。这些未转换的PCIe地址可以标识例如队列数据结构的开始和结束地址。
由设备驱动器向PCIe端点提供未转换的PCIe地址,诸如通过将地址写入PCIe端点中的队列配置空间。队列配置空间可以是例如PCI配置空间、一个或者多个VPD字段、一个或者多个MMIO字段等。响应于接收到这些用于队列数据结构的未转换的PCIe地址,PCIe端点可以向根联合体发布针对队列地址的PCIe ATS请求。作为结果,根联合体可以执行针对队列数据结构的未转换PCIe地址的访问检查以及地址转换,并将已转换的地址返回PCIe端点。PCIe端点则可以将这些地址转换存储在由PCIe端点的ATC提供的队列上下文中。
作为上文的结果,由于PCIe端点现在访问用于与队列数据结构相关联的地址的转换,所以PCIe端点现在可以执行DMA操作以将队列条目提交到队列数据结构、或者从队列数据结构获取队列条目,而不必经历根联合体ATPT地址转换。
一旦PCIe端点不再使用队列数据结构,则可以以上文先前所述的方式使得对应于用于这些队列数据结构的地址的ATPT和ATC条目无效。例如,当PCIe端点将要从系统中移除时、在关联于设备驱动器的功能(物理的或者虚拟的)从主机系统中移除之后等情况下,可以执行这种无效。这种无效的处理可以包括:设备驱动器调取设备驱动器服务以将对应于队列数据结构的主机系统存储器解钉,释放用于这些队列数据结构的DMA地址,清除用于这些DMA地址的ATPT条目,以及向PCIe端点发布ATC条目无效请求。当由PCIe端点完成ATC条目无效操作的时候,设备驱动器服务将控制返回给设备驱动器,并且此时,可以从系统移除PCIe端点。
如上所述,可以使用示意性实施方式的机制来在设备驱动器中建立队列数据结构,以及数据处理系统的根联合体中建立该队列数据结构对应的ATPT条目。一旦通过上述机制将这种队列数据结构初始化,则可以通过使用这些队列数据结构和ATPT条目来执行在PCIe端点和主机系统的逻辑分区的应用实例、系统镜像等之间的通信。
可以由不同类型的PCIe端点来使用这些队列数据结构和对应的ATPT条目。例如,PCIe端点可以是连网的适配器,诸如以太网适配器、结构通道适配器、InfiniBandTM适配器等,用于通过一个或者多个数据网络来与其他设备进行通信。通过这种连网适配器,正在发送或者接收的数据被放置到与主机系统的设备驱动器相关联的缓冲器之中,并且根据数据是否正在接收或者发送而由主机系统的系统镜像或者PCIe适配器来获取。提供了用于建立队列数据结构以及将对应于队列的已转换的地址进行高速缓存的示意性实施方式的机制,从而可以使用这些已转换的地址和DMA操作来将数据直接发送到传送和/或接收缓冲器,而不必在数据传送/接收的时候经历根联合体的地址转换。由此,该机制降低了关联于经由网络适配器的数据传送和接收的等待时间。
除了由连网适配器使用以外,示意性实施方式的机制还进一步由其他类型的PCIe端点使用,用于与本地可用设备通信。例如,PCIe端点可以是用于与附加至PCIe端点的存储设备直接通信的小型组件系统接口(SCSI)适配器。可以使用示意性实施方式的机制,通过提供将用于SCSI读取/写入的地址信息高速缓存在SCSI适配器中的机制,来降低SCSI适配器的DMA读取等待时间。
除了网络适配器和SCSI适配器以外,PCIe端点可以是其他类型的适配器,包括支持存储器注册的适配器,诸如InfiniBandTM主机通道适配器(HCA)、RNIC等。除了对根联合体中的ATPT条目编程以外,示意性实施方式的机制可以进一步对用于在执行主机系统和其他设备之间的通信(例如,直接存储器访问(DMA)操作)中使用的PCIe端点中的存储器注册(MR)ATPT条目编程。
在一个示意性实施方式中,提供了一种用于管理地址转换的方法。该方法可以包括:由设备驱动器调取设备驱动器服务,用于初始化数据处理系统中的根联合体的地址转换数据结构中的地址转换条目,以及从设备驱动器向设备驱动器服务传递注册修改符(modifier)和设备驱动器存储器数据结构的地址。该方法可以进一步包括:由设备驱动器服务在与根联合体相关联的地址转换数据结构中创建一个或者多个地址转换数据结构条目。一个或者多个地址转换数据结构条目可以指定从未转换地址到用以直接访问所述设备驱动器存储器数据结构的已转换地址的转换。该方法还包括:由设备驱动器服务在适配器的MR ATPT数据结构中创建一个或者多个存储器注册(MR)地址转换和保护表(ATPT)条目,其与一个或者多个地址转换数据结构条目相对应。MR ATPT数据结构可以和I/O操作一起使用来旁路与根联合体相关联的地址转换数据结构。
创建一个或者多个MR ATPT条目可以包括:向适配器注册与设备驱动器存储器数据结构相关联的被钉住的存储器区域,以及利用用于设备驱动器存储器数据结构的一个或者多个地址来填充MR
ATPT数据结构条目的一部分。创建一个或者多个MR ATPT条目可以进一步包括:向适配器通知,在MR ATPT的较低部分中的一个或者多个地址是已转换地址,这些已转换地址可以在直接存储器访问(DMA)事务中使用,以旁路与根联合体相关联的地址转换数据结构。将MR ATPT条目无效可以包括向适配器解注册(de-register)设备驱动器存储器数据结构。
该方法可以进一步包括由设备驱动器调取设备驱动器服务,用于将数据处理系统的根联合体的地址转换数据结构中的地址转换数据结构条目无效。此外,设备驱动器服务可以将数据处理系统的根联合体的地址转换数据结构中的地址转换条目、以及在适配器上的一个或者多个对应的MR ATPT条目无效。
创建一个或者多个MR ATPT条目可以包括向适配器注册与设备驱动器存储器数据结构相关联的先前钉住的存储器区域。MRATPT数据结构条目的一部分可以利用用于设备驱动器存储器数据结构的一个或者多个地址来填充。可以通知适配器,在MR ATPT数据结构的较低部分中的一个或者多个地址是未转换地址,在DMA事务中使用该地址之前将会对其进行转换,所述DMA事务旁路与根联合体相关联的地址转换数据结构。对于由设备驱动器服务创建的MRATPT条目,适配器可以针对与MR ATPT条目相关联的一个或者多个地址执行转换请求,并可以利用一个或者多个已转换地址来填充MR ATPT数据结构的一部分,该一个或者多个已转换地址与关联于MR ATPT条目的一个或者多个未转换地址相对应。
使用MR ATPT数据结构和I/O操作来旁路与根联合体相关联的地址转换数据结构,这可以包括使用适配器的MR ATPT数据结构条目中的一个或者多个已转换地址来处理与MR ATPT数据结构条目相关联的直接存储器访问(DMA)事务。DMA事务可以使用已转换地址而将数据从适配器放置到设备驱动器存储器数据结构之中,而在将数据放置到设备驱动器存储器数据结构之中的期间不调取根联合体的地址转换操作。DMA事务可以与以下处理相关联:发送WQE、RDMA写入WQE、RDMA读取WQE、接收WQE、进入的RDMA写入或者进入的RDMA读取。
该方法可以进一步包括从设备驱动器服务向设备驱动器返回与设备驱动器存储器数据结构相关联的一个或者多个未转换地址。设备驱动器服务可以进一步将一个或者多个注册修改符返回到设备驱动器。
可以在数据处理系统的不受信任的逻辑分区或者系统镜像之一中提供设备驱动器,并且设备驱动器服务提供在受信任的虚拟化媒介中。受信任的虚拟化媒介是虚拟化媒介操作系统、管理程序或者服务分区之一。
在另一示意性实施方式中,提供了包括具有计算机可读程序的计算机可用介质的计算机程序产品。当在计算设备上执行的时候,计算机可读程序使得计算设备执行关于方法示意性实施方式而在上文概括的各种操作、以及操作的结合。
在又一示意性实施方式中,提供了一种装置。该装置可以包括处理器以及耦合到该处理器的适配器。处理器可以由设备驱动器调取设备驱动器服务,用于初始化数据处理系统的根联合体的地址转换数据结构中的地址转换条目,以及从设备驱动器向设备驱动器服务传递注册修改符和设备驱动器存储器数据结构的地址。处理器可以进一步由设备驱动器服务在与根联合体相关联的地址转换数据结构中创建一个或者多个地址转换数据结构条目,该一个或者多个地址转换数据结构条目指定从未转换地址到用以直接访问所述设备驱动器存储器数据结构的已转换地址的转换。此外,处理器可用由设备驱动器服务在适配器的MR ATPT数据结构中创建与一个或者多个地址转换数据结构条目相对应的一个或者多个存储器注册地址转换和保护表(ATPT)条目。适配器可以使用I/O操作和MR ATPT数据结构旁路与根联合体相关联的地址转换数据结构。
本发明的这些以及其他特征和优点将在以下本发明的示范性实施方式的详细说明中描述,或者对本领域普通技术人员而言,通过以下本发明的示范性实施方式的详细说明,发明的这些以及其他特征和优点将变得显而易见。
附图说明
当结合附图阅读的时候,通过参考以下示意性实施方式的详细描述,将更好地理解本发明和其中使用的优选模式以及进一步的目的和优点,其中:
图1是示出了用于使用ATPT和PCI express(PCIe)通信协议执行DMA操作的传统机制的示范性图示;
图2是示出了分布式数据处理环境的示范性图示,其中可以实现示意性实施方式的示范性方面;
图3是示出了数据处理设备的示范性图示,其中可以实现示意性实施方式的示范性方面;
图4是示出了关于设备驱动器和设备驱动器服务的一个示意性实施方式的操作的示范性图示;
图5是示出了根据一个示意性实施方式的利用DMA操作处理已转换的和未转换的PCIe地址的示范性图示;
图6是根据一个示意性实施方式的流程图,其概括了用于对用于DMA地址的ATPT条目进行初始化的示范性操作;
图7是根据一个示意性实施方式的流程图,其概括了用于使用于DMA地址的ATPT条目和ATC条目无效的示范性操作;
图8是根据一个示意性实施方式的流程图,其概括了用于处理DMA操作中的已转换的和未转换的PCIe地址的示范性操作;
图9示出了用于高速缓存针对PCIe端点队列的地址转换的示意性实施方式的实现;
图10是根据一个示意性实施方式的流程图,其概括了用于初始化主机系统和PCIe端点之间通信的队列数据结构的示范性操作;
图11是一个示范性操作的图示,其示出了使用工作队列条目(被称作“工作队列条目”或者WQE)从PCIe端点传递主机系统的缓冲器中数据的操作;
图12是示出了使用WQE经由PCIe端点传送数据的操作的示范性图示;
图13A至图13B描绘了根据一个示意性实施方式的流程图,其概括了用于接收网络适配器的操作的示范性操作;
图14A至图14B描绘了根据一个示意性实施方式的流程图,其概括了用于传送网络适配器的操作的示范性操作;
图15是根据一个示意性实施方式的示范性图示,其示出了用于使用Verb ATPT执行与主机系统的DMA的操作;
图16A至图16C描绘了根据一个示意性实施方式的流程图,其概括了用于将存储器向PCIe端点注册的示范性操作。
具体实施方式
示意性实施方式提供了这样的机制,通过使用该机制,通过使用高速缓存的地址转换信息来促进进行与存储器注册使能的适配器或者端点的通信。将地址转换信息在适配器或者端点中进行这样的高速缓存可以促进在适配器或者端点与设备驱动器之间直接进行直接存储器访问(DMA)事务。
这样,示意性实施方式可以在其中可以使用设备驱动器和设备驱动器服务执行DMA操作的任何计算设备中实现,如下文所述。这种计算设备可以采取多种形式并且可以具有各种配置。在下文中,图2至图3提供了其中可以实现示意性实施方式的示范性方面的数据处理环境和数据处理设备的例子。应该理解,图2至图3仅仅是示范性的,并且并非旨在于限制关于其中可以使用示意性实施方式机制的数据处理环境和设备的类型。
现在参考附图,尤其是参考图2至图3,其中提供了可以实现本发明实施方式的数据处理环境的示范性图示。应该理解,图2至图3仅仅是示范性的并且并非旨在声明或者暗示关于可以实现本发明的方面或者实施方式的环境的任何限制。在不偏离本发明的精神和范围的情况下,可以对所述环境进行多种修改。
现在参考附图,图2描绘了其中可以实现示意性实施方式的方面的示范性分布式数据处理系统的图示性表示。分布式数据处理系统200可以包括其中可以实现示意性实施方式中的实施方式的计算机网络。分布式数据处理系统200包含至少一个网络202,该网络是用以在分布式数据处理系统200内部连接在一起的各种设备和计算机之间提供通信链路的介质。网络202可以包括连接,诸如有线、无线通信链路或者光缆。
在所述例子中,服务器204和服务器206随存储单元208连接到网络202。另外,客户端210、212和214也连接到网络202。这些客户端210、212和214可以是例如个人计算机、网络计算机等。在所述例子中,服务器204向客户端210、212和214提供数据,诸如引导文件、操作系统镜像、以及应用。在所述例子中,客户端210、212和214是针对服务器204的客户端。分布式数据处理系统200可以包括附加的服务器、客户端以及未示出的其他设备。
在所述例子中,分布式数据处理系统200是具有网络202的因特网,其中网络202表示使用传输控制协议/因特网协议(TCP/IP)协议族来彼此通信的网络和网关的世界范围集合。因特网的中心是在主节点或者主机计算机之间的高速数据通信线路骨干,包括对数据和消息进行路由的成千上万的商业、政府、教育以及其他计算机系统。当然,还可以实现分布式数据处理系统200以包括许多类型的网络,诸如例如内联网、局域网(LAN)、广域网(WAN)等。如上所述,图2旨在于作为一个例子,并不作为针对本发明不同实施方式的构架限制,并且因而,在图2中所示的特定单元不应被认为是关于其中可以实现本发明示意性实施方式的环境的限制。
现在参考图3,示出了其中可以实现示意性实施方式的方面的示范性数据处理系统的框图。数据处理系统300是诸如图2中的主机210的计算机的一个例子,实现用于本发明示意性实施方式的处理的计算机可用代码或者指令可以位于其中。
在所述例子中,数据处理系统200使用中心(hub)架构,其中包括北桥和存储器控制器中心(NB/MCH)302以及南桥和输入/输出(I/O)控制器中心(SB/ICH)304。处理单元306、主存储器308和图形处理器310连接到NB/MCH 302。图形处理器310可以通过加速图形端口(AGP)连接到NB/MCH 302。
在所述例子中,局域网(LAN)适配器312连接到SB/ICH 304。音频适配器316、键盘和鼠标适配器220、调制解调器322、只读存储器(ROM)324、硬盘驱动器(HDD)326、CD-ROM驱动器330、通用串行总线(USB)端口和其他通信端口232以及PCI/PCIe设备334通过总线338和总线340连接到SB/ICH 304。PCI/PCIe设备可以包括例如以太网适配器、用于笔记本计算机的PC卡、以及附加卡。PCI使用卡总线控制器,而PCIe不使用。ROM 324例如可以是快闪二进制输入/输出系统(BIOS)。
HDD 326和CD-ROM驱动器330通过总线340连接到SB/ICH304。HDD 326和CD-ROM驱动器330可以使用例如集成的驱动器电子设备(IDE)或者串行高级技术附件(SATA)接口。超级I/O(SIO)设备336可以连接到SB/ICH 204。
操作系统在处理单元306上运行。操作系统对图3中的数据处理系统300内部的各种组件进行调整并提供控制。作为客户端,操作系统可以是商业可获得的操作系统,诸如
Figure G2007101533287D00161
(Microsoft和Windows是微软公司在美国、其他国家或两者中的商标)。面向对象的编程系统(例如JavaTM编程系统)可以结合操作系统运行,并且从在数据处理系统300上执行的Java程序或应用向操作系统提供调用(Java和所有基于Java的商标是Sun微系统公司在美国、其他国家或两者中的商标)。
作为服务器,数据处理系统300可以是例如eServerTM
Figure G2007101533287D00163
计算机系统,运行在高级交互执行
Figure G2007101533287D00164
操作系统或者
Figure G2007101533287D00165
操作系统(eServer、pSeries和AIX是国际商用机器公司在美国、其他国家或两者中的商标,而Linux是Linus Torvalds在美国、其他国家或两者中的商标)上。数据处理系统300可以是在处理单元306中包括多个处理器的对称多处理器(SMP)系统。作为替换,可以使用单处理器系统。
针对操作系统、面向对象的编程系统以及应用或程序的指令位于诸如HDD 326的存储器设备上,并且可以装载到主存储器308中用于由处理单元306来执行。本发明示意性实施方式的处理可以由处理单元306使用计算机可读程序代码来执行,该计算机可读程序代码可以位于例如主存储器308、ROM 324、或者一个或多个外围设备326和330的存储器中。
总线系统(诸如图3中所示的总线338或者总线340)可以包括一个或多个总线。当然,可以使用在附加至该结构或架构的不同组件或设备之间提供数据传递的任何类型的通信结构或架构来实现总线系统。通信单元(诸如图3中的调制解调器322或网络适配器312)可以包括用以传送和接收数据的一个或多个设备。存储器可以是例如主存储器308、ROM 324或诸如在图3中NB/MCH 302中可以找到的高速缓存。
本领域普通技术人员应该理解,在图2至图3中的硬件可以根据实现而改变。其他内部硬件或外围设备,诸如闪存、等同的非易失性存储器或光盘驱动器等,可以在图2至图3中示出的硬件之外使用或代替图2至图3中示出的硬件而使用。此外,示意性实施方式的处理可以应用到先前提及的SMP系统以外的多处理器数据处理系统中,而并不背离本发明的精神和范围。
此外,数据处理系统300可以采取多个不同数据处理系统的任意一个的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或者其他通信设备、个人数字助理(PDA)等。在某些示意性例子中,例如,数据处理系统300可以是便携计算设备,其配置有闪存来提供非易失性存储器用于存储操作系统文件和/或用户生成的数据。本质上,数据处理系统300可以是任何已知的或者新近开发的数据处理系统,而并没有架构限制。
如上所提及,示意性实施方式提供了一种系统和方法,用于将端点地址转换高速缓存管理的责任分布在设备驱动器和设备驱动器服务之间。设备驱动器例如可以提供在不受信任的任务逻辑分区(LPAR)中,而设备驱动器服务例如可以提供在受信任的输入/输出(I/O)虚拟化媒介(VI)中。尽管将在示意性实施方式的描述中使用PCIe端点和PCIe通信协议,应该理解,示意性实施方式不应限制于此,并且在不偏离本发明的精神和范围的情况下,可以使用任何通信协议。
关于示意性实施方式,设备驱动器负责管理和使用用于在用户应用/库和PCIe端点之间通信的队列结构。设备驱动器进一步负责调取由设备驱动器服务提供的存储器管理服务。设备驱动器服务初始化并管理计算系统的PCIe根联合体的保护表(ATPT)和地址转换、以及PCIe端点的地址转换高速缓存(ATC)。下文将描述执行这种初始化和管理的方式。
在一个示意性实施方式中,在主机系统的逻辑分区的系统镜像中,在用于PCIe端点的设备驱动器的初始化期间,用于PCIe端点的设备驱动器调取设备驱动器服务以初始化地址转换和保护表(ATPT)条目,并将PCI存储器地址返回到设备驱动器。在一个示意性实施方式中,这些ATPT条目和PCI存储器地址与用于与PCIe适配器进行通信的一个或多个设备驱动器队列(称作“设备驱动器的队列”)相关联。
实质上,设备驱动器服务钉住(pin)用于一个或者多个队列的主机系统存储器,对一个或者多个队列分配DMA地址,对ATPT条目编程并使能一个位,该位表示ATPT条目可以高速缓存,即,可以在PCIe端点上的地址转换高速缓存中进行高速缓存。然后,设备驱动器服务针对可能使用的ATPT条目向设备驱动器返回一个或者多个未转换的PCIe存储器地址,例如,作为与一个或者多个队列(例如,队列的开始地址,以及可选的,队列的结束队列地址)相关联的地址。未转换的PCIe存储器地址是这样的地址,该地址不在系统的实际存储器地址空间中,并且在使用其访问系统的实际存储器之前必须进行转换。
使用示意性实施方式的机制,可以向PCIe端点提供未转换的PCIe存储器地址,并且该地址由PCIe端点所使用以与根联合体执行转换请求操作。即,PCIe端点可以请求根联合体返回已转换的PCIe存储器地址或者对应于未转换的PCIe存储器地址的地址。PCIe端点则可以在与设备驱动器的队列相关联的上下文中(例如,在PCIe端点中的虚拟功能的地址转换高速缓存(ATC)中)存储一个或多个已转换的PCIe存储器地址。
在适配器的设备驱动器队列上下文中存储未转换PCIe存储器地址的转换,这允许PCIe端点在目标为设备驱动器队列条目的DMA时旁路根联合体的ATPT。由此,当根联合体接收到标记为已转换的PCIe DMA事务时,根联合体将验证转换高速缓存针对端点而使能,并且使用已转换的PCIe存储器地址直接访问主机的实际存储器。
在之后的某时间点,诸如从系统移除PCIe端点之后,从系统移除与设备驱动器关联的功能(物理的或者虚拟的)等之后等等,需要使得对应于未转换的PCIe存储器地址的ATPT条目和ATC条目无效。为了执行这种无效,设备驱动器或者某些较高级别实体(诸如管理程序管理组件)调取设备驱动器服务以解钉(unpin)主机存储器并释放DMA地址,即,未转换的PCIe存储器地址。设备服务则清除对应于未转换的PCIe存储器地址的ATPT条目,并且根联合体向PCIe端点发布ATC条目无效请求。
然后PCIe端点执行操作以使得对应于未转换的PCIe存储器地址的任何ATC条目无效,并在未转换的PCIe存储器地址不再使用之后,向设备服务返回ATC无效完成响应。设备驱动器服务则将控制返回给设备驱动器。一个可替换的实现包括,使驱动器服务向PCIe端点发布ATC条目无效请求,并且在PCIe端点完成ATC条目无效之后,设备驱动器服务清除ATPT条目并返回到设备驱动器。
图4是示出了关于设备驱动器和设备驱动器服务的一个示意性实施方式的操作的示范性图示。如在图4中所示,主机系统可以具有一个或者多个逻辑分区410,在该逻辑分区中可以执行例如操作系统等的系统镜像420。可以使用系统镜像420通过访问应用库等来执行用户应用430。系统镜像420具有相关联的文件系统440,通过其可以访问文件、设备驱动器、库以及其他软件资源。在系统镜像420中可以提供设备驱动器450,用于在系统镜像420和PCIe适配器490之间进行通信。
设备驱动器450进一步具有相关联的完成队列422,通过该完成队列,用户应用430、系统镜像420等可以与PCIe端点490通信。完成队列422具有完成队列条目(CQE)424,用于与工作队列条目相关联的完成操作,其中该工作队列条目由设备驱动器450、用户应用430、系统镜像420、主机系统存储器以及其他主机系统资源传递,并且已经由PCIe端点490完成。以与完成队列422和系统镜像420相关联的方式提供门铃存储设备426,用于当完成队列422具有需要处理的完成队列条目424的时候,通知系统镜像420。可以由这种队列执行的工作的例子包括:与从PCIe端点490请求的工作系统镜像420相关联的完成处理、与由PCIe端点490传送(surface)到系统镜像420的错误或者多个事件相关联的异步事件处理等等。
类似地,PCIe端点490可以具有相关联的PCIe端点工作队列498,其中可以提供工作队列条目(WQE)499,用于向PCIe端点490通知系统镜像420、用户应用430等期望由PCIe端点490来执行的操作。PCIe端点490工作队列498可以在PCIe端点490其自身中实现,或者更普通地,如所述的那样,在由PCIe端点490可以访问的系统镜像420存储器位置中实现。在PCIe端点490中可以提供门铃存储设备496,用于向PCIe端点490通知WQE 499何时存在于PCIe端点工作队列498中以便处理。工作队列可以是:仅用于出站(outbound)工作的发送工作队列;仅用于入站(inbound)工作的接收工作队列;用于共享多个接收队列中的接收工作队列条目的共享接收工作队列;或者混合发送和接收工作队列,其中在相同队列上可以传递出站和入站工作两者。
PCIe端点490进一步具有一个或者多个物理功能(未示出)以及虚拟功能492。虚拟功能492可以进一步维护地址转换高速缓存(ATC)494以用于将已转换的地址进行高速缓存,以便例如用于执行与主机系统存储器的直接存储器访问(DMA)操作。ATC 494可以存储在PCIe端点490的设备驱动器的队列上下文中。每个虚拟功能可以具有一个或者多个工作队列、完成队列以及事件队列。
PCIe端点490经由PCI结构485耦合到主机系统,其可以包括通信链路、一个或者多个PCI交换机等。主机系统具有PCIe根联合体480用于经由PCI结构485与PCIe端点490进行通信。根联合体480维护地址转换和保护表(ATPT)482,其用于将未转换的PCIe存储器地址转换成为在系统的实际存储器地址空间中使用的已转换地址。
ATPT 482和ATC 494的管理由在输入/输出(I/O)虚拟化媒介(VI)460中提供的设备驱动器服务470执行。IOVI 460例如可以是管理程序或者其他虚拟化管理组件,诸如受信任的服务分区。当需要初始化ATC 494和ATPT 482中的条目以及使该条目无效的时候,设备驱动器服务470可以由设备驱动器450来调取。
在设备驱动器450和设备驱动器服务470之间划分用于管理主机系统和PCIe端点之间通信的责任。具体地,设备驱动器450负责管理它的一个或者多个完成队列422以及PCIe端点的一个或者多个工作队列498。设备驱动器450另外负责:当需要执行必要的功能用于初始化ATPT 482中的地址转换条目的时候,调取设备驱动器服务470;以及当PCIe端点490不再使用转换时,使得ATPT 482和ATC494中的条目无效。
在设备驱动器450的初始化期间,设备驱动器450可以针对一个或者多个队列来初始化DMA地址空间,所述一个或者多个队列诸如设备驱动器的一个或者多个完成队列422、PCIe端点的一个或者多个工作队列498(其驻留在系统镜像420中用于与PCIe端点490通信)等。接着,针对PCIe端点490的设备驱动器450调取设备驱动器服务470以初始化ATPT 482条目,用于将PCIe地址转换成为DMA地址空间地址,以访问系统存储器部分。每个ATPT条目用于连续PCI总线地址的一个集合。用于初始化地址转换和保护表条目的机制通常在现有技术中是已知的。例如,在普通转让的美国专利6,629,162中描述了用于初始化这种条目的机制。然后,设备驱动器服务470向设备驱动器450返回一个或者多个PCI存储器地址。
实际上,在所述例子中,设备驱动器服务470钉住用于一个或者多个完成队列422和PCIe端点的一个或者多个工作队列498(如果其驻留在系统镜像420中)的主机系统存储器。设备驱动器服务470向设备驱动器的一个或者多个完成队列422和PCIe端点的一个或者多个工作队列498(如果其驻留在系统镜像420中)分配DMA地址。设备驱动器服务470对ATPT条目进行编程并且使能一个位,该位表示用于设备驱动器的一个或者多个完成队列422以及PCIe端点的一个或者多个工作队列498(如果其驻留在系统镜像420中)的ATPT条目是可高速缓存的,即可高速缓存在PCIe端点490上的ATC494中。然后,设备驱动器服务470针对ATPT条目向设备驱动器450返回未转换的PCIe存储器地址。
使用示意性实施方式的机制,则可以向PCIe端点490提供未转换的PCIe存储器地址,用以向PCIe端点490通知队列422和498的位置。可以由PCIe端点490使用未转换的PCIe存储器地址来向根联合体480发送转换请求操作。即,PCIe端点490可以请求根联合体480返回与未转换的PCIe存储器地址相关联的已转换的PCIe存储器地址。然后,PCIe端点490可以将已转换的PCIe存储器地址存储在与设备驱动器的队列相关联的上下文(例如,ATC 494)中。作为结果,将未转换的PCIe存储器地址的转换存储在PCIe端点的设备驱动器队列上下文或者ATC 494中,这允许PCIe端点490在目标为设备驱动器队列条目(例如,完成队列422中的CQE 424)的DMA上旁路根联合体ATPT 482。即,当根联合体480接收标记为已转换的PCIe DMA事务的时候,其将验证转换高速缓存针对PCIe端点490而使能,并且将直接使用已转换的PCIe存储器地址访问主机系统的实际存储器。
在之后的某时间点处,诸如从系统移除PCIe端点490之后,从主机系统移除与设备驱动器450相关联的功能(物理的或者虚拟的)之后等等,需要使得对应于未转换的PCIe存储器地址的ATPT条目和ATC条目无效。为了执行这种无效,设备驱动器450、管理程序管理组件等调取设备驱动器服务470以将主机存储器解钉并释放DMA地址,即,未转换的PCIe存储器地址。然后设备驱动器服务470清除ATPT 482中对应于未转换的PCIe存储器地址的ATPT条目,例如,通过设置ATPT 482中的一个位表示该条目不再有效,或者通过将ATPT条目“置零(zero’ing)”来指示其不再有效。
然后,根联合体480向PCIe端点490发布ATC条目无效请求。然后,PCIe端点490执行操作以使得ATC 494中对应于未转换PCIe存储器地址的任何ATC条目无效。这种无效可以包括,例如,从高速缓存已转换的任何虚拟功能的队列上下文(例如,ATC 494)中移除高速缓存的转换。在未转换的PCIe存储器地址不再使用之后,即,当引用未转换PCIe存储器地址的所有未完成的DMA操作完成时,PCIe端点490向设备驱动器服务470返回ATC无效完成响应。然后,设备驱动器服务470将控制返回给设备驱动器450。在可替换实现中,设备驱动器服务470可以向PCIe端点490发布ATC条目无效请求,并且在PCIe端点490完成ATC条目无效之后,设备驱动器服务470可以清除ATPT 482中的ATPT条目并返回至设备驱动器450。
图5是示出了根据一个示意性实施方式的利用DMA操作处理已转换的和未转换的PCIe地址的示范性图示。图5中所示的操作假定,已经使用设备驱动器和设备驱动器服务初始化了用于DMA操作的适当ATPT条目,如先前所述。图5示出了从PCIe端点505发送到主机系统的CPU和存储器560的使用未转换的PCIe地址的一个DMA操作,以及从PCIe端点505发送到CPU和存储器560的使用已转换的PCIe地址的另一个DMA操作。
如图5中所示,当在PCIe端点505的虚拟功能中接收到DMA操作请求或生成DMA操作请求时,可以执行相应ATC的检查,以确定在ATC中是否存在用于未转换PCIe地址的地址转换。如果在ATC中不存在用于未转换PCIe地址的条目,则将DMA操作请求作为使用未转换PCIe地址的未转换PCIe DMA 510而转发到根联合体530。如果在ATC中可获得条目、并且该条目没有被无效,则可以使用已转换的地址代替用于DMA的未转换PCIe地址。作为结果,将使用已转换的地址520的已转换的PCIe DMA转发到根联合体530。
对于未转换PCIe DMA 510,由于未转换PCIe地址不在主机系统存储器地址空间中,有必要首先将未转换PCIe地址转换成为主机系统存储器地址。由根联合体530使用ATPT来执行此转换。另外,根联合体530根据PCIe端点505的BDF号以及ATPT中的条目来进一步执行访问检查。即,根联合体530在ATPT 540中查找对应于未转换PCIe地址的条目,获得对应于未转换PCIe地址的已转换的主机系统存储器地址、以及用于已转换的主机系统存储器地址的相应的保护信息。该保护信息可以标识哪些BDF号可以访问相应的主机系统地址、以及可以在与这些主机系统存储器地址相对应的系统存储器的部分上执行的特殊操作。
如果允许PCIe端点505访问与已转换的系统存储器地址相对应的系统存储器的部分,并且允许执行请求的DMA操作(例如,读/写),则使用已转换的系统存储器地址570将DMA操作请求转发到CPU和存储器560。如果不允许PCIe端点505访问系统存储器的部分,则可以返回错误消息,并且DMA操作请求不被转发到CPU和存储器560。
用于未转换PCIe地址的已转换的系统存储器地址可以返回到PCIe端点505。然后,PCIe端点505可以在提交DMA操作请求的虚拟功能的ATC中存储该转换,参考图4如上所述。以此方式,代替随后必须执行此转换的是,可以在PCIe端点中经由ATC访问已转换的系统存储器地址,因而节省了针对未转换的PCIe地址的ATPT转换所需的周期。
对于已转换的PCIe DMA 520,由于已经借助于PCIe端点505中的虚拟功能的ATC而将PCIe地址转换成为系统存储器地址,DMA操作可以通过根联合体530直接传递到CPU和存储器560。例如,已转换的PCIe DMA 520在DMA头部中设置(例如,由PCIe端点505设置)一个位,指示在DMA操作请求的头部中指定的地址是已转换的地址。根联合体530可以读取此位并且确定该位是否指示DMA操作请求中的地址是已转换的或者未转换的地址。
如果根联合体530确定该地址是未转换的地址,则执行上述关于未转换PCIe DMA操作请求510的操作。如果根联合体530确定该地址是已转换的地址,则根联合体530可以将DMA操作请求520传递到CPU和存储器560。可选地,仍可以根据PCIe端点505的BDF号来执行访问检查,以确保允许PCIe端点访问与已转换的系统存储器地址相对应的系统存储器部分。此访问检查可以非常简单,诸如通常检查以确定是否允许BDF号对地址转换进行高速缓存,如果允许,则检查成功。如果不允许BDF号对地址转换进行高速缓存,则该访问检查失败。
图6至图8概述了示意性实施方式的各种元素的示范性操作。应该理解,可由计算机程序指令来实现这些流程图示的每个方框、下文的流程图示、以及流程图示中方框的结合。可以向处理器或者其他可编程数据处理装置提供这些计算机程序指令以生成一个机器,以便在处理器或者其他可编程数据处理装置上执行的指令创建用于实现一个或多个流程方框中的指定功能的器件。这些计算机程序指令还可以存储在计算机可读存储器或者存储介质中,该指令可以引导处理器或者其他可编程数据处理装置以特殊方式工作,以便在计算机可读存储器或者存储介质中存储的指令产生一项产品,该产品包括实现一个或多个流程方框中指定功能的指令器件。
因而,流程图示的方框支持用于执行指定功能的器件的结合、用于执行特定功能的步骤的结合、以及用于执行特定功能的程序指令器件的结合。应该理解,流程图示的每个方框、以及流程图示中方框的结合可以通过执行特定功能或者步骤的基于专用硬件的计算机系统来实现,或者由专用硬件和计算机指令来实现。
图6是根据一个示意性实施方式的流程图,概括了对用于DMA地址的ATPT条目进行初始化的示范性操作。如在图6中所示,该操作开始于由主机系统对用于PCIe端点的设备驱动器进行初始化,作为对主机系统上系统镜像的初始化的一部分(步骤610)。主机系统调用逻辑分区中的设备驱动器,该设备驱动器接着调用I/O虚拟化媒介中的设备驱动器服务(步骤620)。设备驱动器服务钉住主机系统存储器(步骤630)。
设备驱动器服务向PCIe端点分配DMA地址(步骤640)。设备驱动器服务对用于DMA地址的ATPT条目编程,并且如果合适则在ATPT条目中设置高速缓存使能位(步骤650)。然后,设备驱动器服务向设备驱动器返回未转换的PCIe存储器地址(步骤660),并且操作终止。
图7是根据一个示意性实施方式的流程图,概括了用于使用于DMA地址的ATPT条目和ATC条目无效的示范性操作。如在图7中所示,操作开始于设备驱动器调用设备驱动器服务(步骤710)。设备驱动器服务释放DMA地址(步骤720),然后清除用于DMA地址的ATPT条目(步骤730)。
根联合体向PCIe端点发布ATC条目无效请求(步骤740)。PCIe端点使得对应于将被无效的DMA地址的ATC条目无效(步骤750)。设备驱动器服务等待ATC无效完成响应接收(步骤760)。一旦接收到ATC无效完成响应,则设备驱动器服务可以将主机系统存储器解钉(步骤770),而一旦完成ATC无效则将控制返回给设备驱动器(步骤780)。然后,操作终止。
图8是根据一个示意性实施方式的流程图,概括了用于处理DMA操作中已转换的和未转换的PCIe地址的示范性操作。如图8中所示,操作开始于在根联合体中接收DMA事务(步骤810)。根联合体确定是否设置了已转换的位(步骤820)。如果没有设置已转换的位,则根联合体使用ATPT执行全面转化和BDF号访问检查(步骤830)。
此后,接着的是操作的两个路径。在第一路径中,做出关于是否允许DMA操作的源执行已转换的DMA操作的确定,即关于访问检查是否成功完成的确定(步骤840)。如果没有,则返回错误(步骤860)。如果允许源执行已转换的DMA操作,则根联合体执行DMA(步骤850)。然后操作终止。
如果设置了已转换的位(步骤820),则可以执行可选的BDF号访问检查(步骤870)。操作旁路步骤830的地址转换而继续到步骤840。
由此,示意性实施方式提供一种机制,通过该机制调取设备驱动器服务以将主机系统的根联合体的地址转换数据结构中的地址转换初始化和使其无效。这些设备驱动器服务可以在I/O虚拟化媒介中提供,并且可以由在与系统镜像相关联的逻辑分区中提供的设备驱动器来调取。设备驱动器服务可以通过根联合体创建地址转换数据结构条目,用于将虚拟地址(例如未转换PCIe地址)转换成为系统存储器地址。此外,设备驱动器服务可以通过根联合体来从地址转换数据结构中清除地址转换条目,并通过PCIe端点将PCIe端点的任何地址转换高速缓存中的条目无效。
如上所提及,可以使用示意性实施方式的机制来建立ATPT条目,用于在系统镜像、系统镜像中运行的应用等与使用一个或者多个队列数据结构的PCIe端点之间的通信中使用。在示意性实施方式的此实现中,以上文先前所述方式将用于一个或者多个队列数据结构的ATPT条目初始化。在PCIe端点的初始化阶段期间,PCIe端点对设备驱动器已经被初始化进行验证。这可以例如通过从PCIe端点的PCI配置空间、重要产品数据(VPD)字段、或者存储器映射的输入/输出(MMIO)字段读取信息来执行。
设备驱动器可以向PCIe端点提供一个或者多个队列的开始和结束地址、开始地址和长度等等。例如,设备驱动器可以将这些地址写入对应于队列配置空间的PCIe端点的PCI配置空间字段、VPD或者MMIO字段。这些地址是未转换的PCIe地址。PCIe端点可以调取用于队列地址转换的PCIe ATS请求。作为结果,根联合体可以使用ATPT来执行地址转换并将结果返回到PCIe端点,其可以将已转换的地址在队列上下文中高速缓存,用于从一个或者多个队列获取项目使用,并将项目放置在一个或者多个队列中。通过以此方式预转换队列地址,通过将转换操作的等待时间从每个操作的开始移动到任何操作开始之前来降低在开始I/O操作中所包含的等待时间,由此提高端点DMA操作的整体性能。
图9示出了用于将用于PCIe端点队列的地址转换进行高速缓存的示意性实施方式的实现。如图9中所示,设备驱动器910生成用于与PCIe端点990通信的队列数据结构920-930。在所述例子中,队列数据结构920-930包括工作队列920和完成队列930,其中工作队列920例如可以等效于图4中的PCIe端点的工作队列498,而完成队列930例如可以等效于图4中的完成队列422。工作队列可以是工作队列对(诸如发送和接收工作队列对)的一部分。工作队列还可以是共享接收工作队列、单独发送工作队列、接收工作队列或混合发送和接收工作队列。应该理解,设备驱动器910可以建立的队列的数目不限于两个,在不偏离本发明的精神和范围的情况下,可以使用较小或者较大数目的队列。
例如,队列数据结构920-930可以是小型组件系统接口
(SCSI)队列,用于与耦合到PCIe端点990的SCSI I/O设备进行通信。这些队列数据结构可以以包括链接的列表队列、循环缓冲队列等的任何方式配置。
作为由设备驱动器910在生成这些队列数据结构920-930中执行的操作的部分,设备驱动器910调取设备驱动器服务940以对用于队列数据结构920-930的ATPT条目进行编程,并向设备驱动器910返回用于队列的未转换的PCIe地址。如上文先前所述,在示意性实施方式中,ATPT条目的编程可以包括:将用于队列数据结构的主机存储器空间950钉住,利用用于从未转换PCIe地址转换到系统存储器地址的转换信息对根联合体970的ATPT 960中的ATPT条目进行编程,以及在ATPT条目中设置一个高速缓存使能位,指示对应于ATPT条目的地址转换可以在PCIe端点990的ATC 992中高速缓存。在执行如此操作之后,用于ATPT条目的未转换的PCIe地址返回设备驱动器910。这些未转换的PCIe地址可以标识例如队列数据结构920-930的开始和结束地址。
由设备驱动器910向PCIe端点990提供未转换的PCIe地址,诸如通过将该地址写入PCIe端点990的队列配置空间994中来进行上述提供。队列配置空间994可以例如是PCI配置空间、一个或者多个VPD字段、一个或者多个MMIO字段等。响应于接收这些用于队列数据结构920-930的未转换PCIe地址,PCIe端点990可以向根联合体970发布针对队列地址的PCIe ATS请求。作为结果,根联合体970可以执行用于队列数据结构920-930的未转换PCIe地址的地址转换和访问检查,并向PCIe端点990返回已转换的地址。然后,PCIe端点990可以将这些地址转换存储在由PCIe端点990的地址转换高速缓存(ATC)992提供的队列上下文中。
作为上文的结果,由于PCIe端点现在可以访问用于与队列数据结构920-930相关联的地址的转换,所以PCIe端点现在可以执行DMA操作以将队列条目提交到队列数据结构920-930、或者从队列数据结构920-930获取队列条目,而不必经历根联合体970ATPT地址转换。
一旦PCIe端点990不再使用队列数据结构920-930,则可以以上文先前所述的方式将对应于用于这些队列数据结构920-930的地址的ATPT和ATC条目无效。例如,当PCIe端点将要从系统中移除时、在关联于设备驱动器的功能(物理的或者虚拟的)从主机系统中移除之后等情况下,可以执行这种无效。如前所述,这种无效的处理可以包括:设备驱动器910调取设备驱动器服务940以将对应于队列数据结构920-930的主机系统存储器950解钉,释放用于这些队列数据结构920-930的DMA地址,清除用于这些DMA地址的ATPT条目,以及向PCIe端点990发布ATC条目无效请求。当由PCIe端点990完成ATC条目无效操作的时候,设备驱动器服务940将控制返回给设备驱动器910,并且此时可以从系统移除PCIe端点990。
图10是根据一个示意性实施方式的流程图,概括了用于将用于主机系统和PCIe端点之间的通信的队列数据结构进行初始化的示范性操作。由于用于队列数据结构地址的无效的操作与上文图7中概括的操作基本相同,因而在本描述中将仅仅通过流程图具体示出用于队列数据结构的初始化操作。
如图10中所示,作为主机系统上系统镜像初始化的部分,由主机系统开始用于PCIe端点的设备驱动器的初始化(步骤1010)。主机系统调用逻辑分区中的设备驱动器,设备驱动器依次调用I/O虚拟化媒介中的设备驱动器服务(步骤1020)。设备驱动器服务钉住用于队列数据结构的主机系统存储器(步骤1030)。
设备驱动器服务向队列数据结构分配未转换的DMA地址-即未转换PCIe存储器地址(步骤1040)。设备驱动器服务对用于未转换DMA地址的ATPT条目编程,并且如果适当的话,在ATPT条目中设置高速缓存使能位(步骤1050)。然后,设备驱动器服务向设备驱动器返回未转换DMA地址,即用于队列数据结构的未转换PCIe存储器地址(步骤1060)。
然后,设备驱动器向PCIe端点提供用于队列数据结构的未转换的DMA地址(步骤1070)。PCIe端点向根联合体发布ATS地址转换请求(步骤1080)。根联合体使用ATPT来执行未转换的DMA地址的地址转换,并向PCIe端点返回已转换的地址(步骤1090)。PCIe端点将已转换的地址存储在用于队列数据结构的队列上下文中(步骤1095),并且操作终止。此后,PCIe端点可以将队列上下文中已转换的地址用于来往于队列数据结构的DMA请求。
由此,示意性实施方式提供了一种机制,通过该机制可以创建一个或者多个队列,用于在系统镜像、系统镜像上运行的应用等与例如I/O适配器的PCIe端点之间进行通信。提供示意性实施方式的机制用于根联合体中的ATPT条目的初始化和使用,以便将与一个或者多个队列相关联的地址从未转换的地址空间(例如,PCIe总线地址空间)转换到已转换的地址空间(例如,系统总线地址空间)。此外,示意性实施方式提出了用于将PCIe端点中的转换存储为地址转换高速缓存的一部分的机制,从而使用与这些转换匹配的未转换地址的请求可以直接转发到一个或者多个队列,而不必经历根联合体中的形式转换。
如上所述,可以使用示意性实施方式的机制来在设备驱动器中建立队列数据结构,并在数据处理系统的根联合体中建立它们对应的ATPT条目。一旦通过上述机制初始化此队列数据结构,则可以使用这些数据结构和ATPT条目来执行PCIe端点和主机系统逻辑分区的应用实例、系统镜像等之间的通信。
可以由不同类型的PCIe端点来使用这些队列数据结构和相应的ATPT条目。例如,PCIe端点可以是连网的适配器,诸如以太网适配器、结构通道适配器、InfiniBand TM适配器等,用于通过一个或者多个数据网络来与其他设备进行通信。通过这种连网适配器,正在发送或者接收的数据被放置到与主机系统的设备驱动器中的缓冲器之中,并且根据数据是否正在接收或者发送而由主机系统的系统镜像或者网络适配器来获取。通过预转换数据缓冲器地址,通过将转换操作的等待时间从每个操作开始移动到任何操作开始之前,来降低在开始I/O操作中所包含的等待时间,由此提高端点DMA操作的整体性能。
现在,将参考下文的图11和图12来描述使用关联于连网适配器的示意性实施方式的结构来用于接收和传送数据的处理。图11是示出了一个示范性操作的图示,其示出了用于使用队列条目(被称作“工作队列条目”或者WQE)从PCIe端点将数据接收到主机系统的缓冲器中的操作。首先,设备驱动器1110调取设备驱动器服务1140以初始化一个或者多个队列数据结构(例如,工作队列数据结构1120),用于向PCIe端点1190发送请求,该PCIe端点可以是连网适配器,诸如以太网适配器、结构通道适配器、InfinibandTM适配器等。如前所述,此初始化可以包括:钉住用于队列数据结构的主机系统存储器,分配DMA地址,编程ATPT条目并设置一个位,该位表示ATPT条目是可高速缓存的,并向设备驱动器1110返回未转换PCIe存储器地址。
在初始化队列数据结构之后,设备驱动器创建WQE 1122,其包括指向缓冲器1124的指针(即,地址),将使用该PCIe端点处理WQE。对于接收工作队列,使用缓冲器1124存储来自入站数据包的数据。对于发送工作队列,使用缓冲器1124来传递将被用于出站数据包的数据。用于缓冲器的地址是未转换的PCIe地址。
然后,设备驱动器1110向PCIe端点1190中的门铃存储设备1192(例如,寄存器)写入门铃值。该门铃值向PCIe端点1190指示出WQE 1122是可用的。PCIe端点1190响应于在门铃存储器设备1192中门铃值的设置,从工作队列数据结构1120中获取WQE 1122,且由此获取缓冲器地址。注意,门铃值可以用以表示设备驱动器已经向设备传递的WQE的数目。
在已经获取了用于缓冲器1124的未转换PCIe地址之后,PCIe端点1190针对缓冲器1124的未转换PCIe地址的地址转换向根联合体1150发布请求。根联合体1150使用ATPT 1160来将未转换PCIe地址转换成为已转换的系统存储器地址,并将已转换的系统存储器地址返回PCIe端点1190。PCIe端点1190将已转换的系统存储器地址存储在PCIe端点1190中的WQE 1194的本地副本中。
应该理解,可以在从针对WQE 1194的外部网络附加设备(未示出)接收数据包之前,执行转换并将已转换的地址(即,系统存储器或者实际存储器地址)存储在WQE 1194的本地副本中。由此,在由外部网络附加的设备发送数据包以及在PCIe端点1190中接收数据包的时候,已转换的PCIe地址可以存储在WQE 1194的本地副本中。
一旦在PCIe端点1190中接收到结果数据包,则PCIe端点1190发布DMA操作请求以使用本地存储的高速缓存的已转换的地址(即,系统存储器地址,其对应于存储在WQE 1194的本地副本中的缓冲器1124的未转换PCIe地址)来将数据放置在缓冲器1124中。通过在DMA操作请求的头部中设置一个位,以指示在DMA操作请求中所使用的地址是已转换的系统存储器地址,来执行DMA操作请求。作为结果,根联合体1150传递DMA操作请求,而不使用ATPT1160进行地址转换,从而数据直接写入到缓冲器1124之中。
一旦待写入缓冲器1124的所有数据已被以此方式DMA到缓冲器1124,则PCIe端点1190可以类似的方式将完成队列条目(CQE)1132DMA到完成队列数据结构1130。一旦设备驱动器1110接收并处理CQE 1132,则设备驱动器1110调取设备驱动器服务1140来将用于数据缓冲器1124的主机存储器解钉。当被调取以将用于数据缓冲器1124的主机存储器解钉时,设备驱动器服务1140释放用于数据缓冲器1124的DMA地址,并清除用于数据缓冲器1124的ATPT条目。根联合体1150向PCIe端点1190发布ATC条目无效请求,用于清除WQE 1194的本地副本中的地址信息。PCIe端点1190向根联合体1150返回ATC条目无效完成响应,该响应将完成通知给设备驱动器服务1140。然后,设备驱动器服务1140将控制返回给设备驱动器1110,并且操作完成直到需要创建下一WQE。还可能针对多个操作重用数据缓冲器(例如,多个WQE),在此情况下,设备驱动器服务1140将不被调用(例如,使数据缓冲器地址无效并将存储器解钉),直到其他操作不再需要数据缓冲器为止。
图12是示出了用于使用WQE经由PCIe端点传送数据的操作的示范性图示。当经由PCIe端点1290从主机系统中的系统镜像传送数据的时候,设备驱动器1210调取设备驱动器服务1240来钉住用于缓冲器1224的主机存储器,为缓冲器1224分配DMA地址,将针对缓冲器1224的ATPT 1260中的ATPT条目编程,并在ATPT条目中设置一个位,该位指示在这些条目中的地址转换是可高速缓存的。设备驱动器服务1240向设备驱动器1210返回用于缓冲器1224的未转换PCIe地址。
设备驱动器创建WQE 1222,其包含指向缓冲器1224的指针(即,地址),PCIe端点1290将从这里经由它的一个或者多个端口传送数据。用于缓冲器1224的地址是未转换的PCIe地址。
然后,设备驱动器1210向PCIe端点1290中的门铃存储设备(例如,寄存器)写入门铃值。门铃值向PCIe端点1290指示WQE
1222是可用的。PCIe端点1290响应于门铃存储设备1292中门铃值的设置,从工作队列数据结构1220获取WQE 1222,并由此获取缓冲器地址。
如果PCIe端点1290中的数据缓冲器是满的,例如下游端口饱和,则PCIe端点1290向根联合体1250发布ATS转换请求。当PCIe端点1290接收作为此ATS转换请求的结果的已转换的地址时,其将已转换的地址存储在WQE的本地副本1294中。在PCIe端点1290将传送数据从数据缓冲器1224进行DMA(例如,当端口变得可用于传送数据的时候)并传送该数据之后,PCIe端点1290接着将WQE1232DMA到完成队列1230,以指示传送操作已经完成,并且如果请求,则还可以生成中断。
一旦设备驱动器1210获取CQE 1232,则设备驱动器1210调取设备驱动器服务1240来将用于缓冲器1224的主机存储器解钉,释放DMA地址,并清除用于缓冲器1224的未转换地址的ATPT条目。接着根联合体1250向PCIe端点1290发布ATC条目无效请求并等待来自PCIe端点1290的完成消息。一旦ATC条目无效操作由PCIe端点1290执行,则设备驱动器服务1240将控制返回给设备驱动器1210。还可能将数据缓冲器重用于多个操作(例如,多个WQE),在此情况下,将不调用设备驱动器服务1140(例如,使得数据缓冲器地址无效并对存储器解钉),直到其他操作不再需要数据缓冲器为止。
图13A至图13B描述了根据一个示意性实施方式的流程图,其概括了用于网络适配器的接收操作的示范性操作。如图13A至图13B中所示,操作开始于设备驱动器调取设备驱动器服务来初始化一个或者多个数据缓冲器结构(步骤1310)。更具体地,设备驱动器调用设备驱动器服务来钉住与缓冲器相关联的主机存储器,并设置用于缓冲器地址的ATPT。在初始化数据缓冲器结构之后,设备驱动器创建包含指向缓冲器的指针(即,未转换PCIe存储器地址)的队列条目,其中PCIe端点使用该缓冲器来存储来自进入的数据包的数据(步骤1315)。然后,设备驱动器向PCIe端点中的门铃存储设备写入门铃值(步骤1320)。
PCIe端点响应于门铃存储设备中门铃值的设置,从队列数据结构获取队列条目、以及由此获取未转换PCIe缓冲器存储器地址(步骤1325)。获取用于缓冲器的未转换PCIe存储器地址之后,PCIe端点向根联合体发布关于用于缓冲器的未转换PCIe地址的地址转换的请求(步骤1330)。根联合体使用ATPT来将未转换PCIe地址转换成为已转换的系统存储器地址,并且向PCIe端点返回已转换的系统存储器地址(步骤1335)。PCIe端点将已转换的系统存储器地址存储在PCIe端点中的队列条目的本地副本中(步骤1340)。
PCIe端点确定是否接收到数据包(步骤1345)。如果没有,则操作通过返回步骤1345而等待接收数据包。如果在PCIe端点中接收了数据包,则PCIe端点发布DMA操作请求,其中位于DMA操作请求的头部中的转换位被设置,从而使用本地存储的高速缓存的系统存储器地址来将数据放置在主机系统的缓冲器中(步骤1350)。根联合体传递DMA操作请求,而无需使用ATPT的地址转换,从而数据直接写入缓冲器之中(步骤1355)。针对将要写入缓冲器的所有数据是否已经DMA到缓冲器来做出确定(步骤1360)。如果没有,则操作返回步骤1345。
一旦待写入缓冲器的所有数据已被DMA到缓冲器,则PCIe端点将完成队列条目DMA到完成队列数据结构(步骤1365)。响应于接收CQE,设备驱动器调取设备驱动器服务来将用于数据缓冲器结构的主机存储器解钉(步骤1370)。设备驱动器服务将用于队列数据结构的DMA地址(即,未转换PCIe存储器地址)释放(步骤1375),并清除用于队列数据结构的ATPT条目(步骤1380)。根联合体向PCIe端点发布ATC条目无效请求,用于清除队列条目的本地副本中的地址信息(步骤1385)。然后,PCIe端点使得队列条目的本地副本中的地址信息无效,并向根联合体返回ATC条目无效完成响应(步骤1390),其将完成通知给设备驱动器服务。然后,设备驱动器服务将关联于数据缓冲器的主机存储器解钉(步骤1392)。然后,设备驱动器服务将控制返回给设备驱动器(步骤1395)并且操作终止。
图14A至图14B描绘了根据一个示意性实施方式的流程图,其概括了用于网络适配器传送操作的一个示范性操作。如图14A至图14B所示,操作开始于设备驱动器调取设备驱动器服务(步骤1410),设备驱动器服务接着将用于缓冲器的主机存储器钉住,分配用于缓冲器的DMA地址,将用于缓冲器的ATPT中的ATPT条目编程,并在ATPT条目中设置一个位来指示在这些条目中的地址转换是可高速缓存的(步骤1415)。然后,设备驱动器服务向设备驱动器返回用于缓冲器的一个或者多个未转换PCIe存储器地址,即DMA地址(步骤1420)。
设备驱动器创建包含指向缓冲器的指针(即,未转换PCIe存储器地址)的队列条目,PCIe端点将从该缓冲器经由它的一个或者多个端口传送数据(步骤1425)。然后,设备驱动器向PCIe端点中的门铃存储设备写入门铃值(步骤1430)。PCIe端点响应于在门铃存储设备中的门铃值的设置,从队列数据结构获取队列条目并由此获取缓冲器的未转换PCIe存储器地址(步骤1435)。
针对PCIe端点中的数据缓冲器是否是满的来做出确定(步骤1440)。如果数据缓冲器未满,则数据经由DMA传输并被放置到PCIe端点的数据缓冲器中用于传送(步骤1460),且PCIe端点相应地传送数据(步骤1465)。
如果数据缓冲器是满的,则PCIe端点向根联合体发布ATS转换请求(步骤1445)。当PCIe端点接收作为ATS转换请求的结果的已转换的地址时(步骤1450),PCIe端点将已转换的地址存储在队列条目的本地副本中(步骤1455)。端点等待可用的缓冲器(步骤1457),数据经由DMA传输并被放置到PCIe端点的数据缓冲器中用于传送(步骤1460),然后,PCIe端点相应地传送该数据(步骤1465)。
然后,PCIe端点将完成队列条目(CQE)DMA到完成队列,以指示传送操作已经完成,并且如果请求,则还可以生成中断(步骤1470)。
一旦设备驱动器获取CQE,则设备驱动器调取设备驱动器服务以将用于缓冲器的主机存储器解钉,释放DMA地址,并清除用于缓冲器的未转换地址的ATPT条目(步骤1475)。然后,根联合体向PCIe端点发布ATC条目无效请求(步骤1480),并等待来自PCIe端点的完成消息(步骤1485)。一旦ATC条目无效操作由PCIe端点执行,则设备驱动器服务将与数据缓冲器相关联的主机存储器解钉(步骤1490),且然后将控制返回给设备驱动器(步骤1495),并且操作终止。
由此,示意性实施方式提供了一种机制,通过该机制,可以生成工作队列和工作队列条目,用于经由网络适配器PCIe端点将数据接收和/或传送到主机系统中的设备驱动器的缓冲器之中。利用在PCIe端点中可高速缓存的与缓冲器相对应的地址的转换(以便直接访问缓冲器,而不必执行在根联合体中的地址转换),可以建立用于缓冲器的ATPT条目。
除了网络适配器和SCSI适配器以外,PCIe端点可以是支持用户空间存储器注册的适配器,诸如InfiniBandTM主机通道适配器(HCA)、iWARP远程直接存储器访问(RDMA)使能的网络接口控制器(RNIC)、“以太网上直接RDMA”适配器、或者支持存储器注册的网络接口控制器(NIC)。利用支持存储器注册的适配器,通过发送和接收队列对(QP)来执行工作请求的通信,并且通过完成队列(CQ)返回工作完成。支持存储器注册的适配器提供了一种机制,该机制允许特许软件将用户空间缓冲器的虚拟地址到物理地址的转换注册到适配器。然后,可以在发送和接收工作请求中引用这些缓冲器。
QP使用保护域机制来将QP与先前注册的存储器缓冲器相关联。InfiniBandTM(IB)架构规范的第10章和第11章定义了关于IB的这些操作的语义。类似地,RDMA协议Verb规范定义了关于iWARP的这些操作的语义。为了获取关于InfiniBandTM、主机通道适配器、存储器注册以及队列对的更多信息,请参考InfiniBandTM商业协会成员可用的位于http://www.infinibandta.org/home处的InfiniBandTM规范。为了获取关于iWARP、RNIC、存储器注册以及队列对的更多信息,请参考RDMA协议Verb规范,该规范位于http://www.rdmaconsortium.org/home/draft-hilland-iwarp-verbs-v1.0-RDMAC.pdf。
在进一步的示意性实施方式中,其中端点是支持用户空间存储器注册的适配器,执行这种用户空间存储器注册,从而将地址转换条目存储在PCIe端点中。即,这些进一步的示意性实施方式的机制除了对根联合体中的ATPT条目进行编程以外,还对PCIe端点中的存储器注册(MR)ATPT条目进行编程,用于在支持存储器注册的PCIe适配器以及主机系统之间执行通信。
图15是根据一个示意性实施方式的示范性图示,其中示出了用于使用存储器注册(MR)ATPT来与主机系统执行DMA操作。如图15中所示,此示意性实施方式的机制支持使用MR ATPT中的实际存储器地址,由此当先前注册的存储器区域或者存储器窗口由工作请求或者进入的操作(诸如RDMA写入、RDMA读取、或者原子)所引用的时候,避免主机ATPT。
当由用户空间或者内核程序通过设备驱动器调取存储器区域注册或者重注册的时候,图15中所示出的机制开始。设备驱动器1510调取设备驱动器服务1540以将主机存储器钉住,并将钉住的存储器注册到PCIe端点1590。设备驱动器1510向设备驱动器服务1540传递物理存储器地址和任何注册修改符,如由适配器的存储器注册或者重注册标准(诸如InfiniBandTMVerb规范或者RDMA协议Verb规范或者专有接口)所定义的那样。
设备驱动器服务1540钉住用于设备驱动器的数据缓冲器1524的相应的主机存储器,并对主机ATPT 1560进行编程以使能针对PCIe端点(适配器)的ATPT旁路,例如,通过允许适配器的PCIe请求者标识符来执行已转换的PCIe直接存储器访问操作。就PCIe总线号、设备号以及功能号空间来说,标识的请求者是唯一的。
另外,设备驱动器服务1540对PCIe端点(适配器)1590的MR ATPT 1596中的存储器注册(MR)ATPT条目进行编程,并且在ATPT 1560和MR ATPT 1596的ATPT和MR ATPT条目中设置ATC使能位(即,可高速缓存的位)。设备驱动器服务1540向设备驱动器1510返回未转换的PCIe地址和注册修改符。
如上所述,对MR ATPT条目进行编程的设备驱动器服务部分包括,通过在PCIe端点的MR ATPT 1596中创建条目来将钉住的存储器区域注册到PCIe端点1590。MR ATPT 1596的较低部分(即,页面表)填充有已转换的地址,该地址是用于数据缓冲器1524的实际存储器地址,并且以依赖于实施的方式向PCIe端点1590通知这些是已转换地址。
然后,设备驱动器1510可以在设备驱动器1510的工作队列(WQ)1520中创建工作队列条目(WQE)1522,并可以向门铃存储位置1592写入门铃值。响应于在门铃存储位置1592中设置门铃值,PCIe端点1590使用用于工作队列1520的已转换地址来将一个或者多个WQE 1522DMA到PCIe端点。
针对发送WQE,即针对出站发送消息,PCIe端点1590使用每个发送WQE的数据段来引用MR ATPT 1596中的条目。如果访问控制检查通过,则PCIe端点使用来自MR ATPT 1596的已转换地址来执行来自主机系统的数据缓冲器1524的DMA。PCIe端点1590将与发送WQE相关联的数据段集合作为消息在其下游链路上发送。当DMA完成的时候,PCIe端点1590使用用于完成队列(CQ)1530的已转换地址来将完成队列条目(WQE)1532DMA到主机的完成队列1530。如果请求,则PCIe端点1590还生成中断。
针对出站RDMA写入WQE,即针对出站RDMA写入消息,PCIe端点1590使用每个RDMA写入WQE的数据段来引用MR
ATPT 1596中的条目。如果访问控制检查通过,则PCIe端点1590使用来自MR ATPT 1596的已转换地址来执行来自主机系统的数据缓冲器1524的DMA。PCIe端点将与RDMA写入WQE相关联的数据段集合作为消息在其下游链路上传输。当DMA完成的时候,PCIe端点1590使用用于完成队列(CQ)1530的已转换地址,来将完成队列条目(WQE)1532DMA到主机的完成队列1530。如果请求,则PCIe端点1590还生成中断。
针对出站RDMA读取WQE,即针对出站RDMA读取消息,PCIe端点1590在其下游链路上传输RDMA读取消息。当远程位置返回RDMA读取响应的时候,PCIe端点1590使用进入的RDMA读取响应头部的RDMA字段以引用MR ATPT 1596中的条目,其中对于iWARP,RDMA字段包括操纵标签、加标签的偏移以及长度。对于InfiniBandTM,RDMA读取响应不包含头部,且PCIe端点1590使用内部队列对上下文来获取用以引用MR ATPT 1596中条目的RDMA字段。如果访问控制检查通过,则PCIe端点1590使用来自MR ATPT 1596的已转换的地址,来执行到主机系统的数据缓冲器1524的DMA。
针对出站原子WQE,即针对出站原子消息,PCIe端点1590在其下游链路上传输原子消息。当远程位置返回原子响应的时候,PCIe端点1590使用进入的原子响应头部的RDMA字段以引用MRATPT 1596中的条目。对于InfiniBandTM,原子响应不包含头部,且PCIe端点1590使用内部队列对上下文来获取用以引用MR ATPT1596中条目的RDMA字段。如果访问控制检查通过,则PCIe端点1590使用来自MR ATPT 1596的已转换的地址以执行到主机系统的数据缓冲器1524的DMA。
针对入站发送WQE,即针对进入的发送消息,PCIe端点1590使用与进入的发送相关联的WQE的数据段来引用MR ATPT 1596中的一个或者多个条目。如果访问控制检查通过,则PCIe端点1590使用来自MR ATPT 1596的已转换地址来执行到主机系统的数据缓冲器1524的DMA。当DMA完成时,PCIe端点1590使用用于完成队列1530的已转换地址来将WQE 1532DMA到主机的完成队列1530。如果请求,则PCIe端点1590还生成中断。
针对入站RDMA写入,即针对进入的RDMA写入消息,PCIe端点1590使用进入的RDMA写入头部的RDMA字段来引用MR
ATPT 1596中的条目,其中对于iWARP,RDMA字段包括操纵标签、加标签的偏移以及长度,且对于InfiniBandTM,RDMA字段包括R Key、虚拟地址以及长度。如果访问控制检查通过,则PCIe端点1590使用来自MR ATPT 1596的已转换地址来执行到主机系统的数据缓冲器1524的DMA。当DMA完成的时候,如果RDMA写入要求一个完成事件,则PCIe端点1590使用用于完成队列1530的已转换地址来将WQE 1532DMA到主机的完成队列1530。如果请求,则PCIe端点1590还生成中断。
针对入站RDMA读取和原子,即针对进入的RDMA读取或者原子消息,PCIe端点1590使用进入的RDMA读取或者原子头部的RDMA字段来引用MR ATPT 1596中的条目,其中对于iWART,RDMA字段包括操纵标签、加标签的偏移以及长度,且对于InfiniBandTM,RDMA字段包括R_Key、虚拟地址以及长度。如果访问控制检查通过,则PCIe端点1590执行原子操作,其包括使用来自MR ATPT 1596的已转换地址执行来自主机系统的数据缓冲器1524的DMA。当DMA完成时,PCIe端点1590将与RDMA读取或者原子相关联的数据作为消息在其下游链路上传输。
当设备驱动器1510不再需要数据缓冲器1524的时候,设备驱动器1510调取设备缓冲器服务1540来释放存储器。设备驱动器服务1540使ATPT 1560中的ATPT条目无效,通过无效MR ATPT 1596来对存储器解注册(de-register),对主机存储器解钉,并释放DMA地址。
以上描述假定,设备驱动器服务1540对MR ATPT条目编程,然而示意性实施方式并不局限于此。相反,在可替换实施方式中,设备驱动器服务1540可以仅仅对根联合体1550的ATPT 1560中的ATPT条目编程。当PCIe端点1590接收存储器注册或者重注册请求的时候,其可以向PCIe根联合体1550发布一个或者多个转换请求,用以获取与正在注册或者重注册的存储器区域相关联的已转换的存储器地址(即,实际存储器地址)。对于每个转换请求,PCIe根联合体1550返回相关联的已转换的或者实际存储器地址。PCIe端点将这些已转换的地址存储到MR ATPT 1596之中,并以与先前所述示意性实施方式类似的方式来使用它们。
为了将MR ATPT 1596无效,当解注册存储器区域的时候,设备驱动器服务1540向PCIe端点1590发布无效请求,或者设备驱动器服务1540请求PCIe根联合体1550来向PCIe端点1590发布无效请求。一旦接收到无效请求,则PCIe端点1590搜索转换使用表(未示出)来确定哪些MR ATPT 1596条目被标记为使用已被无效的已转换地址。如果在使用已转换地址的所有存储器区域解注册之后执行无效请求,则针对无效请求将找不到MR ATPT条目,且PCIe端点1590将针对无效请求返回成功结果。如果使用已转换地址的存储器区域仍然处于使用中,则无效请求从未完成,且设备驱动器服务1540经历无效请求超时,该无效请求超时触发错误恢复处理,诸如复位PCIe端点1590。
图16A至图16C描述了根据一个示意性实施方式的流程图,其概括了用于向PCIe端点注册存储器的示范性操作。如图16A至16C中所示,操作开始于设备驱动器调取设备驱动器服务,来钉住主机存储器,并将被钉住的存储器注册到PCIe端点(步骤1610)。设备驱动器将存储器地址以及任何注册修改符传递到设备驱动器服务(步骤1615)。
设备驱动器服务钉住用于设备驱动器的数据缓冲器的相应的主机存储器,并对主机ATPT进行编程(步骤1620),以针对适配器使能ATPT旁路,例如通过允许适配器的PCIe请求器标识符来执行已转换PCIe直接存储器访问操作。另外,设备驱动器服务对PCIe端点的MR中的MR ATPT条目进行编程,并设置在ATPT和MR
ATPT条目中的ATC使能位(步骤1625)。设备驱动器服务向设备驱动器返回注册输出修改符(步骤1630)。
然后,设备驱动器在设备驱动器的工作队列中创建工作队列条目,并向门铃存储位置写入门铃值(步骤1635)。响应于在门铃存储设备中设置门铃值,PCIe端点获取一个或者多个WQE(步骤1640)。
然后,PCIe端点根据在WQE中指定的操作类型来选择将要执行的功能(步骤1645):发送、出站RDMA写入、出站RDMA读取、出站原子、接收(也称作入站发送)、入站RDMA写入、以及入站RDMA读取和原子。
针对发送WQE,即针对出站发送消息,PCIe端点使用发送WQE的数据段来引用MR ATPT中的条目(步骤1646)。如果访问控制检查通过(这是假设在图16A至图16C的流程的情况下),则PCIe端点使用来自MR ATPT的已转换地址以执行来自主机系统的数据缓冲器的数据的DMA(步骤1647)。PCIe端点将与发送WQE相关联的数据段集合作为消息在其下游链路上发送(步骤1648)。当DMA完成时,PCIe端点使用用于完成队列的已转换地址来将WQE DMA到主机的完成队列(步骤1649)。如果请求,则PCIe端点还生成中断。
针对出站RDMA写入WQE,即针对出站RDMA写入消息,PCIe端点使用每个RDMA写入WQE的数据段来引用MR ATPT中的条目(步骤1650)。如果访问控制检查通过(这是假设在图16A至图16C的流程的情况下),则PCIe端点使用来自MR ATPT的已转换地址以执行来自主机系统的数据缓冲器的DMA(步骤1651)。PCIe端点将与RDMA写入WQE相关联的数据段集合作为消息在其下游链路上发送(步骤1652)。当DMA完成时,PCIe端点使用用于完成队列的已转换地址来将WQE DMA到主机的完成队列(步骤1653)。如果请求,则PCIe端点还生成中断。
针对出站RDMA读取WQE,即针对出站RDMA读取消息,PCIe端点在其下游链路上传送RDMA读取消息(步骤1654)。当远程位置返回RDMA读取响应的时候,PCIe端点使用进入的RDMA读取响应头部的RDMA字段来引用MR ATPT中的条目(步骤1655)。如果访问控制检查通过(这假设是在图16A至图16C的流程的情况下),则PCIe端点使用来自MR ATPT的已转换地址执行到主机系统的数据缓冲器的DMA(步骤1656)。
针对出站原子WQE,即针对出站原子消息,PCIe端点在其下游链路上传送原子消息(步骤1657)。当远程位置返回原子响应的时候,PCIe端点使用进入的原子响应头部的RDMA字段来引用MRATPT中的条目(步骤1658)。如果访问控制检查通过(这假设是在图16A至图16C的流程的情况下),则PCIe端点使用来自MRATPT的已转换地址执行到主机系统的数据缓冲器的DMA(步骤1659)。
针对入站发送WQE,即针对进入的发送消息,PCIe端点使用与进入的发送相关联的WQE的数据段来引用MR ATPT中的一个或者多个条目(步骤1660)。如果访问控制检查通过(这是假设在图16A至图16C的流程的情况下),则PCIe端点使用来自MR ATPT的已转换地址来执行到主机系统的数据缓冲器的DMA(步骤1661)。当DMA完成时,PCIe端点使用用于完成队列的已转换地址来将WQE DMA到主机的完成队列(步骤1662)。如果请求,则PCIe端点还生成中断。
针对入站RDMA写入,即针对进入的RDMA写入消息,PCIe端点使用进入的RDMA写入头部的RDMA字段来引用MR ATPT中的条目(步骤1663)。如果访问控制检查通过(这是假设在图16A至图16C的流程的情况下),则PCIe端点使用来自MR ATPT的已转换地址来执行到主机系统的数据缓冲器的DMA(步骤1664)。当DMA完成时,如果RDMA读取要求一个完成事件,则PCIe端点使用用于完成队列的已转换地址来将WQE DMA到主机的完成队列(步骤1665)。如果请求,则PCIe端点还生成中断。
针对入站RDMA读取和原子,即针对进入的RDMA读取或者原子消息,PCIe端点使用进入的RDMA读取或者原子的头部的RDMA字段来引用MR ATPT中的条目(步骤1666)。如果访问控制检查通过(这是假设在图16A至图16C的流程的情况下),则PCIe端点执行入站RDMA读取或者原子操作,其包括使用来自MR ATPT的已转换地址来执行从主机系统的数据缓冲器的DMA(步骤1667)。当DMA完成时,PCIe端点将与RDMA读取或者原子相关联的数据作为消息在其下游链路上传送(步骤1668)。
当设备驱动器不再需要数据缓冲器的时候(步骤1670),设备驱动器调取设备驱动器服务来释放存储器(步骤1675)。设备驱动器服务将两个ATPT中的ATPT条目无效,通过将MR ATPT无效来解注册存储器,并释放DMA地址(步骤1680)。然后设备驱动器服务可以将控制返回给设备驱动器(步骤1685),并且操作终止。
由此,示意性实施方式提供用于以在设备驱动器和设备驱动器服务上分布通信责任的方式与不同类型PCIe端点(包括网络适配器、SCSI适配器、InfiniBandTM适配器等)进行通信的机制。示意性实施方式促进根据所使用PCIe端点的类型以不同方式在各种类型的PCIe端点中将已转换的地址进行高速缓存的使用。对这些已转换的地址高速缓存允许PCIe端点直接访问主机系统的队列、缓冲器以及系统存储器,而不必在主机系统的根联合体中经历地址转换操作。
应该理解,示意性实施方式可以采取完全硬件实施方式、完全软件实施方式或者包含硬件或者软件元件的实施方式的形式。在一个示范性实施方式中,以软件实现示意性实施方式的机制,软件包括但不限于固件、驻留软件、微代码等。
此外,本发明可以采用计算机程序产品的形式,可以从提供程序代码的计算机可用或计算机可读介质来访问该计算机程序产品,其中该程序代码由计算机或任何指令执行系统使用或结合它们来使用。为了说明目的,计算机可用或计算机可读介质可以是任何能够包含、存储、通信、传播或传送用于由指令执行系统、装置或设备使用或结合指令执行系统、装置或设备使用的程序的装置。
该介质可以是电子、磁性、光学、电磁、红外或半导体系统(或装置或设备)或传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可移动计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、刚性磁盘和光盘。光盘的当前例子包括致密盘-只读存储器(CD-ROM)、致密盘-读/写存储器(CD-R/W)和DVD。
适于存储和/或执行程序代码的数据处理系统将包括至少一个通过系统总线直接或间接耦合至存储器元件的处理器。该存储器元件可以包括在程序代码实际执行期间所使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少某些程序代码的临时存储,以减少在执行期间必须从大容量存储器中获取代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、点击设备等)可以直接地或通过中间I/O控制器来耦合至系统。网络适配器也可以耦合至该系统,以使得数据处理系统能够通过介入的专用或公共网络而耦合至其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器以及以太网卡仅是当前可用类型的网络适配器中的一些。
为了示意和描述的目的已经呈现了本发明的描述,而该描述并不旨在穷尽或将本发明限制在所公开的形式。对本领域的普通技术人员而言,许多修改和变更都是显而易见的。因此,选择并描述实施方式是为了更好地解释本发明的原理及其实际应用,并使其他本领域普通技术人员理解,具有各种变化的各种实施方式的本发明适用于预期的特殊用途。

Claims (12)

1.一种用于在数据处理系统中管理地址转换的方法,包括:
由设备驱动器调取设备驱动器服务,用于初始化所述数据处理系统的根联合体的地址转换数据结构中的地址转换条目;
从所述设备驱动器向所述设备驱动器服务传递注册修改符和设备驱动器存储器数据结构的地址;
由所述设备驱动器服务在与所述根联合体相关联的地址转换数据结构中创建一个或者多个地址转换数据结构条目,所述一个或者多个地址转换数据结构条目指定从未转换的地址到用以直接访问所述设备驱动器存储器数据结构的已转换的地址的转换;
由所述设备驱动器服务在适配器的存储器注册地址转换和保护表MR ATPT数据结构中创建一个或者多个MR ATPT条目,所述一个或者多个MR ATPT条目与一个或者多个地址转换数据结构条目相对应;以及
使用所述MR ATPT数据结构和I/O操作来旁路与所述根联合体相关联的地址转换数据结构;其中所述设备驱动器在所述数据处理系统的系统镜像或者不受信任的逻辑分区之一中提供,并且所述设备驱动器服务在受信任的虚拟化媒介中提供。
2.根据权利要求1所述的方法,其中创建一个或者多个MRATPT条目包括:
向所述适配器注册与所述设备驱动器存储器数据结构相关联的被钉住的存储器区域;
利用用于所述设备驱动器存储器数据结构的一个或者多个地址来填充MR ATPT数据结构条目的一部分;以及
向所述适配器通知,在所述MR ATPT数据结构的较低部分中的一个或者多个地址是已转换的地址,所述已转换的地址可在直接存储器访问DMA事务中使用,以旁路与所述根联合体相关联的地址转换数据结构。
3.根据权利要求1所述的方法,进一步包括:
由所述设备驱动器调取所述设备驱动器服务,用于对所述数据处理系统的根联合体的地址转换数据结构中的地址转换数据结构条目进行无效;以及
由所述设备驱动器服务来对所述数据处理系统的根联合体的地址转换数据结构中的地址转换数据结构条目、以及所述适配器上的一个或者多个相对应的MR ATPT条目进行无效。
4.根据权利要求3所述的方法,其中对MR ATPT条目进行无效包括:
向所述适配器解注册所述设备驱动器存储器数据结构。
5.根据权利要求1所述的方法,其中创建一个或者多个MRATPT条目包括:
向所述适配器注册与所述设备驱动器存储器数据结构相关联的先前被钉住的存储器区域;
利用用于所述设备驱动器存储器数据结构的一个或者多个地址来填充所述MR ATPT数据结构条目的部分;以及
向所述适配器通知,在所述MR ATPT数据结构的较低部分中的一个或者多个地址是未转换的地址,其将在用于DMA事务之前转换,所述DMA事务将与所述根联合体相关联的所述地址转换数据结构旁路。
6.根据权利要求5所述的方法,其中针对由所述设备驱动器服务创建的MR ATPT条目,所述适配器:
执行针对与所述MR ATPT条目相关联的一个或者多个地址的转换请求;以及
利用一个或者多个已转换的地址来填充所述MR ATPT数据结构的所述部分,所述一个或者多个已转换的地址与关联于所述MRATPT条目的一个或者多个未转换的地址相对应。
7.根据权利要求1所述的方法,其中使用所述MR ATPT数据结构和I/O操作来旁路与所述根联体相关联的地址转换数据结构,包括:
使用所述适配器的所述MR ATPT数据结构条目中的一个或者多个已转换的地址来处理与所述MR ATPT数据结构条目相关联的直接存储器访问DMA事务。
8.根据权利要求7所述的方法,其中所述DMA事务使用所述已转换的地址将数据从所述适配器放置到所述设备驱动器存储器数据结构之中,而在将所述数据放置到所述设备驱动器存储器数据结构之中的期间不调取所述根联合体的地址转换操作。
9.根据权利要求7所述的方法,其中所述DMA事务与发送工作队列条目WQE、远程直接存储器访问RDMA写入WQE、RDMA读取WQE、接收WQE、进入的RDMA写入或者进入的RDMA读取的处理相关联。
10.根据权利要求1所述的方法,进一步包括:
从所述设备驱动器服务向所述设备驱动器返回与所述设备驱动器存储器数据结构相关联的一个或者多个未转换的地址;以及
从所述设备驱动器服务向所述设备驱动器返回一个或者多个注册修改符。
11.根据权利要求1所述的方法,其中所述受信任的虚拟化媒介是虚拟化媒介操作系统、管理程序或者服务分区之一。
12.一种用于在数据处理系统中管理地址转换装置,包括:
用于由设备驱动器调取设备驱动器服务,用于初始化所述数据处理系统的根联合体的地址转换数据结构中的地址转换条目的装置;
用于从所述设备驱动器向所述设备驱动器服务传递注册修改符和设备驱动器存储器数据结构的地址的装置;
用于由所述设备驱动器服务在与所述根联合体相关联的地址转换数据结构中创建一个或者多个地址转换数据结构条目的装置,所述一个或者多个地址转换数据结构条目指定从未转换的地址到用以直接访问所述设备驱动器存储器数据结构的已转换的地址的转换;以及
用于由所述设备驱动器服务在适配器的存储器注册地址转换和保护表MR ATPT数据结构中创建与一个或者多个地址转换数据结构条目相对应的一个或者多个MR ATPT条目的装置,其中所述适配器使用所述MR ATPT数据结构和I/O操作来旁路与所述根联合体相关联的地址转换数据结构;其中所述设备驱动器在所述数据处理系统的系统镜像或者不受信任的逻辑分区之一中提供,并且所述设备驱动器服务在受信任的虚拟化媒介中提供。
CN2007101533287A 2006-10-17 2007-09-14 用于在数据处理系统中管理地址转换的方法和装置 Expired - Fee Related CN101165664B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/550,217 2006-10-17
US11/550,217 US7587575B2 (en) 2006-10-17 2006-10-17 Communicating with a memory registration enabled adapter using cached address translations

Publications (2)

Publication Number Publication Date
CN101165664A CN101165664A (zh) 2008-04-23
CN101165664B true CN101165664B (zh) 2010-04-21

Family

ID=39326335

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101533287A Expired - Fee Related CN101165664B (zh) 2006-10-17 2007-09-14 用于在数据处理系统中管理地址转换的方法和装置

Country Status (2)

Country Link
US (1) US7587575B2 (zh)
CN (1) CN101165664B (zh)

Families Citing this family (101)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7949794B2 (en) 2006-11-02 2011-05-24 Intel Corporation PCI express enhancements and extensions
US8307415B2 (en) * 2007-05-09 2012-11-06 Microsoft Corporation Safe hashing for network traffic
US7979572B1 (en) * 2007-06-28 2011-07-12 Emc Corporation Data storage system having operation code in address portion for atomic operations
US8976799B1 (en) 2007-10-01 2015-03-10 Apple Inc. Converged computer I/O system and bridging mechanism for peer-to-peer communication
US8271715B2 (en) * 2008-03-31 2012-09-18 Intel Corporation Modular scalable PCI-Express implementation
US8332849B2 (en) * 2008-05-30 2012-12-11 Lsi Corporation Paravirtualization acceleration through single root I/O virtualization
US8041849B2 (en) * 2008-07-02 2011-10-18 Lsi Corporation Method for handling small computer system interface (SCSI) commands via a redundant array of inexpensive disks (RAID) device driver
US20100262979A1 (en) * 2009-04-08 2010-10-14 Google Inc. Circular command queues for communication between a host and a data storage device
US20100262773A1 (en) * 2009-04-08 2010-10-14 Google Inc. Data striping in a flash memory data storage device
US8595572B2 (en) 2009-04-08 2013-11-26 Google Inc. Data storage device with metadata command
US8799586B2 (en) * 2009-09-30 2014-08-05 Intel Corporation Memory mirroring and migration at home agent
CN102549555B (zh) * 2009-10-07 2015-04-22 惠普发展公司,有限责任合伙企业 主机存储器的基于通知协议的端点高速缓存
US8364879B2 (en) 2010-04-12 2013-01-29 International Business Machines Corporation Hierarchical to physical memory mapped input/output translation
US8327055B2 (en) 2010-04-12 2012-12-04 International Business Machines Corporation Translating a requester identifier to a chip identifier
US8606984B2 (en) 2010-04-12 2013-12-10 International Busines Machines Corporation Hierarchical to physical bus translation
US8316169B2 (en) 2010-04-12 2012-11-20 International Business Machines Corporation Physical to hierarchical bus translation
US8214560B2 (en) * 2010-04-20 2012-07-03 International Business Machines Corporation Communications support in a transactional memory
US8429323B2 (en) 2010-05-05 2013-04-23 International Business Machines Corporation Memory mapped input/output bus address range translation
US8650349B2 (en) 2010-05-26 2014-02-11 International Business Machines Corporation Memory mapped input/output bus address range translation for virtual bridges
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8645767B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Scalable I/O adapter function level error detection, isolation, and reporting
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US9213661B2 (en) * 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8645606B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Upbound input/output expansion request and response processing in a PCIe architecture
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8417911B2 (en) 2010-06-23 2013-04-09 International Business Machines Corporation Associating input/output device requests with memory associated with a logical partition
US8510599B2 (en) 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8918573B2 (en) 2010-06-23 2014-12-23 International Business Machines Corporation Input/output (I/O) expansion response processing in a peripheral component interconnect express (PCIe) environment
US8677180B2 (en) 2010-06-23 2014-03-18 International Business Machines Corporation Switch failover control in a multiprocessor computer system
US8416834B2 (en) 2010-06-23 2013-04-09 International Business Machines Corporation Spread spectrum wireless communication code for data center environments
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US8745292B2 (en) 2010-06-23 2014-06-03 International Business Machines Corporation System and method for routing I/O expansion requests and responses in a PCIE architecture
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US8615622B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Non-standard I/O adapters in a standardized I/O architecture
US8656228B2 (en) 2010-06-23 2014-02-18 International Business Machines Corporation Memory error isolation and recovery in a multiprocessor computer system
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8505032B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Operating system notification of actions to be taken responsive to adapter events
US8683108B2 (en) 2010-06-23 2014-03-25 International Business Machines Corporation Connected input/output hub management
US8671287B2 (en) 2010-06-23 2014-03-11 International Business Machines Corporation Redundant power supply configuration for a data center
US8949499B2 (en) 2010-06-24 2015-02-03 International Business Machines Corporation Using a PCI standard hot plug controller to modify the hierarchy of a distributed switch
US8271710B2 (en) 2010-06-24 2012-09-18 International Business Machines Corporation Moving ownership of a device between compute elements
US9112310B2 (en) 2010-06-30 2015-08-18 Apple Inc. Spark gap for high-speed cable connectors
CN202797544U (zh) 2010-06-30 2013-03-13 苹果公司 有源电缆、电缆组件和电子设备
US8327536B2 (en) 2010-06-30 2012-12-11 Apple Inc. Method of manufacturing high-speed connector inserts and cables
US8966134B2 (en) 2011-02-23 2015-02-24 Apple Inc. Cross-over and bypass configurations for high-speed data transmission
US8930715B2 (en) 2011-05-26 2015-01-06 International Business Machines Corporation Address translation unit, device and method for remote direct memory access of a memory
US20130007768A1 (en) * 2011-07-02 2013-01-03 Ramakrishna Saripalli Atomic operations on multi-socket platforms
US20130042238A1 (en) 2011-08-12 2013-02-14 International Business Machines Corporation Optimized Virtual Function Translation Entry Memory Caching
US8954704B2 (en) 2011-08-12 2015-02-10 International Business Machines Corporation Dynamic network adapter memory resizing and bounding for virtual function translation entry storage
US8832216B2 (en) * 2011-08-31 2014-09-09 Oracle International Corporation Method and system for conditional remote direct memory access write
KR20130050156A (ko) * 2011-11-07 2013-05-15 한국전자통신연구원 가상 주소 공간 전환 장치
US20140160954A1 (en) * 2012-12-12 2014-06-12 International Business Machines Corporation Host ethernet adapter frame forwarding
US9288163B2 (en) * 2013-03-15 2016-03-15 Avago Technologies General Ip (Singapore) Pte. Ltd. Low-latency packet receive method for networking devices
US9256559B2 (en) 2013-08-19 2016-02-09 International Business Machines Corporation Function transfer using virtualized mapping
KR102100161B1 (ko) * 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
US9396142B2 (en) * 2014-06-10 2016-07-19 Oracle International Corporation Virtualizing input/output interrupts
US10078361B2 (en) 2014-10-08 2018-09-18 Apple Inc. Methods and apparatus for running and booting an inter-processor communication link between independently operable processors
US10042794B2 (en) 2015-06-12 2018-08-07 Apple Inc. Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link
US10216533B2 (en) * 2015-10-01 2019-02-26 Altera Corporation Efficient virtual I/O address translation
US10085214B2 (en) 2016-01-27 2018-09-25 Apple Inc. Apparatus and methods for wake-limiting with an inter-device communication link
US10572390B2 (en) 2016-02-29 2020-02-25 Apple Inc. Methods and apparatus for loading firmware on demand
US10198364B2 (en) 2016-03-31 2019-02-05 Apple Inc. Memory access protection apparatus and methods for memory mapped access between independently operable processors
KR102549611B1 (ko) * 2016-04-01 2023-06-30 삼성전자주식회사 스토리지 장치 및 그것의 이벤트 통지 방법
US10775871B2 (en) 2016-11-10 2020-09-15 Apple Inc. Methods and apparatus for providing individualized power control for peripheral sub-systems
US10591976B2 (en) 2016-11-10 2020-03-17 Apple Inc. Methods and apparatus for providing peripheral sub-system stability
US10503687B2 (en) * 2017-04-18 2019-12-10 Western Digital Technologies, Inc. Multi-host peripheral component interconnect express (PCIe) switching based on interrupt vector from PCIe device
US10346226B2 (en) 2017-08-07 2019-07-09 Time Warner Cable Enterprises Llc Methods and apparatus for transmitting time sensitive data over a tunneled bus interface
US10331612B1 (en) 2018-01-09 2019-06-25 Apple Inc. Methods and apparatus for reduced-latency data transmission with an inter-processor communication link between independently operable processors
US11792307B2 (en) 2018-03-28 2023-10-17 Apple Inc. Methods and apparatus for single entity buffer pool management
US11381514B2 (en) 2018-05-07 2022-07-05 Apple Inc. Methods and apparatus for early delivery of data link layer packets
US10430352B1 (en) 2018-05-18 2019-10-01 Apple Inc. Methods and apparatus for reduced overhead data transfer with a shared ring buffer
US10585699B2 (en) 2018-07-30 2020-03-10 Apple Inc. Methods and apparatus for verifying completion of groups of data transactions between processors
US10719376B2 (en) 2018-08-24 2020-07-21 Apple Inc. Methods and apparatus for multiplexing data flows via a single data structure
US10789110B2 (en) 2018-09-28 2020-09-29 Apple Inc. Methods and apparatus for correcting out-of-order data transactions between processors
US10838450B2 (en) 2018-09-28 2020-11-17 Apple Inc. Methods and apparatus for synchronization of time between independently operable processors
CN114090495A (zh) * 2019-03-01 2022-02-25 华为技术有限公司 数据处理的方法、网卡和服务器
WO2020236275A1 (en) 2019-05-23 2020-11-26 Cray Inc. System and method for facilitating dynamic command management in a network interface controller (nic)
US11829303B2 (en) 2019-09-26 2023-11-28 Apple Inc. Methods and apparatus for device driver operation in non-kernel space
US11477123B2 (en) 2019-09-26 2022-10-18 Apple Inc. Methods and apparatus for low latency operation in user space networking
US11558348B2 (en) 2019-09-26 2023-01-17 Apple Inc. Methods and apparatus for emerging use case support in user space networking
US11500747B2 (en) * 2020-01-30 2022-11-15 Dell Products L.P. Computer initialization debug message display system
EP4127940A1 (en) * 2020-05-08 2023-02-08 Huawei Technologies Co., Ltd. Remote direct memory access with offset values
WO2021239228A1 (en) * 2020-05-28 2021-12-02 Huawei Technologies Co., Ltd. Method and system for direct memory access
US11606302B2 (en) 2020-06-12 2023-03-14 Apple Inc. Methods and apparatus for flow-based batching and processing
US11775359B2 (en) 2020-09-11 2023-10-03 Apple Inc. Methods and apparatuses for cross-layer processing
US11954540B2 (en) 2020-09-14 2024-04-09 Apple Inc. Methods and apparatus for thread-level execution in non-kernel space
US11799986B2 (en) 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
CN112379911B (zh) * 2020-11-10 2022-11-11 杭州万高科技股份有限公司 固件模块注册信息处理方法、系统、存储介质、智能手机
US11704253B2 (en) * 2021-02-17 2023-07-18 Microsoft Technology Licensing, Llc Performing speculative address translation in processor-based devices
US11882051B2 (en) 2021-07-26 2024-01-23 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
US11876719B2 (en) 2021-07-26 2024-01-16 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
CN114416630A (zh) * 2021-12-24 2022-04-29 深圳市广和通无线通信软件有限公司 基于pcie的通信方法、装置、计算机设备和可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1487418A (zh) * 2002-09-05 2004-04-07 �Ҵ���˾ 远端直接存储器存取启用网络适配器的存储器管理卸载
CN1704912A (zh) * 2004-06-02 2005-12-07 富士通株式会社 地址转换器和地址转换方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6629162B1 (en) * 2000-06-08 2003-09-30 International Business Machines Corporation System, method, and product in a logically partitioned system for prohibiting I/O adapters from accessing memory assigned to other partitions during DMA
US6874039B2 (en) * 2000-09-08 2005-03-29 Intel Corporation Method and apparatus for distributed direct memory access for systems on chip
US7334107B2 (en) * 2004-09-30 2008-02-19 Intel Corporation Caching support for direct memory access address translation
US20060136697A1 (en) * 2004-12-16 2006-06-22 Tsao Gary Y Method, system, and program for updating a cached data structure table
KR100699831B1 (ko) * 2004-12-16 2007-03-27 삼성전자주식회사 베이어 패턴의 컬러 신호를 보간하는 방법 및 보간기
US7398337B2 (en) * 2005-02-25 2008-07-08 International Business Machines Corporation Association of host translations that are associated to an access control level on a PCI bridge that supports virtualization
US7353360B1 (en) * 2005-04-05 2008-04-01 Sun Microsystems, Inc. Method for maximizing page locality
US7543131B2 (en) * 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US20080065854A1 (en) * 2006-09-07 2008-03-13 Sebastina Schoenberg Method and apparatus for accessing physical memory belonging to virtual machines from a user level monitor
US8249089B2 (en) * 2006-09-29 2012-08-21 Intel Corporation Methods for pushing address translations mappings to PCI express endpoints

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1487418A (zh) * 2002-09-05 2004-04-07 �Ҵ���˾ 远端直接存储器存取启用网络适配器的存储器管理卸载
CN1704912A (zh) * 2004-06-02 2005-12-07 富士通株式会社 地址转换器和地址转换方法

Also Published As

Publication number Publication date
US20080091915A1 (en) 2008-04-17
CN101165664A (zh) 2008-04-23
US7587575B2 (en) 2009-09-08

Similar Documents

Publication Publication Date Title
CN101165664B (zh) 用于在数据处理系统中管理地址转换的方法和装置
CN101165667B (zh) 用于在数据处理系统中管理地址转换的方法和装置
CN101165666B (zh) 在数据处理系统中建立地址转换的方法和装置
CN100565478C (zh) 管理访问数据处理系统的存储器的地址转换的方法和装置
CN101165663B (zh) 使用高速缓存的地址转换与i/o适配器进行通信的装置、方法
CN107111576B (zh) 发布的中断架构
CN101206632B (zh) 用套接字连接和共享存储器在主机系统间通信的系统和方法
CN101206633B (zh) 用事务协议和共享存储器在主机系统间通信的系统和方法
CN100583046C (zh) 用于单根无状态虚拟功能迁移的系统和方法
CN101206621B (zh) 迁移无状态虚拟功能的系统和方法
CN101206623B (zh) 迁移虚拟端点的系统和方法
CN101206634B (zh) 用于初始化共享存储器的系统和方法
CN101206629B (zh) 在运行的PCIe架构中热插/拔新组件的系统和方法
CN101206622B (zh) 基于指定的有效功能组合配置端点的系统和方法
US7653801B2 (en) System and method for managing metrics table per virtual port in a logically partitioned data processing system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100421