CN101165667A - 用于在数据处理系统中管理地址转换的方法和装置 - Google Patents
用于在数据处理系统中管理地址转换的方法和装置 Download PDFInfo
- Publication number
- CN101165667A CN101165667A CNA2007101540859A CN200710154085A CN101165667A CN 101165667 A CN101165667 A CN 101165667A CN A2007101540859 A CNA2007101540859 A CN A2007101540859A CN 200710154085 A CN200710154085 A CN 200710154085A CN 101165667 A CN101165667 A CN 101165667A
- Authority
- CN
- China
- Prior art keywords
- address
- device driver
- data structure
- end points
- switched
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000006243 chemical reaction Methods 0.000 title claims description 64
- 238000012545 processing Methods 0.000 title abstract description 28
- 238000013519 translation Methods 0.000 claims abstract description 85
- 238000003860 storage Methods 0.000 claims description 107
- 230000015654 memory Effects 0.000 claims description 95
- 230000004044 response Effects 0.000 claims description 53
- 238000012546 transfer Methods 0.000 claims description 20
- 238000005192 partition Methods 0.000 claims description 8
- 230000009466 transformation Effects 0.000 claims description 7
- 230000008054 signal transmission Effects 0.000 claims description 2
- 230000015572 biosynthetic process Effects 0.000 description 64
- 238000005755 formation reaction Methods 0.000 description 64
- 230000007246 mechanism Effects 0.000 description 37
- 230000006870 function Effects 0.000 description 29
- 230000008569 process Effects 0.000 description 27
- 238000004891 communication Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 21
- 230000006855 networking Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 102000004137 Lysophosphatidic Acid Receptors Human genes 0.000 description 4
- 108090000642 Lysophosphatidic Acid Receptors Proteins 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 208000033748 Device issues Diseases 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000009415 formwork Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
提供了一种用于在数据处理系统中管理地址转换的方法和装置。通过该装置和方法,设备驱动器调取设备驱动器服务,用于针对队列数据结构在根联合体中初始化地址转换以及保护表(ATPT)。设备驱动器服务向设备驱动器返回未转换的地址,接着将未转换的地址提供到网络适配器。在接收到目标为与队列元素相关联的缓冲器的数据包之前,响应于从队列数据结构获取队列元素,网络适配器可以请求对队列元素中指定的未转换的地址进行转换,并将已转换的地址存储在网络适配器中。
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存储器地址可由虚拟功能使用以旁路主机ATPT 130。
在操作中,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操作的物理和/或虚拟功能的适当ATC160-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结构的责任。
发明内容
示例性实施方式提供了一种用于使用队列数据结构和高速缓存的地址转换来与网络适配器、或者网络I/O端点进行通信的装置和方法,该地址转换可以在网络适配器或者网络I/O端点中高速缓存。通过该装置和方法,在设备驱动器和设备驱动器服务之间分配与队列数据结构相关联的地址转换信息的高速缓存管理的责任。设备驱动器可以提供在不受信任的任务逻辑分区(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端点通信的队列数据结构。队列数据结构可以包括,例如,命令队列和响应队列。队列数据结构可以是小型组件系统接口(SCSI)队列,例如,用于与耦合到PCIe端点的SCSI I/O设备进行通信。这些队列数据结构可以以包括链接的列表队列、循环缓冲队列等的任何方式配置。
在生成这些队列数据结构时,作为由设备驱动器执行操作的部分,设备驱动器调取设备驱动器服务以针对队列数据结构来对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端点可以是连网的适配器,诸如以太网适配器、结构通道适配器、InfiniBand TM适配器等,用于通过一个或者多个数据网络来与其他设备进行通信。通过这种连网适配器,正在发送或者接收的数据被放置到与主机系统的设备驱动器相关联的缓冲器之中,并且根据数据是否正在接收或者发送而由主机系统的系统镜像或者PCIe适配器来获取。提供了用于建立队列数据结构以及将对应于队列的已转换的地址进行高速缓存的示意性实施方式的机制,从而可以使用这些已转换的地址和DMA操作来将数据直接发送到传送和/或接收缓冲器,而不必在数据传送/接收的时候经历根联合体的地址转换。由此,该机制降低了关联于经由网络适配器的数据传送和接收的等待时间。
除了由连网适配器使用以外,示意性实施方式的机制还进一步由其他类型的PCIe端点使用,用于与本地可用设备通信。例如,PCIe端点可以是用于与附加至PCIe端点的存储设备直接通信的小型组件系统接口(SCSI)适配器。可以使用示意性实施方式的机制,通过提供将用于SCSI读取/写入的地址信息高速缓存在SCSI适配器中的机制,来降低SCSI适配器的DMA读取等待时间。
在一个示意性实施方式中,提供了一种用于管理地址转换的方法,用于访问由网络设备驱动器所使用的缓冲器数据结构以便与网络输入/输出(I/O)适配器通信。该方法可以包括创建一个缓冲器数据结构,用于存储与网络I/O适配器通信的数据,以及由设备驱动器调取设备驱动器服务,用于在与数据处理系统的根联合体相关联的地址转换数据结构中针对缓冲器数据结构初始化一个或者多个地址转换条目。一个或者多个地址转换条目可以指定将一个或者多个未转换的地址转换成为与缓冲器数据结构相关联的一个或者多个已转换的地址。
本方法可以进一步包括通过设备驱动器服务来向设备驱动器提供与缓冲器数据结构相关联的一个或者多个未转换的地址,以及在队列数据结构中创建队列元素(QE)。QE可以引用与缓冲器数据结构相关联的一个或者多个未转换的存储器地址中的至少一个。本方法还可以包括通过网络I/O适配器来从队列数据结构获取QE。此外,可以针对来自队列数据结构的后续QE而重用缓冲器数据结构。
队列数据结构可以是发送或者接收队列数据结构之一。队列元素可以是发送或者接收队列元素之一。设备驱动器可以提供在数据处理系统的系统镜像或者不受信任逻辑分区的一个中,并且设备驱动器服务提供在受信任的虚拟化媒介中。
本发明可以进一步包括:在I/O适配器对QE引用的未转换的地址执行直接存储器访问(DMA)事务之前,响应于从队列数据结构获取QE,从网络I/O适配器向根联合体发布转换请求,以获取与关联于缓冲器数据结构的一个或者多个未转换的地址相对应的一个或者多个已转换的地址。此外,本方法可以包括,将与缓冲器数据结构相关联的一个或者多个已转换的地址存储在网络I/O适配器的本地存储器中。本方法还可以包括,接收网络I/O适配器中的数据,该数据目标为缓冲器数据结构;并在DMA事务期间,使用在网络I/O适配器中存储的一个或者多个已转换的地址,执行与缓冲器数据结构的DMA事务,而不调取根联合体的地址转换操作。
此外,本方法可以包括在DMA事务的头部字段中设置转换标识符,该转换标识符指示由DMA事务所使用的地址是已转换的地址。响应于检测到转换标识符被设置,根联合体可将DMA事务直接传递到缓冲器数据结构,而不执行地址转换操作。
此外,本方法可以包括响应于接收到目标为缓冲器数据结构的所有数据,执行传送接收完成事务,该事务将接收进入数据的完成向设备驱动器进行信号发送。此外,本方法可以包括接收用于QE的完成通知,以及由设备驱动器调取设备驱动器服务,以将存储在I/O适配器的本地存储器中的一个或者多个已转换的地址无效,所述一个或者多个已转换的地址关联于利用QE使用的缓冲器数据结构。
在另一示意性实施方式中,提供了一种计算机程序产品,其包括具有计算机可读程序的计算机可用介质。当在计算设备上执行的时候,计算机可读程序使得计算设备执行关于方法示意性实施方式而在上文概括的各种操作、以及操作的结合。
在又一个示意性实施方式中,提供了一种装置。该装置包括:处理器,以及耦合到处理器的网络适配器。处理器可以执行使得处理器进行以下操作的指令:创建缓冲器数据结构,用于存储与网络适配器通信的数据;由所述设备驱动器调取设备驱动器服务,用于在与数据处理系统的根联合体相关联的地址转换数据结构中针对缓冲器数据结构初始化一个或者多个地址转换条目。所述一个或者多个地址转换条目可以指定从一个或者多个未转换的地址到与缓冲器数据结构相关联的一个或者多个已转换的地址的转换。该指令可以进一步使得处理器能够通过设备驱动器服务向设备驱动器提供与缓冲器数据结构相关联的一个或者多个未转换的地址。
此外,该指令可以使得处理器在队列数据结构中创建队列元素(QE)。QE可以引用与缓冲器数据结构相关联的一个或者多个未转换的存储器地址的至少一个。该指令还可以使得处理器通过网络适配器从队列数据结构获取QE。
本发明的这些以及其他特征和优点将在以下本发明的示范性实施方式的详细说明中描述,或者对本领域普通技术人员而言,通过以下本发明的示范性实施方式的详细说明,发明的这些以及其他特征和优点将变得显而易见。
附图说明
当结合附图阅读的时候,通过参考以下示意性实施方式的详细描述,将更好地理解本发明和其中使用的优选模式以及进一步的目的和优点,其中:
图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是一个示范性操作的图示,其示出了使用队列条目(被称作“命令队列条目”或者CQE)从PCIe端点接收主机系统的缓冲器中数据的操作;
图12是示出了使用CQE经由PCIe端点传送数据的操作的示范性图示;
图13A至图13B描绘了根据一个示意性实施方式的流程图,其概括了用于接收网络适配器的操作的示范性操作;
图14A至图14B描绘了根据一个示意性实施方式的流程图,其概括了用于传送网络适配器的操作的示范性操作;
图15是根据一个示意性实施方式的示出了SCSI读取操作的示范性图示;
图16A至图16B描绘了根据一个示意性实施方式的流程图,其概括了用于从SCSI设备读取数据的示范性操作。
具体实施方式
示意性实施方式提供了多种机制,通过该机制,端点地址转换管理责任跨越设备驱动器和设备驱动器服务分布,以便促进在端点和主机系统之间更有效的直接存储器访问(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内部的各种组件进行调整并提供控制。作为客户端,操作系统可以是商业可获得的操作系统,诸如MicrosoftWindowsXP(Microsoft和Windows是微软公司在美国、其他国家或两者中的商标)。面向对象的编程系统(例如Java TM编程系统)可以结合操作系统运行,并且从在数据处理系统300上执行的Java程序或应用向操作系统提供调用(Java和所有基于Java的商标是Sun微系统公司在美国、其他国家或两者中的商标)。
作为服务器,数据处理系统300可以是例如IBMeServerTMpSeries计算机系统,运行在高级交互执行(AIX)操作系统或者LINUX操作系统(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具有针对以下操作的响应队列条目(RQE)424,该操作是PCIe端点490期望由设备驱动器450、用户应用430、系统镜像420、主机系统存储器以及其他主机系统资源执行的操作。以与响应队列422和系统镜像420相关联的方式提供门铃存储设备426,用于当响应队列422具有需要处理的响应队列条目424的时候,通知系统镜像420。可以由这种队列执行的工作的例子包括:与从PCIe端点490请求的工作系统镜像420相关联的完成处理,与由PCIe端点490传送(surface)到系统镜像420的错误或者多个事件相关联的异步事件处理等等。
类似地,PCIe端点490可以具有相关联的PCIe端点命令队列498,其中可以提供命令队列条目(CQE)499,用于向PCIe端点490通知系统镜像420、用户应用430等期望由PCIe端点490来执行的操作。PCIe端点490命令队列498可以在PCIe端点490其自身中实现,或者更普通地,如所述的那样,在由PCIe端点490可以访问的系统镜像420存储器位置中实现。在PCIe端点490中可以提供门铃存储设备496,用于向PCIe端点490通知CQE 499何时存在于PCIe端点命令队列498中以便处理。
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和ATC 494中的条目无效。
在设备驱动器450的初始化期间,设备驱动器450可以针对一个或者多个队列来初始化DMA地址空间,所述一个或者多个队列诸如设备驱动器响应队列422、PCIe端点的命令队列498(其驻留在系统镜像420中用于与PCIe端点490通信)等。接着,针对PCIe端点490的设备驱动器450调取设备驱动器服务470以初始化ATPT482条目,用于将PCIe地址转换成为DMA地址空间地址,以访问系统存储器部分。每个ATPT条目用于邻近PCI总线地址的一个集合。用于初始化地址转换和保护表条目的机制通常在现有技术中是已知的。例如,在普通转让的美国专利6,629,162中描述了用于初始化这种条目的机制。然后,设备驱动器服务470向设备驱动器450返回一个或者多个PCI存储器地址。
实际上,在所述例子中,设备驱动器服务470钉住用于响应队列422和PCIe端点的命令队列498(如果其驻留在系统镜像420中)的主机系统存储器。设备驱动器服务470向设备驱动器的响应队列422和PCIe端点的命令队列498(如果其驻留在系统镜像420中)分配DMA地址,其中该地址是未转换的PCIe存储器地址。设备驱动器服务470对ATPT条目进行编程并且使能一个位,该位表示用于设备驱动器的响应队列422以及PCIe端点的命令队列498(如果其驻留在系统镜像420中)的ATPT条目是可高速缓存的,即可高速缓存在PCIe端点490上的ATC 494中。然后,设备驱动器服务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中的RQE 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是示出了一个示范性操作的图示,其示出了用于使用队列条目(被称作“命令队列条目”或者CQE)从PCIe端点将数据接收到主机系统的缓冲器中的操作。首先,设备驱动器1110调取设备驱动器服务1140以初始化一个或者多个队列数据结构(例如,命令队列数据结构1120),用于向PCIe端点1190发送请求,该PCIe端点可以是连网适配器,诸如以太网适配器、结构通道适配器、InfiniBand TM适配器等。如前所述,此初始化可以包括:钉住用于队列数据结构的主机系统存储器,分配DMA地址,编程ATPT条目并设置一个位,该位表示ATPT条目是可高速缓存的,并向设备驱动器1110返回未转换的PCIe存储器地址。
在初始化队列数据结构之后,设备驱动器创建CQE 1122,其包括指向缓冲器1124的指针(即,地址),其中PCIe端点使用该缓冲器存储来自进入数据包的数据。用于缓冲器的地址是未转换的PCIe地址。
然后,设备驱动器1110向PCIe端点1190中的门铃存储设备1192(例如,寄存器)写入门铃值。该门铃值向PCIe端点1190指示出CQE 1122是可用的。PCIe端点1190响应于在门铃存储器设备1192中门铃值的设置,从命令队列数据结构1120中获取CQE 1122且由此获取缓冲器地址。
在已经获取了用于缓冲器1124的未转换的PCIe地址之后,PCIe端点1190针对缓冲器1124的未转换的PCIe地址的地址转换向根联合体1150发布请求。根联合体1150使用ATPT 1160来将未转换的PCIe地址转换成为已转换的系统存储器地址,并将已转换的系统存储器地址返回PCIe端点1190。PCIe端点1190将已转换的系统存储器地址存储在PCIe端点1190中的CQE 1194的本地副本中。
应该理解,可以在从针对CQE 1194的外部网络附加设备(未示出)接收数据包之前,执行转换并将已转换的地址(即,系统存储器或者实际存储器地址)存储在CQE 1194的本地副本中。由此,在由外部网络附加的设备发送数据包以及在PCIe端点1190中接收数据包的时候,已转换的PCIe地址可以存储在CQE 1194的本地副本中。
一旦在PCIe端点1190中接收到结果数据包,则PCIe端点1190发布DMA操作请求以使用本地存储的高速缓存的已转换的地址(即,系统存储器地址,其对应于存储在CQE 1194的本地副本中的缓冲器1124的未转换的PCIe地址)来将数据放置在缓冲器1124中。通过在DMA操作请求的头部中设置一个位,以指示在DMA操作请求中所使用的地址是已转换的系统存储器地址,来执行DMA操作请求。作为结果,根联合体1150传递DMA操作请求,而不使用ATPT1160进行地址转换,从而数据被直接写入到缓冲器1124之中。
一旦待写入缓冲器1124的所有数据已被以此方式DMA处理到缓冲器1124,则PCIe端点1190可以类似的方式将响应队列条目(RQE)1132 DMA到响应队列数据结构1130。一旦设备驱动器1110接收并处理RQE 1132,则设备驱动器1110调取设备驱动器服务1140来将用于数据缓冲器1124的主机存储器解钉。设备驱动器服务1140释放用于数据缓冲器1124的DMA地址,并清除用于数据缓冲器1124的ATPT条目。根联合体1150向PCIe端点1190发布ATC条目无效请求,用于清除CQE 1194的本地副本中的地址信息。PCIe端点1190向根联合体1150返回ATC条目无效完成响应,该响应将完成通知给设备驱动器服务1140。然后,设备驱动器服务1140将控制返回给设备驱动器1110,并且操作完成直到需要创建下一CQE。还可能针对多个操作重用数据缓冲器(例如,多个CQE),在此情况下,设备驱动器服务1140将不被调用(例如,使数据缓冲器地址无效并将存储器解钉),直到其他操作不再需要数据缓冲器为止。
图12是示出了用于使用CQE经由PCIe端点传送数据的操作的示范性图示。当经由PCIe端点1290从主机系统中的系统镜像传送数据的时候,设备驱动器1210调取设备驱动器服务1240来钉住用于缓冲器1224的主机存储器,为缓冲器1224分配DMA地址,将针对缓冲器1224的ATPT 1260中的ATPT条目编程,并在ATPT条目中设置一个位,该位指示在这些条目中的地址转换是可高速缓存的。设备驱动器服务1240向设备驱动器1210返回用于缓冲器1224的未转换的PCIe地址。
设备驱动器创建CQE 1222,其包含指向缓冲器1224的指针(即,地址),PCIe端点1290将从这里经由它的一个或者多个端口传送数据。用于缓冲器1224的地址是未转换的PCIe地址。
然后,设备驱动器1210向PCIe端点1290中的门铃存储设备(例如,寄存器)写入门铃值。门铃值向PCIe端点1290指示CQE 1222是可用的。PCIe端点1290响应于门铃存储设备1292中门铃值的设置,从命令队列数据结构1220获取CQE 1222,并由此获取缓冲器地址。
如果PCIe端点1290中的数据缓冲器是满的,例如下游端口饱和,则PCIe端点1290向根联合体1250发布ATS转换请求。当PCIe端点1290接收作为此ATS转换请求结果的已转换的地址时,其将已转换的地址存储在CQE的本地副本1294中。在PCIe端点1290将来自数据缓冲器1224的传送数据进行DMA(例如,当端口变得可用于传送数据的时候)并传送该数据之后,PCIe端点1290接着将RQE 1232 DMA到响应队列1230,以指示传送操作已经完成,并且如果请求,则还可以生成中断。
一旦设备驱动器1210获取RQE 1232,则设备驱动器1210调取设备驱动器服务1240来将用于缓冲器1224的主机存储器解钉,释放DMA地址,并清除用于缓冲器1224的未转换的地址的ATPT条目。接着根联合体1250向PCIe端点1290发布ATC条目无效请求并等待来自PCIe端点1290的完成消息。一旦ATC条目无效操作由PCIe端点1290执行,则设备驱动器服务1240将控制返回给设备驱动器1210。还可能将数据缓冲器重用于多个操作(例如,多个CQE),在此情况下,将不调用设备驱动器服务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)。响应于接收RQE,设备驱动器调取设备驱动器服务来将用于数据缓冲器结构的主机存储器解钉(步骤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端点将响应队列条目(RQE)DMA到响应队列以指示传送操作已经完成,并且如果请求,则还可以生成中断(步骤1470)。
一旦设备驱动器获取RQE,则设备驱动器调取设备驱动器服务以将用于缓冲器的主机存储器解钉,释放DMA地址,并清除用于缓冲器的未转换的地址的ATPT条目(步骤1475)。然后,根联合体向PCIe端点发布ATC条目无效请求(步骤1480),并等待来自PCIe端点的完成消息(步骤1485)。一旦ATC条目无效操作由PCIe端点执行,则设备驱动器服务将与数据缓冲器相关联的主机存储器解钉(步骤1490),且然后将控制返回给设备驱动器(步骤1495),并且操作终止。
由此,示意性实施方式提供了一种机制,通过该机制,可以生成命令队列和命令队列条目,用于经由网络适配器PCIe端点将数据接收和/或传送到主机系统中的设备驱动器的缓冲器之中。利用在PCIe端点中可高速缓存的与缓冲器相对应的地址的转换(以便直接访问缓冲器,而不必执行在根联合体中的地址转换),可以建立用于缓冲器的ATPT条目。
除了与网络适配器一起使用以外,示意性实施方式的机制还可以由其他类型的PCIe端点所使用,用于与本地可用设备进行通信。例如,PCIe端点可以是用于与直接附加到PCIe端点的存储装置通信的小型组件系统接口(SCSI)适配器。通过提供一种用于将用于SCSI读/写的地址信息高速缓存在SCSI适配器中,示意性实施方式的机制可以用于降低SCSI适配器的DMA读取等待时间。
图15是根据一个示意性实施方式的示出了SCSI读取操作的示范性图示。如图15中所示,当设备驱动器1510从诸如系统镜像或者系统镜像中运行的应用接收存储事务请求的时候,设备驱动器1510调取设备驱动器服务1540来将用于设备驱动器缓冲器1524的主机存储器钉住,对设备驱动器缓冲器1524分配DMA地址,对ATPT条目编程,并将表示这些ATPT条目是可高速缓存的位使能,以及将用于缓冲器1524的未转换的PCIe地址返回给设备驱动器1510。
设备驱动器1510在命令队列数据结构1520中创建命令队列条目(CQE)1522。CQE 1522包含与命令相关联的SCSI命令和指向缓冲器(例如,缓冲器1524)的指针,即未转换的地址。然后,设备驱动器1510将门铃值写入门铃存储器设备1592之中,该门铃值向PCIe端点1590指示存在进入的请求。
响应于在门铃存储设备1592中设置的门铃值,PCIe端点(其可以再次为SCSI适配器)从命令队列数据结构1520获取CQE 1522,并确定哪种类型的命令被请求。例如,可以根据在CQE 1522的头部中提供的值来做出确定。如果CQE 1522包含的SCSI命令是用于从盘读取的读取命令,则PCIe端点1590发布盘读取操作,其后是ATS地址转换请求,其请求主机系统上的根联合体1550执行对于CQE1522中的指针(即,未转换的地址)的地址转换。当PCIe端点1590接收地址转换的结果的时候,将结果存储在PCIe端点1590中的CQE1594的本地副本中。由此,可以与正在执行的读取操作基本同时执行CQE 1522中指针的地址转换。由于未转换的地址用于访问耦合到PCIe端点1590的SCSI设备,所以不需要转换作为读取操作的一部分。
一旦SCSI设备向PCIe端点1590返回数据,则PCIe端点1590发布DMA操作以使用在CQE 1594中本地存储的高速缓存的已转换的地址(即,用于缓冲器1524的系统总线地址)来将数据返回主机系统。执行DMA,其中头部位被设置,指示在DMA中正在使用的地址是已转换的地址。作为结果,根联合体1550不使用ATPT 1560执行转换,而DMA传递至缓冲器1524。
PCIe端点1590还将响应队列条目(RQE)1532 DMA到响应队列数据结构1530,以指示从盘读取的操作已经完成。如果被请求,则PCIe端点1590还可以生成中断。
一旦设备驱动器1510从盘操作的读取获取RQE 1532,则设备驱动器1510调取设备驱动器服务1540来将用于数据缓冲器1524的主机存储器解钉。设备驱动器服务1540进一步释放用于数据缓冲器1524的DMA地址,并清除用于数据缓冲器1524的ATPT条目。根联合体1550向PCIe端点1590发布ATC条目无效请求,因而使得PCIe端点1590将对应于清除的ATPT条目的ATC条目无效,即,CQE 1594的本地副本。当ATC无效操作完成的时候,设备驱动器服务1540将控制返回给设备驱动器1510。
图16A至图16B示出了根据一个示意性实施方式的流程图,其概括了用于从SCSI设备读取数据的示范性操作。如图16A中所示,操作开始于设备驱动器接收存储事务请求(步骤1602)。设备驱动器调取设备驱动器服务以将用于设备驱动器缓冲器的主机存储器钉住(步骤1604),向设备驱动器缓冲器分配DMA地址(步骤1606),对ATPT条目编程并将表示这些ATPT条目可以高速缓存的位使能(步骤1608),并将用于缓冲器的未转换的PCIe存储器地址(即,DMA地址)返回给设备驱动器(步骤1610)。
设备驱动器在命令队列数据结构中创建命令队列条目(CQE)(步骤1612),该CQE包含SCSI命令和指向与该命令相关联的缓冲器的指针。然后,设备驱动器将门铃值写入门铃存储器设备之中(步骤1614)。响应于门铃值在门铃存储设备中被设置,PCIe端点从命令队列数据结构获取CQE(步骤1616),并确定CQE中的命令是否是读取命令(步骤1620)。
如果CQE包含SCSI命令,其是用于从盘读取的读取命令,则PCIe端点发布盘读取操作,该盘读取操作跟随有ATS地址转换请求,其请求主机系统上的根联合体1550执行关于CQE中的指针的地址转换(步骤1622)。当PCIe端点接收地址转换的结果的时候,将结果存储在PCIe端点中的CQE的本地副本中(步骤1624)。
一旦SCSI设备向PCIe端点返回数据,则PCIe端点发布DMA操作以使用在CQE中本地存储的、高速缓存的、已转换的地址来将数据返回主机系统(步骤1626)。由头部位来执行DMA,其中该头部位设置成指示在DMA中正在使用的地址是已转换的地址(步骤1628)。作为结果,根联合体不使用ATPT执行转换,并且DMA被传递至缓冲器。
PCIe端点还将响应队列条目(RQE)DMA到响应队列数据结构,以指示已经完成从盘读取的操作(步骤1630)。如果请求,则PCIe端点还可以生成中断。
一旦设备驱动器从盘操作的读取获取RQE,则设备驱动器调取设备驱动器服务来将存储器解钉,释放DMA地址,并清除用于数据缓冲器的ATPT条目(步骤1632)。设备驱动器服务进一步释放用于命令队列的DMA地址,并清除用于命令队列的ATPT条目(步骤1634)。根联合体向PCIe端点发布ATC条目无效请求,因而使得PCIe端点将对应于清除的ATPT条目的ATC条目无效(步骤1636)。当ATC无效操作完成的时候,设备驱动器服务将用于缓冲器的主机存储器解钉(步骤1638),且设备驱动器服务将控制返回给设备驱动器(步骤1640)。
返回步骤1620,如图16B中所示,如果命令不是读取命令,即,该命令是SCSI写入命令,则端点根据CQE中的信息向SCSI设备发布盘查找操作,之后是发送到根联合体的、针对CQE中指针的地址转换请求(步骤1650)。通常,接收转换请求花费的时间少于物理SCSI设备用以执行查找操作花费的时间,由此在整个操作的等待时间中隐含了地址转换时间。
当端点从根联合体接收已转换的地址的时候,端点将这些已转换的地址存储在CQE的本地副本中(步骤1652)。然后,端点设置DMA头部以指示在DMA请求中正在使用的是已转换的地址,并使用在CQE的本地副本中的本地高速缓存的已转换的地址执行DMA操作,来获取将从系统存储器中的数据缓冲器写入的数据(步骤1654)。然后,端点等待SCSI设备指示先前的盘查找操作已经完成(步骤1656)。响应于来自SCSI设备的指示盘查找操作已经完成的消息,端点将先前DMA的数据传送到SCSI设备(步骤1658)。然后,操作返回上述步骤1630。
由此,示意性实施方式提供用于以在设备驱动器和设备驱动器服务上分布通信责任的方式与不同类型PCIe端点(包括网络适配器、SCSI适配器、InfiniBand TM适配器等)进行通信的机制。示意性实施方式促进根据所使用PCIe端点的类型以不同方式在各种类型的PCIe端点中将已转换的地址进行高速缓存的使用。对这些已转换的地址高速缓存允许PCIe端点直接访问主机系统的队列、缓冲器以及系统存储器,而不必在主机系统的根联合体中经历地址转换操作。
应该理解,示意性实施方式可以采取完全硬件实施方式、完全软件实施方式或者包含硬件或者软件元件的实施方式的形式。在一个示范性实施方式中,以软件实现示意性实施方式的机制,软件包括但不限于固件、驻留软件、微代码等。
此外,本发明可以采用计算机程序产品的形式,可以从提供程序代码的计算机可用或计算机可读介质来访问该计算机程序产品,其中该程序代码由计算机或任何指令执行系统使用或结合它们来使用。为了说明目的,计算机可用或计算机可读介质可以是任何能够包含、存储、通信、传播或传送用于由指令执行系统、装置或设备使用或结合指令执行系统、装置或设备使用的程序的有形装置。
该介质可以是电子、磁性、光学、电磁、红外或半导体系统(或装置或设备)或传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可移动计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、刚性磁盘和光盘。光盘的当前例子包括致密盘-只读存储器(CD-ROM)、致密盘-读/写存储器(CD-R/W)和DVD。
适于存储和/或执行程序代码的数据处理系统将包括至少一个通过系统总线直接或间接耦合至存储器元件的处理器。该存储器元件可以包括在程序代码实际执行期间所使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少某些程序代码的临时存储,以减少在执行期间必须从大容量存储器中获取代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、点击设备等)可以直接地或通过中间I/O控制器来耦合至系统。网络适配器也可以耦合至该系统,以使得数据处理系统能够通过介入的专用或公共网络而耦合至其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器以及以太网卡仅是当前可用类型的网络适配器中的一些。
为了示意和描述的目的已经呈现了本发明的描述,而该描述并不旨在穷尽或将本发明限制在所公开的形式。对本领域的普通技术人员而言,许多修改和变更都是显而易见的。因此,选择并描述实施方式是为了更好地解释本发明的原理及其实际应用,并使其他本领域普通技术人员理解,具有各种变化的各种实施方式的本发明适用于预期的特殊用途。
Claims (11)
1.一种用于在数据处理系统中管理地址转换的方法,所述地址转换用于访问由网络设备驱动器所使用的缓冲器数据结构,来与网络输入/输出(I/O)适配器通信,所述方法包括:
创建缓冲器数据结构,用于存储与网络I/O适配器通信的数据;
由所述设备驱动器调取设备驱动器服务,用于在与所述数据处理系统的根联合体相关联的地址转换数据结构中针对缓冲器数据结构初始化一个或者多个地址转换条目,其中所述一个或者多个地址转换条目指定从一个或者多个未转换的地址到与所述缓冲器数据结构相关联的一个或者多个已转换的地址的转换;
由设备驱动器服务向所述设备驱动器提供与所述缓冲器数据结构相关联的所述一个或者多个未转换的地址;
在队列数据结构中创建队列元素(QE),其中所述QE引用与所述缓冲器数据结构相关联的所述一个或者多个未转换的存储器地址的至少一个;以及
由所述网络I/O适配器从所述队列数据结构获取所述QE。
2.根据权利要求1所述的方法,其中所述队列数据结构是发送或者接收队列数据结构中的一个,并且其中所述队列元素是发送或者接收队列元素中的一个。
3.根据权利要求1所述的方法,其中所述设备驱动器提供在所述数据处理系统的不受信任的逻辑分区或者系统镜像之一中,并且所述设备驱动器服务提供在受信任的虚拟化媒介中。
4.根据权利要求1所述的方法,进一步包括:
在I/O适配器对所述QE引用的所述未转换的地址执行直接存储器访问(DMA)事务之前,响应于从所述队列数据结构获取所述QE,从所述网络I/O适配器向所述根联合体发布转换请求,以获取与关联于所述缓冲器数据结构的一个或者多个未转换的地址相对应的一个或者多个已转换的地址。
5.根据权利要求4所述的方法,进一步包括:
将与所述缓冲器数据结构相关联的一个或者多个已转换的地址存储在所述网络I/O适配器的本地存储器中。
6.根据权利要求5所述的方法,进一步包括:
接收所述网络I/O适配器中的数据,所述数据目标为所述缓冲器数据结构;以及
在所述DMA事务期间,使用在所述网络I/O适配器的本地存储器中存储的所述一个或者多个已转换的地址,执行与所述缓冲器数据结构的DMA事务,而不调取所述根联合体的地址转换操作。
7.根据权利要求6所述的方法,进一步包括:
在所述DMA事务的头部字段中设置转换标识符,指示由所述DMA事务所使用的地址是已转换的地址,并且其中响应于检测到所述转换标识符被设置,所述根联合体将所述DMA事务直接传递到所述缓冲器数据结构,而不执行地址转换操作。
8.根据权利要求6所述的方法,进一步包括:
响应于接收到目标为所述缓冲器数据结构的所有数据,执行传送接收完成事务,该事务将接收进入数据的完成向所述设备驱动器进行信号发送。
9.根据权利要求1所述的方法,其中针对来自所述队列数据结构的后续QE来重用所述缓冲器数据结构。
10.根据权利要求1所述的方法,进一步包括:
接收针对所述QE的完成通知;以及
由所述设备驱动器调取设备驱动器服务,以将存储在所述I/O适配器的本地存储器中的一个或者多个已转换的地址无效,所述一个或者多个已转换的地址关联于利用所述QE使用的所述缓冲器数据结构。
11.一种装置,包括:
处理器;以及
耦合到所述处理器的网络适配器,其中所述处理器执行使得所述处理器进行以下操作的指令:
创建缓冲器数据结构,用于存储与网络适配器通信的数据;
由所述设备驱动器调取设备驱动器服务,用于在与所述数据处理系统的根联合体相关联的地址转换数据结构中针对缓冲器数据结构初始化一个或者多个地址转换条目,其中所述一个或者多个地址转换条目指定从一个或者多个未转换的地址到与所述缓冲器数据结构相关联的一个或者多个已转换的地址的转换;
由设备驱动器服务向所述设备驱动器提供与所述缓冲器数据结构相关联的所述一个或者多个未转换的地址;
在队列数据结构中创建队列元素(QE),其中所述QE引用与所述缓冲器数据结构相关联的所述一个或者多个未转换的存储器地址的至少一个;以及
由所述网络适配器从所述队列数据结构获取所述QE。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/550,191 US8769168B2 (en) | 2006-10-17 | 2006-10-17 | Method for communicating with a network adapter using a queue data structure and cached address translations |
US11/550,191 | 2006-10-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101165667A true CN101165667A (zh) | 2008-04-23 |
CN101165667B CN101165667B (zh) | 2010-06-02 |
Family
ID=39334368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101540859A Expired - Fee Related CN101165667B (zh) | 2006-10-17 | 2007-09-13 | 用于在数据处理系统中管理地址转换的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8769168B2 (zh) |
JP (1) | JP4958111B2 (zh) |
CN (1) | CN101165667B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314361A (zh) * | 2011-07-07 | 2012-01-11 | 曙光信息产业股份有限公司 | 一种在龙芯刀片服务器上实现Infiniband网络的方法 |
CN102511039A (zh) * | 2009-09-25 | 2012-06-20 | 惠普发展公司,有限责任合伙企业 | 将不可预取存储单元映射到存储器映射输入/输出空间中 |
CN104348902A (zh) * | 2013-07-23 | 2015-02-11 | 英特尔公司 | 用于在网络输入/输出设备和存储设备之间移动数据的技术 |
CN105938460A (zh) * | 2015-03-02 | 2016-09-14 | Arm 有限公司 | 存储器管理 |
CN106560791A (zh) * | 2015-10-01 | 2017-04-12 | 阿尔特拉公司 | 高效虚拟i/o地址转换 |
CN108733600A (zh) * | 2017-04-17 | 2018-11-02 | 爱思开海力士有限公司 | 具有直接存储器访问控制器的电子系统及其操作方法 |
CN109542356A (zh) * | 2018-11-30 | 2019-03-29 | 中国人民解放军国防科技大学 | 面向容错的nvm持久化过程冗余信息的压缩方法和装置 |
CN114401218A (zh) * | 2021-12-28 | 2022-04-26 | 绿盟科技集团股份有限公司 | 一种数据报文的旁路转发方法及装置 |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7752360B2 (en) * | 2007-05-16 | 2010-07-06 | Nuova Systems, Inc. | Method and system to map virtual PCIe I/O devices and resources to a standard I/O bus |
US8850159B2 (en) * | 2008-04-29 | 2014-09-30 | Broadcom Corporation | Method and system for latency optimized ATS usage |
US8832354B2 (en) * | 2009-03-25 | 2014-09-09 | Apple Inc. | Use of host system resources by memory controller |
CN102648455B (zh) | 2009-12-04 | 2015-11-25 | 日本电气株式会社 | 服务器和流控制程序 |
WO2012114398A1 (en) | 2011-02-24 | 2012-08-30 | Nec Corporation | Network system, controller, and flow control method |
US9256559B2 (en) | 2013-08-19 | 2016-02-09 | International Business Machines Corporation | Function transfer using virtualized mapping |
JP6349783B2 (ja) * | 2014-02-28 | 2018-07-04 | 富士通株式会社 | 端末装置、サーバ装置、デバイスドライバプログラム及び外部周辺機器制御方法 |
CN103984895B (zh) * | 2014-05-05 | 2017-04-05 | 上海新储集成电路有限公司 | 一种安全计算机系统及其应用方法 |
US9507740B2 (en) * | 2014-06-10 | 2016-11-29 | Oracle International Corporation | Aggregation of interrupts using event queues |
US9798377B2 (en) | 2014-10-08 | 2017-10-24 | Apple Inc. | Methods and apparatus for recovering errors with an inter-processor communication link between independently operable processors |
US10067741B1 (en) * | 2014-12-05 | 2018-09-04 | Amazon Technologies, Inc. | Systems and methods for I/O device logging |
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 |
US10085214B2 (en) | 2016-01-27 | 2018-09-25 | Apple Inc. | Apparatus and methods for wake-limiting with an inter-device communication link |
US10191852B2 (en) | 2016-02-29 | 2019-01-29 | Apple Inc. | Methods and apparatus for locking at least a portion of a shared memory resource |
US10198364B2 (en) | 2016-03-31 | 2019-02-05 | Apple Inc. | Memory access protection apparatus and methods for memory mapped access between independently operable processors |
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 |
US10884970B2 (en) * | 2016-12-28 | 2021-01-05 | Intel Corporation | Techniques for coalescing doorbells in a request message |
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 |
US10838450B2 (en) | 2018-09-28 | 2020-11-17 | Apple Inc. | Methods and apparatus for synchronization of time between independently operable processors |
US10789110B2 (en) | 2018-09-28 | 2020-09-29 | Apple Inc. | Methods and apparatus for correcting out-of-order data transactions between processors |
US10929310B2 (en) * | 2019-03-01 | 2021-02-23 | Cisco Technology, Inc. | Adaptive address translation caches |
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 |
CN111177054B (zh) * | 2019-12-30 | 2021-09-03 | 京信网络系统股份有限公司 | 数据传输方法、装置、设备及存储介质 |
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 |
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 |
US11914543B2 (en) * | 2021-12-06 | 2024-02-27 | Arm Limited | PCIe communications |
US20220414020A1 (en) * | 2022-04-18 | 2022-12-29 | Intel Corporation | Software interface to xpu address translation cache |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0431945A (ja) | 1990-05-29 | 1992-02-04 | Mitsubishi Electric Corp | 計算機システムにおける入出力制御方式 |
JPH04308953A (ja) | 1991-04-05 | 1992-10-30 | Kyocera Corp | 仮想アドレス計算機装置 |
JPH08255120A (ja) | 1995-03-17 | 1996-10-01 | Fujitsu Ltd | 入出力制御装置 |
JP2823038B2 (ja) | 1995-03-27 | 1998-11-11 | 日本電気株式会社 | 論理ダイレクトメモリアクセス方式 |
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 |
JP2002176464A (ja) | 2000-12-07 | 2002-06-21 | Fuji Xerox Co Ltd | ネットワークインタフェース装置 |
US6944703B2 (en) * | 2001-06-28 | 2005-09-13 | Sony Corporation | Electronic device, information processing device, adapter device, and information exchange system |
US7340548B2 (en) | 2003-12-17 | 2008-03-04 | Microsoft Corporation | On-chip bus |
US7249208B2 (en) * | 2004-05-27 | 2007-07-24 | International Business Machines Corporation | System and method for extending the cross-memory descriptor to describe another partition's memory |
JP4233492B2 (ja) * | 2004-06-02 | 2009-03-04 | 富士通マイクロエレクトロニクス株式会社 | アドレス変換装置 |
JP4788124B2 (ja) | 2004-09-16 | 2011-10-05 | 株式会社日立製作所 | データ処理システム |
US7334107B2 (en) * | 2004-09-30 | 2008-02-19 | Intel Corporation | Caching support for direct memory access address translation |
US7340582B2 (en) | 2004-09-30 | 2008-03-04 | Intel Corporation | Fault processing 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 |
-
2006
- 2006-10-17 US US11/550,191 patent/US8769168B2/en not_active Expired - Fee Related
-
2007
- 2007-09-13 CN CN2007101540859A patent/CN101165667B/zh not_active Expired - Fee Related
- 2007-10-15 JP JP2007267426A patent/JP4958111B2/ja active Active
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102511039A (zh) * | 2009-09-25 | 2012-06-20 | 惠普发展公司,有限责任合伙企业 | 将不可预取存储单元映射到存储器映射输入/输出空间中 |
CN102511039B (zh) * | 2009-09-25 | 2014-11-05 | 惠普发展公司,有限责任合伙企业 | 将不可预取存储单元映射到存储器映射输入/输出空间中 |
CN102314361A (zh) * | 2011-07-07 | 2012-01-11 | 曙光信息产业股份有限公司 | 一种在龙芯刀片服务器上实现Infiniband网络的方法 |
US10353631B2 (en) | 2013-07-23 | 2019-07-16 | Intel Corporation | Techniques for moving data between a network input/output device and a storage device |
CN104348902A (zh) * | 2013-07-23 | 2015-02-11 | 英特尔公司 | 用于在网络输入/输出设备和存储设备之间移动数据的技术 |
CN104348902B (zh) * | 2013-07-23 | 2019-11-12 | 英特尔公司 | 一种用于网络输入/输出设备的装置以及方法 |
CN105938460A (zh) * | 2015-03-02 | 2016-09-14 | Arm 有限公司 | 存储器管理 |
CN105938460B (zh) * | 2015-03-02 | 2021-06-25 | Arm 有限公司 | 存储器管理 |
CN106560791A (zh) * | 2015-10-01 | 2017-04-12 | 阿尔特拉公司 | 高效虚拟i/o地址转换 |
CN106560791B (zh) * | 2015-10-01 | 2020-10-27 | 阿尔特拉公司 | 高效虚拟i/o地址转换 |
CN108733600A (zh) * | 2017-04-17 | 2018-11-02 | 爱思开海力士有限公司 | 具有直接存储器访问控制器的电子系统及其操作方法 |
CN108733600B (zh) * | 2017-04-17 | 2021-08-13 | 爱思开海力士有限公司 | 具有直接存储器访问控制器的电子系统及其操作方法 |
CN109542356A (zh) * | 2018-11-30 | 2019-03-29 | 中国人民解放军国防科技大学 | 面向容错的nvm持久化过程冗余信息的压缩方法和装置 |
CN109542356B (zh) * | 2018-11-30 | 2021-12-31 | 中国人民解放军国防科技大学 | 面向容错的nvm持久化过程冗余信息的压缩方法和装置 |
CN114401218A (zh) * | 2021-12-28 | 2022-04-26 | 绿盟科技集团股份有限公司 | 一种数据报文的旁路转发方法及装置 |
CN114401218B (zh) * | 2021-12-28 | 2023-07-21 | 绿盟科技集团股份有限公司 | 一种数据报文的旁路转发方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20080189720A1 (en) | 2008-08-07 |
JP2008102929A (ja) | 2008-05-01 |
CN101165667B (zh) | 2010-06-02 |
JP4958111B2 (ja) | 2012-06-20 |
US8769168B2 (en) | 2014-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101165667B (zh) | 用于在数据处理系统中管理地址转换的方法和装置 | |
CN101165666B (zh) | 在数据处理系统中建立地址转换的方法和装置 | |
CN100565478C (zh) | 管理访问数据处理系统的存储器的地址转换的方法和装置 | |
CN101165663B (zh) | 使用高速缓存的地址转换与i/o适配器进行通信的装置、方法 | |
CN101165664B (zh) | 用于在数据处理系统中管理地址转换的方法和装置 | |
CN101206632B (zh) | 用套接字连接和共享存储器在主机系统间通信的系统和方法 | |
CN101206633B (zh) | 用事务协议和共享存储器在主机系统间通信的系统和方法 | |
CN100583046C (zh) | 用于单根无状态虚拟功能迁移的系统和方法 | |
CN101206634B (zh) | 用于初始化共享存储器的系统和方法 | |
CN101206623B (zh) | 迁移虚拟端点的系统和方法 | |
CN101206621B (zh) | 迁移无状态虚拟功能的系统和方法 | |
CN101206622B (zh) | 基于指定的有效功能组合配置端点的系统和方法 | |
CN101206629B (zh) | 在运行的PCIe架构中热插/拔新组件的系统和方法 | |
CN107111576B (zh) | 发布的中断架构 | |
CN100487674C (zh) | 利用镜像锁定高速缓存传播数据的方法和处理器节点 | |
US9244829B2 (en) | Method and system for efficient memory region deallocation | |
US11010248B2 (en) | Reuse of resources in a storage controller for executing write commands over a plurality of interfaces | |
US10996891B2 (en) | Token management for write commands transmitted by a host over a plurality of interfaces to a storage controller |
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 |
Granted publication date: 20100602 |