管理访问数据处理系统的存储器的地址转换的方法和装置的制作方法

文档序号:6612357阅读:148来源:国知局
专利名称:管理访问数据处理系统的存储器的地址转换的方法和装置的制作方法
管理访问数据处理系统的存储器的地址转换的方法和装置 技术领域本申请通常涉及改进的数据处理系统和方法。更具体地,本申 请涉及在设备驱动器和设备驱动器服务之间划分端点地址转换高速緩存管理责任的装置和方法。
背景技术
在具有当前的外设组件互连(PCI)协议的某些系统上,当执行 直接存储器访问(DMA )操作的时候,使用地址转换和保护表(ATPT) 来执行地址转换和访问检查。尽管ATPT已经使用了几十年,它们 对于较低端系统来说是新的,并且通过许多其他名称为人所知,诸 如直接存储器访问(DMA)重映射资源或者输入/输出存储器管理单 元(IOMMU)。 ATPT存储条目,用于将在DMA事务中使用的PCIATPT中的条目存储保护信息,该保护信息标识哪些设备可以访问存 储器的相应部分、以及这样的设备可以在存储器的这些部分上执行 的特殊操作。最近,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和存储器IIO借助于系统总线U5耦 合到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 )、 零个或者多个根联合体集成的端点、零个或者多个根联合体事件采 集器、以及一个或者多个根端口。每个根端口支持分离的1/0层次。 1/0层次可以包括根联合体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的物理和/或虚拟功能所4吏用。例如,当将要执行DMA操作的时候,可以在处理DMA操作的 特殊虛拟功能148-152的ATC 160-164中查找DMA操作的地址。如 果在ATC 160-164中没有出现地址转换,则可由PCIe端点140向根 联合体120提出转换请求。根联合体120则可以使用ATPT130执行 地址转:换并将已转换的地址返回PCIe端点140。 PCIe端点140则可 以在对应于处理DMA^喿作的物理和/或虛拟功能的适当ATC 160-164中存储该转换。使用已转换的地址可以将DMA操作传递到 系统总线115上。如果在ATC 160-164中已经存在此地址,则已转换的地址与 DMA操作一起使用。在DMA头部中可以设置一个位来指示该地址 已经转换并且针对此DMA根联合体120中的ATPT 130可以被旁路。 作为结果,在PCIe端点140与主机CPU和存储器IIO之间经由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事务的一部分来同步进行ATPT130的访问。这包括 使用一种耗时的转换机制用于将DMA事务未转换的PCI总线存储以及检查ATPT以确保提交DMA事务的设备具有足够的许可用于访 问已转换的实际存储器地址、并且具有足够的许可以在已转换的实 际存储器地址上执行希望的DMA操作。作为访问ATPT 130的部分,必须标识对应于特殊BDF的正确 的ATPT树状数据结构、并且必须遍历(walk)树状数据结构,以 便执行转换和访问检查。A TP T树状数据结构的位置可能需要 一 次或 者两次访问来找到关联于BDF的树状数据结构的地址。 一旦发现, 则可以采取对树状数据结构的3次或者4次访问来遍历树。由此, 此转换和访问检查是造成与DMA操作关联的大量等待时间的原因。 这些等待时间可以导致端点的严重问题,端点需要低的通信等待时 间。作为减轻这些等待时间的一种方式,在PCIe端点140中实现的 ATS使用ATC 160-164来存储已经执行的地址转换,从而不必再次 执行这些转换。由此,通过ATPT和ATC的结合,PCIATS以此方 式执行地址转换和访问检查,以便减少与DMA操作相关联的等待时 间。尽管PCI SiG已经阐明针对PCIe ATS的规范,但PCI SiG没有 指定在实现PCIe ATS的系统中怎样分配用于使用ATS执行地址转 换和管理诸如ATPT和ATC的ATS结构的责任。发明内容示例性实施方式提供了 一种用于在设备驱动器和设备驱动器服 务之间划分端点(例如,PCIe输入/输出(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条目 无效。为了执行这种无效,设备驱动器或者某较高级别的实体(诸 如管理程序管理组件)调取设备驱动器服务以将主机存储器解钉 (u叩in)并释放DMA地址,即,未转换的PCIe存储器地址。然后, 设备驱动器服务清除对应于未转换的PCIe存储器地址的ATPT条 目,并且根联合体向PCIe端点发布ATC条目无效请求。然后,PCIe 端点执行操作以使得对应于未转换的PCIe存储器地址的任何ATC 条目无效,并且在不再使用未转换的PCle存储器地址之后,向设备 服务返回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条目的编程可以包括4丁住用于队列数 据结构的主机存储器空间,利用用于从未转换的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端点将要从系统中移除时、在关联于设备驱 动器的功能(物理的或者虚拟的)从主机系统中移除之后等情况下, 可以4丸行这种无效。这种无效的处理可以包括"i殳备驱动器调取设 备驱动器服务以将对应于队列数据结构的主机系统存储器解钉,释 放用于这些队列数据结构的DMA地址,清除用于这些DMA地址的 ATPT条目,以及向PCIe端点发布ATC条目无效请求。当由PCIe 端点完成ATC条目无效操作的时候,设备驱动器服务将控制返回给
设备驱动器,并且此时,可以从系统移除PCIe端点。如上所述,可以使用示意性实施方式的机制来在设备驱动器中 建立队列数据结构,以及数据处理系统的根联合体中建立该队列数 据结构对应的ATPT条目。 一旦通过上述机制将这种队列数据结构PCIe端点和主机系统的逻辑分区的应用实例、系统镜像等之间的通信。可以由不同类型的PCIe端点来使用这些队列数据结构和对应的 ATPT条目。例如,PCIe端点可以是连网的适配器,诸如以太网适 配器、结构通道适配器、InfiniBand 适配器等,用于通过一个或者 多个数据网络来与其他设备进行通信。通过这种连网适配器,正在 发送或者接收的数据被放置到与主机系统的设备驱动器相关联的緩 冲器之中,并且根据数据是否正在接收或者发送而由主机系统的系 统镜像或者PCIe适配器来获取。提供了用于建立队列数据结构以及 将对应于队列的已转换的地址进行高速緩存的示意性实施方式的机 制,从而可以使用这些已转换的地址和DMA操作来将数据直接发送 到传送和/或接收緩沖器,而不必在数据传送/接收的时候经历根联合 体的地址转换。由此,该机制降低了关联于经由网络适配器的数据 传送和接收的等待时间。除了由连网适配器使用以外,示意性实施方式的机制还进一步 由其他类型的PCIe端点使用,用于与本地可用设备通信。例如,PCIe 端点可以是用于与附加至PCIe端点的存储设备直接通信的小型组件 系统接口 (SCSI)适配器。可以使用示意性实施方式的机制,通过 提供将用于SCSI读取/写入的地址信息高速緩存在SCSI适配器中的 机制,来降低SCSI适配器的DMA读取等待时间。在一个示意性实施方式中,提供了 一种用于管理用于访问数据 处理系统的存储器的地址转换的方法。该方法可以包括由设备驱 动器调取设备驱动器服务,用于初始化数据处理系统的根联合体的 地址转换数据结构中的地址转换条目;以及由设备驱动器服务在与 根联合体相关联的地址转换数据结构中创建一个或者多个地址转换数据结构条目。本方法可以进一步包括将一个或者多个地址转换 数据结构条目的至少 一个高速緩存在耦合到数据处理系统的输入/输 出(I/O)设备的高速緩存中。此外,本方法可以包括,针对接收的 与地址相关联的1/0操作,其中在1/0设备的高速緩存中存在针对该 地址的地址转换数据结构条目,旁路与根联合体相关联的地址转换 数据结构。在与根联合体相关联的地址转换数据结构中创建 一 个或者多个 地址转换数据结构条目可以包括由设备驱动器向设备驱动器服务 传递第一地址空间中的一个或者多个地址,该第一地址空间引用由 设备驱动器和操作系统所使用的地址。创建一个或者多个地址转换 数据结构条目可以进一 步包括由设备驱动器服务将第 一地址空间 中的一个或者多个地址转换成为第二地址空间中的一个或者多个地 址,其中第二地址空间引用由根联合体用于引用实际存储器的已转 换的地址。创建一个或者多个地址转换数据结构条目还可以包括 由设备驱动器服务将来自引用未转换的I/O总线地址的第三地址空 间的一个或者多个转换条目存储在数据处理系统的根联合体的地址 转换数据结构中,在该未转换的I/O总线地址用以引用实际存储器之 前,由根联合体将其转换成为第二地址空间中的一个或者多个地址。 此外,创建一个或者多个地址转换数据结构条目可以包括由设备 驱动器服务向设备驱动器传递第三地址空间中的一个或者多个地 址。根联合体可以以一个或者多个地址转换对来自I/O设备的转换 请求做出响应,该地址转换将来自第三地址空间的一个或者多个地 址转换成为第二地址空间中的 一 个或者多个地址。本方法可以进一步包括由1/0设备接收无效请求,以将高速緩 存在I/O设备的高速緩存中的、从第三地址空间到第二地址空间的一 个或者多个地址转换的至少一个无效。此外,本方法可以包括由 I/O设备将I/O设备的高速緩存中的至少 一个条目无效,该条目与从
第三地址空间到第二地址空间的 一个或者多个地址转换中的至少一 个相对应。可以从设备驱动器服务或者根联合体之一 来接收无效请求。本方法进一步包括使用在I/0设备的高迭緩存中的一个或者多 个高速緩存的地址转换数据结构条目来处理来自1/0设备的直接存 储器访问事务请求。设备驱动器可以提供在数据处理系统的不受信任的逻辑分区或 者系统镜像之一中,并且设备驱动服务提供在受信任的虚拟化媒介 中。受信任的虛拟化媒介可以是虚拟化媒介操作系统、管理程序或 者服务分区中的一个。本方法可以进一步包括确定来自I/O设备的直4妻存储器访问 (DMA)事务是否被导向第三地址空间中的地址,其中在I/0设备 的高速緩存中存在高速緩存的地址转换数据结构条目。可以修改I/0 操作i青求,以包括与第三地址空间中的地址相对应的第二地址空间 中的地址,并且如果DMA事务净皮导向第三地址空间中的地址,其中 在所述I/O端点的高速緩存中存在针对所述第三地址空间中的地址 的、高速緩存的地址转换数据结构条目,则在所述DMA事务中设置 "已转换"标识符以指示所述DMA事务包括已转换的地址。本方法可以进一步包括执行从I/0设备到根联合体的、利用未 转换的地址的DMA事务或者利用已转换的地址的DMA事务之一。 此外,本方法可以包括根据在接收DMA事务中是否已经设置了 "已 转换"标识符,在根联合体中确定从I/0设备接收的DMA事务是否 引用 一个或者多个已转换的地址。如果接收的DMA事务引用 一个或 者多个已转换的地址,则可以旁路与根联合体相关联的地址转换数 据结构,其中,如果接收的DMA事务引用一个或者多个未转换的地 址,则根联合体使用地址转换数据结构来执行地址转换操作。本方法可以进一步包括;由根联合体验证所接收的DMA事务。 验证接收的DMA事务可以包括检查I/O设备被允许执行已转换的 DMA事务,其中该1/0设备是DMA事务的源。此外,验证所接收 DMA事务可以包括检查已经针对地址转换高速緩存使能了已转换
的地址,该已转换的地址被所述I/O设备用以执行已转换的DMA。 在另一示意性实施方式中,提供了一种计算机程序产品,其包 括具有计算机可读程序的计算机可用介质。当在计算设备上执行的 时候,计算机可读程序使得计算设备执行关于方法示意性实施方式 而在上文概括的各种操作、以及操作的结合。在又一示意性实施方式中,提供了一种装置。该装置可用包括: 处理器,以及耦合到该处理器的输入/输出(1/0)设备。处理器执行 这样的指令,该指令使得处理器由设备驱动器调取设备驱动器服务, 用于初始化数据处理系统的根联合体的地址转换数据结构中的地址 转换条目。该指令进一步使得处理器由设备驱动器服务在与根联合 体相关联的地址转换数据结构中创建一个或者多个地址转换数据结 构条目。此外,该指令可以使得处理器将一个或者多个地址转换数 据结构条目的至少一个高速緩存在耦合到数据处理系统的1/0设备 的高速緩存中。与根联合体相关联的地址转换数据结构可以针对接 收的与地址相关联的1/0操作而被旁路,其中在1/0设备的高速緩存 中存在针对该地址的地址转换数据结构条目。本发明的这些以及其他特征和优点将在以下本发明的示范性实 施方式的详细说明中描述,或者对本领域普通技术人员而言,通过 以下本发明的示范性实施方式的详细说明,发明的这些以及其他特 征和优点将变得显而易见。


当结合附图阅读的时候,通过参考以下示意性实施方式的详细描述,将更好地理解本发明和其中使用的优选模式以及进一步的目 的和优点,其中图1是示出了用于使用ATPT和PCI express ( PCIe )通信协议 执行DMA操作的传统机制的示范性图示;图2是示出了分布式数据处理环境的示范性图示,其中可以实 现示意性实施方式的示范性方面; 图3是示出了数据处理设备的示范性图示,其中可以实现示意 性实施方式的示范性方面;图4是示出了关于设备驱动器和设备驱动器服务的一个示意性 实施方式的操作的示范性图示;图5是示出了根据一个示意性实施方式的利用DMA操作处理已 转换的和未转换的PCIe地址的示范性图示;图6是根据一个示意性实施方式的流程图,其概括了用于对用 于DMA地址的ATPT条目进行初始化的示范性操作;图7是根据一个示意性实施方式的流程图,其概括了用于使用图8是根据一个示意性实施方式的流程图,其概括了用于处理 DMA操作中的已转换的和未转换的PCIe地址的示范性操作;图9示出了用于高速緩存针对PCIe端点队列的地址转换的示意 性实施方式的实现;图IO是根据一个示意性实施方式的流程图,其概括了用于初始 化主机系统和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、 务器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/ICH304。 音频适配器316、键盘和鼠标适配器220、调制解调器322、只读存 储器(ROM) 324、硬盘驱动器(HDD) 326、 CD-ROM驱动器330、 通用串行总线(USB )端口和其他通信端口 232以及PCI/PCIe设备 334通过总线338和总线340连接到SB/ICH 304。 PCI/PCIe设备可 以包括例如以太网适配器、用于笔记本计算机的P C卡、以及附加卡。 PCI使用卡总线控制器,而PCIe不使用。ROM 324例如可以是快闪 二进制输入/输出系统(BIOS)。
HDD 326和CD-ROM驱动器330通过总线340连接到SB/ICH 304。 HDD 326和CD-ROM驱动器330可以使用例如集成的驱动器 电子设备(IDE)或者串行高级技术附件(SATA)接口。超级1/0 (SIO )设备336可以连接到SB/ICH 204。操作系统在处理单元306上运行。操作系统对图3中的数据处 理系统300内部的各种组件进行调整并提供控制。作为客户端,操 作系统可以是商业可获得的操作系统,诸如Microsoft Windows XP (Microsoft和Windows是微软公司在美国、其他国家或两者中的商 标)。面向对象的编程系统(例如JavaTM编程系统)可以结合操作 系统运4亍,并且从在数据处理系统300上执行的Java程序或应用向 操作系统提供调用(Java和所有基于Java的商标是Sun微系统公司 在美国、其他国家或两者中的商标)。作为服务器,数据处理系统300可以是例如IBM eServerTM pSeries 计算机系统,运行在高级交互执行(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、 ROM324或诸如在图3中NB/MCH 302中可以找 到的高速緩存。本领域普通技术人员应该理解,在图2至图3中的硬件可以根 据实现而改变。其他内部硬件或外围设备,诸如闪存、等同的非易 失性存储器或光盘驱动器等,可以在图2至图3中示出的硬件之外 使用或代替图2至图3中示出的硬件而使用。此外,示意性实施方 式的处理可以应用到先前提及的SMP系统以外的多处理器数据处理 系统中,而并不背离本发明的精神和范围。此外,数据处理系统300可以釆取多个不同数据处理系统的任 意一个的形式,包括客户端计算设备、服务器计算设备、平板计算 机、膝上型计算机、电话或者其他通信设备、个人数字助理(PDA) 等。在某些示意性例子中,例如,数据处理系统300可以是便携计 算设备,其配置有闪存来提供非易失性存储器用于存储操作系统文 件和/或用户生成的数据。本质上,数据处理系统300可以是任何已 知的或者新近开发的数据处理系统,而并没有架构限制。如上所提及,示意性实施方式提供了一种系统和方法,用于将 端点地址转换高速緩存管理的责任分布在设备驱动器和设备驱动器 服务之间。设备驱动器例如可以提供在不受信任的任务逻辑分区 (LPAR)中,而设备驱动器服务例如可以提供在受信任的输入/输出 (I/O)虚拟化媒介(VI)中。尽管将在示意性实施方式的描述中使 用PCIe端点和PCIe通信协议,应该理解,示意性实施方式不应限 制于此,并且在不偏离本发明的精祌和范围的情况下,可以使用任何通信协议o关于示意性实施方式,设备驱动器负责管理和使用用于在用户应用/库和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。由此,当根联合体接收到标记为已转换的 PCIeDMA事务时,根联合体将验证转换高速緩存针对端点而使能,
并且使用已转换的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)操作。ATC494可以存储 在PCIe端点490处的设备驱动器的队列上下文中。PCIe端点490经由PCI结构485井禺合到主才几系统,其可以包括 通信链路、 一个或者多个PCI交换机等。主机系统具有PCIe根联合 体480用于经由PCI结构485与PCIe端点490进行通信。根联合体 480维护地址转换和保护表(ATPT) 482,其用于将未转换的PCIe 存储器地址转换成为在系统的实际存储器地址空间中使用的已转换 的地址。ATPT482和ATC494的管理由在输入/输出(I/O)虚拟化々某介 (VI) 460中提供的设备驱动器服务470执行。1OVI460可以例如 是管理程序或者其他虛拟化管理组件,诸如受信任的服务分区。当 需要初始化ATC 494和ATFT482中的条目以及使其无效的时候, 设备驱动器服务470可以由没备驱动器450来调取。
在设备驱动器450和设备驱动器服务470之间划分用于管理主 机系统和PCIe端点之间通信的责任。具体地,设备驱动器450负责 管理其响应队列422和PCIe端点的命令队列498。设备驱动器450 另外负责当需要执行用于初始化ATPT 482中的地址转换条目所需 的功能时调取设备驱动器服务470,以及当PCIe端点490不再使用 转换时,使得ATPT482和ATC494中的条目无效。在设备驱动器450的初始化期间,设备驱动器450可以针对一 个或者多个队列来初始化DMA地址空间,所述一个或者多个队列诸 如设备驱动器响应队列422、 PCIe端点的命令队列498 (其驻留在系 统镜像420中用于与PCIe端点490通信)等。接着,针对PCIe端 点490的设备驱动器450调取设备驱动器服务470以初始化ATPT 482条目,用于将PCIe地址转换成为DMA地址空间地址,以访问 系统存储器部分。每个ATPT条目用于邻近P CI总线地址的 一 个集已知的。例如,在普通转让的美国专利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上的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中的RQE424)的 DMA时旁路根联合体ATPT482。即,当根联合体480接收标记为 已转换的PCIe DMA事务的时候,其将验证转换高速緩存针对PCIe 端点490而使能,并且将直接使用已转换的PCIe存储器地址访问主 机系统的实际存储器。在之后的某时间点处,诸如乂人系统移除PCIe端点490之后,从 主机系统移除与设备驱动器45 0相关联的功能(物理的或者虛拟的) 之后等等,需要使得对应于未转换的PCIe存储器地址的ATPT条目 和ATC条目无效。为了执行这种无效,设备驱动器450、管理程序 管理组件等调取设备驱动器服务470以将主机存储器解钉并释放 DMA地址,即,未转换的PCIe存储器地址。然后设备驱动器服务 470清除ATPT482中对应于未转换的PCIe存储器地址的ATPT条 目,例如,通过设置ATPT482中的一个位表示该条目不再有效,或 者通过将ATPT条目"置零(zero,ing),,来指示其不再有效。然后,根联合体480向PCIe端点490发布ATC条目无效请求。 然后,PCIe端点490执行操作以使得ATC 494中对应于未转换的 PCIe存储器地址的任何ATC条目无效。这种无效可以包括,例如, 从高速緩存已转换的任何虛拟功能的队列上下文(例如,ATC494) 中移除高速緩存的转换。在未转换的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的^f吏用未转换的PCIe地址的一个 DMA操作,以及从PCIe端点505发送到CPU和存储器560的使用 已转换的PCIe地址的另一个DMA操作。如图5中所示,当在PCIe端点505的虛拟功能中接收到DMA 操作请求或生成DMA操作请求时,可以执行相应ATC的检查,以 确定在ATC中是否存在用于未转换的PCIe地址的地址转换。如果 在ATC中不存在用于未转换的PCIe地址的条目,则将DMA操作请 求作为4吏用未转换的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 转换所需的周期。对于已转换的PCIeDMA 520,由于已经借助于PCIe端点505 中的虛拟功能的ATC而将PCIe地址转换成为系统存储器地址,DMA 操作可以通过根联合体530直接传递到CPU和存储器560。例如, 已转换的PCIe DMA 520在DMA头部中设置(例如,由PCIe端点 505设置) 一个位,指示在DMA操作请求的头部中指定的地址是已 转换的地址。根联合体530可以读取此位并且确定该位是否指示 D M A操作请求中的地址是已转换的或者未转换的地址。如果根联合体530确定该地址是未转换的地址,则执行上述关 于未转换的PCIe DMA操作请求510的操作。如果根联合体530确 定该地址是已转换的地址,则根联合体530可以将DMA操作请求 520传递到CPU和存储器560。可选地,仍可以根据PCIe端点505 的BDF号来执行访问检查,以确保允许PCIe端点访问与已转换的 系统存储器地址相对应的系统存储器部分。此访问检查可以非常简 单,诸如通常检奎以确定是否允许BDF号对地址转换进行高速緩存, 如果允许,则检查成功。如果不允许BDF号对地址转换进行高速緩
存,则该访问4企查失败。图6至图8概述了示意性实施方式的各种元素的示范性操作。 应该理解,可由计算机程序指令来实现这些流程图示的每个方框、 下文的流程图示、以及流程图示中方框的结合。可以向处理器或者 其他可编程数据处理装置提供这些计算机程序指令以生成一个机 器,以便在处理器或者其他可编程数据处理装置上执行的指令创建 用于实现 一 个或多个流程方框中的指定功能的器件。这些计算机程 序指令还可以存储在计算机可读存储器或者存储介质中,该指令可 以引导处理器或者其他可编程数据处理装置以特殊方式工作,以便 在计算机可读存储器或者存储介质中存储的指令产生一项产品,该 产品包括实现一个或多个流程方框中指定功能的指令器件。因而,流程图示的方框支持用于执行指定功能的器件的结合、用于执行特定功能的步骤的结合、以及用于执行特定功能的程序指 令器件的结合。应该理解,流程图示的每个方框、以及流程图示中 方框的结合可以通过执行特定功能或者步骤的基于专用硬件的计算 机系统来实现,或者由专用硬件和计算机指令来实现。图6是根据 一 个示意性实施方式的流程图,概括了对用于D M A 地址的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。由此,示意性实施方式提供一种机制,通过该机制调取设备驱 动器服务以将主机系统的根联合体的地址转换数据结构中的地址转 换初始化和使其无效。这些设备驱动器服务可以在1/0虛拟化媒介中 提供,并且可以由在与系统镜像相关联的逻辑分区中提供的设备驱 动器来调取。设备驱动器服务可以通过根联合体创建地址转换数据
结构条目,用于将虚拟地址(例如未转换的PCIe地址)转换成为系 统存储器地址。此外,设备驱动器服务可以通过根联合体来从地址 转换数据结构中清除地址转换条目,并通过PCIe端点将PCIe端点 的任何地址转换高速緩存中的条目无效。如上所提及,可以使用示意性实施方式的机制来建立ATPT条 目,用于在系统镜像、系统镜像中运行的应用等与使用一个或者多 个队列数据结构的PCIe端点之间的通信中使用。在示意性实施方式 的此实现中,以上文先前所述方式将用于一个或者多个队列数据结 构的ATPT条目初始化。在PCIe端点的初始化阶段期间,PCIe端点 对i殳备驱动器已经;陂初始化进行验证。这可以例如通过/人PCIe端点 的PCI配置空间、重要产品数据(VPD)字段、或者存储器映射的 输入/输出(MMIO)字段读取信息来执行。设备驱动器可以向PCIe端点提供一 个或者多个队列的开始和 结束地址、开始地址和长度等等。例如,设备驱动器可以将这些地 址写入对应于队列配置空间的PCIe端点的PCI配置空间字段、VPD 或者MMIO字"a。这些地址是未转换的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发布针对队列地址的PCIeATS请求。作为结果,根 联合体970可以执行用于队列数据结构920- 930的未转换的PCIe 地址的地址转换和访问检查,并向PCIe端点990返回已转换的地址。 然后,PCIe端点990可以将这些地址转换存储在由PCIe端点990的 地址转换高速緩存(ATC) 992提供的队列上下文中。作为上文的结果,由于PCIe端点现在可以访问用于与队列数
据结构920- 930相关联的地址的转换,所以PCIe端点现在可以执 行DMA操作以将队列条目提交到队列数据结构920 - 930、或者从 队列数据结构920- 930获取队列条目,而不必经历根联合体970 ATPT地址转换。一旦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。图IO是根据一个示意性实施方式的流程图,概括了用于将用 于主机系统和PCIe端点之间的通信的队列数据结构进行初始化的示 范性操作。由于用于队列数据结构地址的无效的操作与上文图7中 概括的操作基本相同,因而在本描述中将仅仅通过流程图具体示出 用于队列数据结构的初始化操作。如图10中所示,作为主才几系统上系统4竟像初始化的部分,由 主机系统开始用于PCIe端点的设备驱动器的初始化(步骤IOIO)。 主机系统调用逻辑分区中的设备驱动器,设备驱动器接着调用I/O 虚拟化媒介中的设备驱动器服务(步骤1020)。设备驱动器服务钉 住用于队列数据结构的主机系统存储器(步骤1030)。设备驱动器服务向队列数据结构分配未转换的DMA地址一即 未转换的PCIe存储器地址(步骤1040)。设备驱动器服务对用于未 转换的DMA地址的ATPT条目编程,并且如果适当的话,在ATPT 条目中设置高速緩存使能位(步骤1050)。然后,设备驱动器服务 向设备驱动器返回未转换的DMA地址,即用于队列数据结构的未转 换的PCIe存储器地址(步骤1060 )。然后,设备驱动器向PCIe端点提供用于队列数据结构的未转 换的DMA地址(步骤1070 ) 。 PCIe端点向根联合体发布ATS地址 转换请求(步骤1080)。根联合体使用ATPT来执行未转换的DMA 地址的地址转换,并向PCIe端点返回已转换的地址(步骤1090)。(步骤1095 ),并且操作终止。此后,PCIe端点可以将队列上下文 中已转换的地址用于来往于队列数据结构的DMA请求。由此,示意性实施方式提供了一种机制,通过该4几制可以创建 一个或者多个队列,用于在系统镜像、系统镜像上运行的应用等与 例如I/O适配器的PCIe端点之间进行通信。提供示意性实施方式的 机制用于根联合体中的ATPT条目的初始化和4吏用,以l更将与一个 或者多个队列相关联的地址从未转换的地址空间(例如,PCIe总线 地址空间)转换到已转换的地址空间(例如,系统总线地址空间)。 此外,示意性实施方式提出了用于将PCIe端点中的转换存储为地址 转换高速緩存的 一部分的机制,从而使用与这些转换匹配的未转换 的地址的请求可以直接转发到一个或者多个队列,而不必经历根联 合体中的形式转换。如上所述,可以使用示意性实施方式的机制来在设备驱动器中 建立队列数据结构,并在数据处理系统的根联合体中建立它们对应 的ATPT条目。 一旦通过上述机制初始化此队列数据结构,则可以 使用这些数据结构和ATPT条目来执行PCIe端点和主机系统逻辑分 区的应用实例、系统镜像等之间的通信。可以由不同类型的PCIe端点来使用这些队列数据结构和相应 的ATPT条目。例如,PCIe端点可以是连网的适配器,诸如以太网 适配器、结构通道适配器、InfiniBand 适配器等,用于通过一个或 者多个数据网络来与其他设备进行通信。通过这种连网适配器,正 在发送或者接收的数据被放置到与主机系统的设备驱动器中的緩沖 器之中,并且根据数据是否正在接收或者发送而由主机系统的系统 镜像或者网络适配器来获取。通过预转换数据緩冲器地址,通过将 转换操作的等待时间从每个操作开始移动到任何操作开始之前,来降低在开始1/0操作中所包含的等待时间,由此提高端点DMA操作 的整体性能。现在,将参考下文的图11和图12来描述使用关联于连网适配 器的示意性实施方式的结构来用于接收和传送数据的处理。图ll是 示出了一个示范性操作的图示,其示出了用于使用队列条目(被称 作"命令队列条目,,或者CQE )从PCIe端点将数据接收到主机系统 的緩沖器中的操作。首先,设备驱动器1110调取设备驱动器服务 1140以初始化一个或者多个队列数据结构(例如,命令队列数据结 构1120),用于向PCIe端点1190发送请求,该PCIe端点可以是连 网适配器,诸如以太网适配器、结构通道适配器、InfiniBandTM适配 器等。如前所述,此初始化可以包括钉住用于队列数据结构的主 机系统存储器,分配DMA地址,编程ATPT条目并设置一个位,该 位表示ATPT条目是可高速緩存的,并向设备驱动器U10返回未转 换的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端点U90将已转换的系统 存储器地址存储在PCIe端点1190中的CQE 1194的本地副本中。应该理解,可以在从针对CQE 1194的外部网络附加设备(未 示出)接收数据包之前,执行转换并将已转换的地址(即,系统存 储器或者实际存傍器地址)存储在CQE 1194的本地副本中。由此, 在由外部网络附加的i殳备发送数据包以及在PCIe端点1190中接收 数据包的时候,已转换的PCIe地址可以存储在CQE 1194的本地副 本中。一旦在PCIe端点1190中接收到结果数据包,则PCIe端点1190 发布DMA操作请求以使用本地存储的高速緩存的已转换的地址 (即,系统存储器地址,其对应于存储在CQE 1194的本地副本中的 緩沖器1124的未转换的PCIe地址)来将数据放置在緩冲器1124中。 通过在DMA操作请求的头部中设置一个位,以指示在DMA操作请 求中所使用的地址是已转换的系统存储器地址,来执行DMA操作请 求。作为结果,根联合体1150传递DMA操作请求,而不使用ATPT 1160进行地址转换,从而数据被直接写入到緩冲器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端点12卯将 来自数据緩冲器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执行对于CQE 1522中的指针(即,未转换的地址)的地址转换。当PCIe端点1590 接收地址转换的结果的时候,将结果存储在PCIe端点1590中的CQE 1594的本地副本中。由此,可以与正在执行的读取操作基本同时执 行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 适配器等)进行通信的机制。示意性实施 方式促进根据所使用PCIe端点的类型以不同方式在各种类型的 PCIe端点中将已转换的地址进行高速緩存的使用。对这些已转换的 地址高速緩存允许PCIe端点直接访问主机系统的队列、緩沖器以及 系统存储器,而不必在主机系统的根联合体中经历地址转换操作。应该理解,示意性实施方式可以采取完全硬件实施方式、完全 软件实施方式或者包含硬件或者软件元件的实施方式的形式。在一 个示范性实施方式中,以软件实现示意性实施方式的机制,软件包 括但不限于固件、驻留软件、微代码等。 此外,本发明可以采用计算机程序产品的形式,可以从提供程 序代码的计算机可用或计算机可读介质来访问该计算机程序产品, 其中该程序代码由计算机或任何指令执行系统使用或结合它们来使 用。为了说明目的,计算机可用或计算机可读介质可以是任何能够 包含、存储、通信、传播或传送用于由指令执行系统、装置或设备 使用或结合指令执行系统、装置或设备使用的程序的有形装置。该介质可以是电子、磁性、光学、电^兹、红外或半导体系统(或 装置或设备)或传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可移动计算机盘、随机存取存储器(RAM)、只 读存储器(ROM)、刚性磁盘和光盘。光盘的当前例子包括致密盘-只读存储器(CD-ROM)、致密盘-读/写存储器(CD-R/W)和DVD。适于存储和/或执行程序代码的数据处理系统将包括至少 一个 通过系统总线直接或间接耦合至存储器元件的处理器。该存储器元 件可以包括在程序代码实际执行期间所使用的本地存储器、大容量 存储器以及高速緩沖存储器,其提供至少某些程序代码的临时存储, 以减少在执行期间必须从大容量存储器中获取代码的次数。输入/输出或1/0设备(包括但不限于键盘、显示器、点击设备 等)可以直接地或通过中间1/0控制器来耦合至系统。网络适配器也 可以耦合至该系统,以使得数据处理系统能够通过介入的专用或公 共网络而耦合至其他数据处理系统或远程打印机或存储设备。调制 解调器、电缆调制解调器以及以太网卡仅是当前可用类型的网络适 配器中的一些。为了示意和描述的目的已经呈现了本发明的描述,而该描述并 不旨在穷尽或将本发明限制在所公开的形式。对本领域的普通技术 人员而言,许多修改和变更都是显而易见的。因此,选择并描述实 施方式是为了更好地解释本发明的原理及其实际应用,并使其他本 领域普通技术人员理解,具有各种变化的各种实施方式的本发明适 用于预期的特殊用途。
权利要求
1.一种用于在数据处理系统中管理用于访问所述数据处理系统的存储器的地址转换的方法,包括由设备驱动器调取设备驱动器服务,用于初始化所述数据处理系统的根联合体的地址转换数据结构中的地址转换条目;由所述设备驱动器服务在与所述根联合体相关联的所述地址转换数据结构中创建一个或者多个地址转换数据结构条目;将所述一个或者多个地址转换数据结构条目的至少一个高速缓存在耦合到所述数据处理系统的输入/输出(I/O)设备的高速缓存中;以及针对接收的与地址相关联的I/O操作,其中在所述I/O设备的高速缓存中存在针对该地址的地址转换数据结构条目,旁路与根联合体相关联的地址转换数据结构。
2. 根据权利要求1所述的方法,其中在与所述根联合体相关联 的所述地址转换数据结构中创建一个或者多个地址转换数据结构条 目包括由所述设备驱动器向设备驱动器服务传递第 一地址空间中的一 个或者多个地址,所述第一地址空间引用由所迷设备驱动器和操作 系统所使用的地址;由所述设备驱动器服务将所述第一地址空间中的一个或者多个 地址转换成为第二地址空间中的一个或者多个地址,其中所述第二 地址空间引用由所述根联合体用于引用实际存储器的已转换的地 址;由设备驱动器服务将来自引用未转换的I/O总线地址的第三地 址空间的 一个或者多个转换条目存储在所述数据处理系统的根联合 体的地址转换数据结构中,在该未转换的I/O总线地址用以引用实际 存储器之前,由所述根联合体将其转换成为所述第二地址空间中的 一个或者多个地址;以及 由所述设备驱动器服务向所述设备驱动器传递所述第三地址空 间中的一个或者多个地址。
3. 根据权利要求2所述的方法,其中所述根联合体以一个或者 多个地址转换对来自所述I/O设备的转换请求做出响应,该地址转换 将来自所述第三地址空间的一个或者多个地址转换成为所述第二地 址空间中的一个或者多个地址。
4. 根据权利要求1所述的方法,进一步包括由所述I/O设备接收无效请求,以将高速緩存在所述I/O设备的 高速緩存中的、从所述第三地址空间转换到所述第二地址空间的一 个或者多个地址转换的至少一个无效;以及由所述I/O设备将所述I/O设备的高速緩存中的至少一个条目无 效,所述条目与从所述第三地址空间转换到所述第二地址空间的一 个或者多个地址转换中的至少一个相对应。.
5. 根据权利要求4所述的方法,其中从所述设备驱动器服务或 者所述根联合体之 一 来接收所述无效请求。
6. 根据权利要求1所述的方法,进一步包括使用所述I/O设备的高速緩存中的一个或者多个高速緩存的地 址转换数据结构条目来处理来自所述I/O设备的直接存储器访问事 务请求。
7. 根据权利要求1所述的方法,其中所述设备驱动器提供在所 述数据处理系统的不受信任的逻辑分区或者系统镜像之一中,并且 所述设备驱动服务提供在受信任的虛拟化媒介中。
8. 根据权利要求7所述的方法,其中所述受信任的虚拟化媒介 是虚拟化媒介操作系统、管理程序或者服务分区之一。
9. 根据权利要求2所述的方法,进一步包括 确定来自所述I/0设备的直接存储器访问(DMA)事务是否被导向所述第三地址空间中的地址,其中在所述I/O设备的高速緩存中 存在高速緩存的地址转换数据结构条目;以及修改所述I/O操作请求,以包括与所述第三地址空间中的地址相 对应的所述第二地址空间中的地址,并且如果所述DMA事务被导向 所述第三地址空间中的地址,其中在所述I/O端点的高速緩存中存在 针对所述第三地址空间中的地址的、高速緩存的地址转换数据结构 条目,则在所述DMA事务中设置"已转换"标识符以指示所述DMA 事务包括已转换的地址。
10. 根据权利要求9所述的方法,进一步包括 执行从所述I/O设备到所述根联合体的、利用未转换的地址的DMA事务或者利用已转换的地址的DMA事务之一;根据在接收的DMA事务中是否已经设置了 "已转换"标识符,在所述根联合体中确定从I/O设备接收的DMA事务是否引用 一个或者多个已转换的地址;以及如果接收的DMA事务引用一个或者多个已转换地址,则旁路与所述根联合体相关联的地址转换数据结构,其中,如果接收的DMA事务引用 一个或者多个未转换的地址,则所述根联合体使用所述地址转换数据结构来执行地址转换操作。
11. 根据权利要求IO所述的方法,进一步包括由所述根联合 体-验i正接收的DMA事务,其中验证接收的DMA事务至少包括以下 步骤的一个检查所述1/0设备被允许执行已转换的DMA事务,其中所述I/O 设备是DMA事务的源;或者检查已经针对地址转换高速緩存使能了已转换的地址,该已转换 的地址被所述I/O设备用以执行已转换的DMA。
12. —种装置,包括 处理器;以及耦合到所述处理器的输入/输出U/0)设备,其中所述处理器执 行使得所述处理器进行以下操作的指令由设备驱动器调取设备驱动器服务,用于初始化所述数据处理系 统的根联合体的地址转换数据结构中的地址转换条目;换数据结构中创建一个或者多个地址转换数据结构条目;将所述一个或者多个地址转换数据结构条目的至少 一个高速緩存在耦合到所述数据处理系统的1/0设备的高速緩存中;以及针对接收的与地址相关联的1/0操作,其中在1/0设备的高速緩存中存在针对该地址的地址转换数据结构条目,旁路与根联合体相关联的地址转换数据结构。
全文摘要
提供了一种管理访问数据处理系统的存储器的地址转换的方法和装置,用于在设备驱动器和设备驱动器服务之间划分与端点进行通信的责任。通过该装置和方法,设备驱动器负责管理在逻辑分区和端点中的应用之间的传送请求的队列。设备驱动器进一步经由设备驱动器服务来调取存储器管理。设备驱动器服务负责管理可由端点访问的存储器,包括地址转换和保护表(ATPT)或者端点的地址转换高速缓存(ATC)和根联合体。设备驱动器服务可以联合用以在系统镜像和端点之间通信的数据结构的未转换的地址。端点可以请求将未转换的地址转换,并且可以将转换在ATC中高速缓存。
文档编号G06F12/10GK101165665SQ20071015408
公开日2008年4月23日 申请日期2007年9月13日 优先权日2006年10月17日
发明者C·A·萨尔茨伯格, D·F·莫特尔, R·J·雷西奥, S·M·瑟伯尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1