具有应用控制的早期写确认支持的存储器访问代理系统的制作方法

文档序号:20889252发布日期:2020-05-26 17:47阅读:296来源:国知局
具有应用控制的早期写确认支持的存储器访问代理系统的制作方法

本发明通常涉及计算系统,并且更具体地涉及用于使用具有应用控制的早期写确认支持的存储器访问代理系统来将计算处理器对接到任何存储器技术的各种实施例。



背景技术:

在当今的互连和复杂社会中,计算机和计算机驱动的设备更普遍。随着集成电路的出现和进一步小型化,处理设备已经使得可以集成到各种各样的设备中。许多计算系统包括可以使用存储器总线协议来访问的计算机存储器。已经开发了若干存储器总线标准来支持不同的处理器架构,例如quickpath互连高级微控制器总线架构相干加速器处理器接口等。

对于任何存储器总线架构的挑战性要求是保证存储器访问请求的传递。为了实现这一点,存储器总线体系结构实现显式确认方案,其中对于成功完成的每个请求,确认被发送回请求发出实体(例如,处理器核)。由于读访问请求从存储器中拉取数据,因此在这种情况下正确的数据接收充当确认。另一方面,写数据请求将数据推送到存储器,并且需要在数据已经被成功写入之后明确地等待确认返回。对于任何维护程序执行完整性的计算系统,由同一发布实体发布的请求必须按顺序被服务。因此,发出许多连续写请求的应用(例如,当执行大存储器拷贝时)经历与写请求显式确认直接相关的性能影响。由于写确认不涉及数据的传递,因此存在改进执行性能的需要,例如改进表现出写密集型存储器访问模式的应用。



技术实现要素:

提供了用于使用具有应用控制的早期写确认支持的存储器访问代理系统的各种实施例。在一个实施例中,仅作为示例,提供了一种用于由处理器选择性启用具有应用控制的早期写确认支持的存储器访问代理系统。可以选择性地启用存储器访问代理,以促进早期写确认(ewack)操作(与正常/当前写确认(wack)操作相反)以及向一个或多个发布应用通知失败的ewack写请求,使得存储器访问代理记录的失败的ewack写请求,以用于由一个或多个发布应用进行检查。

在一个方面,提供了各种实施例以保证数据完整性和确定性程序执行,同时显著地改进针对存储器写访问的应用性能。在一个方面,写访问请求代理设备促进了快速ewack和向发布应用通知失败的写请求。存储器写访问请求代理设备可以在运行时被选择性地启用,以服务于具有安全利用存储器写访问请求代理设备所需的支持的应用而不影响同时活动的传统应用的执行完整性。为操作系统(os)和应用编程接口(api)提供了一个或多个解决方案,用于应用级控制、写访问请求完整性查验、支持和克服失败写的应用级处理的障碍。

作为相对于现有技术的当前状态的另一个附加特征和优点,可以在写请求的运行时选择性地启用或禁用存储器访问代理,其中存储器访问代理用作存储器总线主控器和存储器控制器受控器之间的中间代理。提供了一种或多种解决方案,用于将失败的写请求记录在与存储器访问代理相关联的一个或多个ewack寄存器中。提供了一种或多种解决方案,用于由存储器访问代理从存储器总线主控器接收写请求,或者由存储器访问代理向存储器控制器受控器发布从存储器总线主控器接收的写请求。

在另一方面,提供了一种或多种解决方案,用于由存储器访问代理从存储器控制器接收wack响应;或者由存储器访问代理向存储器总线主控器发布从存储器控制器接收的wack响应。存储器访问代理还可以为每个ewack写请求生成写请求标识符(id),并将所生成的写请求id放入队列中。

换句话说,存储器控制器发布wack(写确认请求)。存储器访问代理可以只向计算系统主控器发布ewack。应当注意,可以较早地调用"ewack",因为在ewack模式下,存储器访问代理不等待存储器控制器发送回正常wack。

作为相对于现有技术的当前状态的另一个附加的特征和优点,由存储器访问代理将从存储器控制器接收的wack响应与从队列中取回的所生成的写请求id进行比较。提供了一个或多个解决方案,用于在确定从队列中取回的所生成的写请求id不匹配从存储器控制器接收的wack响应时,由存储器访问代理在一个或多个ewack寄存器中指示失败的ewack写请求,并且由一个或多个发布应用识别记录在一个或多个ewack寄存器中的失败的ewack写请求。还提供了一个或多个解决方案,用于在识别出一个或多个ewack寄存器中指示的失败ewack写请求时,要求一个或多个发布应用重新发布每个写请求。

从第一方面来看,本发明提供了一种用于由处理器使用针地早期写确认支持的存储器访问代理的方法,包括:选择性地启用存储器访问代理,以促进早期写入确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,使得存储器访问代理记录失败的ewack写请求,以用于由一个或多个发布应用进行检查。

优选地,本发明提供一种方法,还包括在写请求的运行时选择性地启用或禁用存储器访问代理,其中存储器访问代理用作存储器总线主控器和存储器控制器之间的中间代理。

优选地,本发明提供了一种方法,还包括将失败的写请求记录在与存储器访问代理相关联的一个或多个ewack寄存器中。

优选地,本发明提供了一种方法,该方法还包括:由所述存储器访问代理从存储器总线主控器接收写请求;以及由存储器访问代理向存储器控制器发布从存储器总线主控器接收的写请求。

优选地,本发明提供了一种方法,该方法还包括:由所述存储器访问代理从所述存储器控制器接收wack响应;或者由存储器访问代理向存储器总线主控器发布从存储器控制器接收的wack响应。

优选地,本发明提供了一种方法,该方法还包括:由存储器访问代理为每个ewack写请求生成写请求标识符(id);以及将所生成的写请求id放入队列中。

优选地,本发明提供了一种方法,还包括由存储器访问代理将从存储器控制器接收的wack响应与从队列中取回的所生成的写请求id进行比较。

优选地,本发明提供了一种方法,该方法还包括:在确定从队列中取回的所生成的写请求id不匹配从存储器控制器接收的wack响应时,由存储器访问代理在一个或多个ewack寄存器中指示失败的ewack写请求;以及由一个或多个发布应用识别记录在一个或多个ewack寄存器中的失败的ewack写请求。

优选地,本发明提供了一种方法,该方法还包括:在识别出一个或多个ewack寄存器中指示的失败ewack写请求时,要求一个或多个发布应用重新发布每个写请求。

从第二观点来看,本发明提供了一种使用针对早期写入确认支持的存储器访问代理的系统,包括:具有可执行指令的一个或多个计算机,所述可执行指令在被执行时使所述系统:选择性地启用存储器访问代理,以促进早期写确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,使得失败的ewack写请求被存储器访问代理记录,以用于由一个或多个发布应用检查。

优选地,本发明提供了一种系统,其中所述可执行指令在写请求的运行时选择性地启用或禁用所述存储器访问代理,其中所述存储器访问代理用作存储器总线主控器和存储器控制器之间的中间代理。

优选地,本发明提供了一种系统,其中可执行指令将失败的写请求记录在与存储器访问代理相关联的一个或多个ewack寄存器中。

优选地,本发明提供一种系统,其中可执行指令:由所述存储器访问代理从存储器总线主控器接收写请求;以及由存储器访问代理向存储器控制器发由从存储器总线主控器接收的写请求。

优选地,本发明提供一种系统,其中可执行指令:由所述存储器访问代理从所述存储器控制器接收wack响应;或者由存储器访问代理向存储器总线主控器发布从存储器控制器接收的wack响应。

优选地,本发明提供一种系统,其中可执行指令:由存储器访问代理为每个ewack写入请求生成写入请求标识符(id);以及将所生成的写请求id放置在队列中。

优选地,本发明提供了一种系统,其中所述可执行指令通过存储器访问代理将从存储器控制器接收的wack响应与从队列中取回的所生成的写请求id进行比较。

优选地,本发明提供一种系统,其中可执行指令:在确定从队列中取回的所生成的写请求id不匹配从存储器控制器接收的ewack响应时,由存储器访问代理在一个或多个ewack寄存器中指示失败的ewack写请求;由所述一个或多个发布应用识别记录在所述一个或多个ewack寄存器中的失败ewack写请求;并且在识别出一个或多个ewack寄存器中指示的失败ewack写请求时,要求一个或多个发布应用重新发布每个写请求。

优选地,本发明提供一种用于由处理器根据非结构化文本数据发现和分析人际关系的计算机程序产品,该计算机程序产品包括具有存储在其中的计算机可读程序代码部分的非暂态计算机可读存储介质,该计算机可读程序代码部分包括:可执行部分,其选择性地启用存储器访问代理以促进早期写确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,使得失败的ewack写请求被存储器访问代理记录,以用于由一个或多个发布应用检查。

优选地,本发明提供了一种计算机程序产品,还包括可执行部分,其在写请求的运行时选择性地启用或禁用存储器访问代理,其中所述存储器访问代理用作存储器总线主控器与存储器控制器之间的中间代理。

优选地,本发明提供了一种计算机程序产品,其进一步包括可执行部分,该可执行部分将失败的写请求记录在与存储器访问代理相关联的一个或多个ewack寄存器中。

优选地,本发明提供了一种计算机程序产品,还包括可执行部分,该可执行部分:由所述存储器访问代理从存储器总线主控器接收写请求;由所述存储器访问代理向存储器控制器发布从所述存储器总线主控器接收的所述写请求;由所述存储器访问代理从所述存储器控制器接收wack响应;或者由存储器访问代理向存储器总线主控器发布从存储器控制器接收的wack响应。

优选地,本发明提供了一种计算机程序产品,还包括可执行部分,该可执行部分:由存储器访问代理为每个ewack写请求生成写请求标识符(id);并将所生成的写请求id放入队列中。

优选地,本发明提供了一种计算机程序产品,还包括可执行部分,其由存储器访问代理器将从存储器控制器接收的wack响应与从队列中取回的所生成的写请求id进行比较。

优选地,本发明提供了一种计算机程序产品,还包括可执行部分,该可执行部分:在确定从队列中取回的所生成的写请求id不匹配从存储器控制器接收的ewack响应时,由存储器访问代理在一个或多个ewack寄存器中指示失败的ewack写请求;以及由一个或多个发布应用识别记录在一个或多个ewack寄存器中的失败ewack写请求。

优选地,本发明提供了一种计算机程序产品,其进一步包括可执行部分,该可执行部分在识别出在一个或多个ewack寄存器中指示的失败的ewack写请求时,要求一个或多个发布应用重新发布每个写请求。

附图说明

为了容易地理解本发明的优点,将通过参考在附图中示出的具体实施例来呈现对以上简要描述的本发明的更具体的描述。应当理解,这些附图仅描述了本发明的典型实施例,因此不应被认为是对其范围的限制,将通过使用附图利用附加特征和细节来描述和解释本发明,其中:

图1是描绘根据本发明的实施例的示例性云计算节点的框图;

图2是描绘根据本发明实施例的示例性云计算环境的附加框图;

图3是描绘根据本发明实施例的抽象模型层的附加框图;

图4a-4b是描绘根据本发明的各方面的早期写确认(ewack)操作和非早期写确认(wack)操作性能比较的图;

图5a-5d是描绘根据本发明的各方面的存储器访问代理系统的示例性使用的图;以及

图6是描绘了其中可以实现本发明的各方面的、使用具有应用控制的早期写确认支持的存储器访问代理系统的附加示例性方法的流程图。

具体实施方式

存储器写访问可以由中央处理器单元(cpu)或直接存储器访问(dma)引擎向外部存储器设备控制器发出,外部存储器设备控制器诸如例如动态随机存取存储器控制器("ddr")、混合存储器控制器("hmc")或分离的存储器系统。当启动对存储器的写访问时,cpu或直接存储器访问dma数据路径执行可能停止,直到接收到写访问响应确认。确认可以保证程序执行完整性。然而,应用的执行性能对存储器访问延迟非常敏感,特别是在等待对写请求的确认时。存储器访问延迟可能在高度耦合的系统(例如,动态随机访存取储器("ddr")可能实现10纳秒("ns")的响应延迟)和必须通过网络访问存储器介质的控制器(例如,分离的存储器系统可能需要数百ns)之间变化。

更具体地,计算应用完全依赖于计算硬件以用于存储器访问完整性。如果存储器访问请求失败,则计算硬件通过停止或触发系统重新引导来立即检测到存储器访问请求失败。因此,需要保证程序执行完整性并提高严重依赖于写访问性能的计算应用的执行性能,同时减少存储器访问延迟。因此,本发明旨在改进严重依赖于存储器写访问性能的计算应用的性能。

在一个方面,存储器控制器子系统可以使用早期写确认("ewack"或"ewack响应")来保证cpu对存储器访问写请求的有序传递。cpu不期望从存储器控制器接收确认,并且在写请求数据离开cpu之后立即继续执行。根据由程序发出的写请求的数目,ewack可以将执行性能提高一个数量级。当使用ewack操作时,可以将保证写请求实际上被传递的责任卸载到存储器控制器。因此,控制器应当执行诸如例如i)缓冲请求、ii)流控制、iii)确认方案的实现和iv)数据完整性查验之类的任务。然而,这些任务中的每一个都可能在关键路径中引入显著的延迟,这可能使性能增益减小到零。因此,本发明提供了一种附加的操作模式,其中可以在硬件和计算应用组件之间划分责任。这通过使计算应用程序能够容忍ewack相关的错误并从ewack相关的错误中恢复,以实现显著的性能改进并显著地减少存储器访问延迟,来提供了优于现有技术的附加特征和优点。

在另一方面,所说明的实施例的机制提供了使用具有应用控制的ewack操作支持的存储器访问代理系统。存储器访问代理设备可以在存储器总线主控器和存储器控制器受控器之间交错。可以选择性地启用存储器访问代理设备,以促进早期写确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,以便存储器访问代理记录失败的ewack写请求,以用于由一个或多个发布应用进行检查。

存储器总线请求代理系统可以是计算硬件和计算机应用程序共同设计的系统。系统的计算硬件部分可以是存储器总线请求代理,并且在每个存储器总线主控器和一个存储器控制器受控器之间交错。存储器总线请求代理ewack功能可以在运行时通过计算机应用控制的硬件开关自动启用或禁用,并且由操作系统内核通过存储器映射寄存器来控制。

在一个方面,提供了各种实施例以保证数据完整性和确定性程序执行,同时显著地改进针对存储器写访问的应用性能。在一个方面,写访问请求代理设备促进了快速ewack和向发布应用通知失败的写请求。存储器写访问请求代理设备可以在运行时被选择性地启用,以服务于具有对安全利用存储器写访问请求代理设备所需的支持的应用而不影响同时活动的传统应用的执行完整性。本发明提供了一种操作系统(os)和应用编程接口(api)支持,用于应用级控制、写访问请求完整性查验和用于失败的写的应用级处理的屏障。

通过在各种计算架构内,例如在分离的存储器系统中,使用存储器访问代理系统,提供了优于现有技术的附加特征和优点。例如,在分离的存储器系统中,存储介质驻留在不同的物理服务器托盘中,经由低延迟、高速互连(例如,光学电路和交换机)互连到cpu和dma,并且具有比本地存储器明显长得多的访问延迟。虽然理论上可以将互连配置成提供无损通信信道,但是沿着存储器访问路径的设备可能意外地发生故障或停止。因此,如本文所述,存储器访问代理设备使得分离的存储器系统能够防止沿着存储器访问路径的设备意外故障或停止。

预先理解,尽管本公开包括关于云计算的详细描述,但是本文中记载的教导的实现不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其它类型的计算环境来实现。

云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。

特征包括:

按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。

广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理pda)对云的使用。

资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。

可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。

服务模型如下:

软件即服务(saas):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。平台即服务(paas):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。

基础架构即服务(iaas):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。

部署模型如下:

私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。

共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。

公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。

混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。

云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。

现在参考图1,其中显示了云计算节点的一个例子。图1显示的云计算节点10仅仅是适合的云计算节点的一个示例,不应对本发明实施例的功能和使用范围带来任何限制。总之,云计算节点10能够被用来实现和/或执行以上所述的任何功能。

在云计算节点10中,存在计算机系统/服务器12,其可与许多其他通用或专用计算系统环境或配置一起操作。适合与计算机系统/服务器12一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型计算机系统、大型计算机系统、以及包括任何上述系统或设备的分布式云计算环境等。

计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机系统/服务器12可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

如图1所示,云计算节点10中的计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18

总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。

计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是能够被计算机系统/服务器12访问的任意可获得的介质,包括易失性和非易失性介质,可移除的和不可移除的介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。

具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。

计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,其它硬件和/或软件模块可以与计算机系统/服务器12一起操作,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

在本发明的上下文中,并且如本领域技术人员将理解的,图1中描绘的各种部件可以位于移动车辆中。例如,与所示实施例的机制相关联的一些处理和数据存储能力可以经由本地处理组件本地发生,而相同的组件经由网络连接到远程定位的分布式计算数据处理和存储组件以实现本发明的各种目的。此外,如本领域普通技术人员将理解的,本说明旨在仅传达可以是共同实现各个发明方面的分布式计算组件的整个连接网络的子集。

现在参考图2,其中显示了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或者多个云计算节点10,本地计算设备例如可以是个人数字助理(pda)或移动电话54a,台式电脑54b、笔记本电脑54c和/或汽车计算机系统54n。云计算节点10之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本地计算设备上维护资源就能请求云计算环境50提供的基础架构即服务(iaas)、平台即服务(paas)和/或软件即服务(saas)。应当理解,图2显示的各类计算设备54a-n仅仅是示意性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。

现在参考图3,其中显示了云计算环境50(图2)提供的一组功能抽象层。首先应当理解,图3所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如图3所示,提供下列层和对应功能:

设备层55包括嵌入有和/或独立的电子器件、传感器、致动器和其他对象以在云计算环境50中执行各种任务的物理和/或虚拟设备。设备层55中的每个设备将联网能力结合到其他功能抽象层,使得从设备获得的信息可以被提供给该设备,和/或来自其他抽象层的信息可以被提供给设备。在一个实施例中,包括设备层55在内的各种设备可以并入统称为"物联网"(iot)的实体的网络。如本领域普通技术人员将理解的,这样的实体网络允许数据的相互通信、收集和传播以实现各种目的。

如图所示,设备层55包括传感器52、致动器53、具有集成处理、传感器和联网电子设备的"学习"恒温器56、相机57、可控家用插座/插口58以及可控电开关59,如图所示。其它可能的设备可以包括但不限于各种附加传感器设备、联网设备、电子设备(诸如远程控制设备)、附加致动器设备、所谓的"智能"电器(诸如冰箱或洗衣机/干衣机)以及各种各样的其它可能的互连对象。

硬件和软件层60包括硬件和软件组件。硬件组件的例子包括:主机61;基于risc(精简指令集计算机)体系结构的服务器62;服务器63;刀片服务器64;存储设备65;网络和网络组件66。软件组件的例子包括:网络应用服务器软件67以及数据库软件68。

虚拟层70提供一个抽象层,该层可以提供下列虚拟实体的例子:虚拟服务器71、虚拟存储72、虚拟网络73(包括虚拟私有网络)、虚拟应用和操作系统74,以及虚拟客户端75。

在一个示例中,管理层80可以提供下述功能:资源供应功能81:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价功能82:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个例子中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户功能83:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(sla)计划和履行功能85:为根据sla预测的对云计算资源未来需求提供预先安排和供应。

工作负载层90提供了可以利用云计算环境的功能的示例。可以从该层提供的工作负载和功能的示例包括:绘图和导航91;软件开发和生命周期管理92;虚拟教室教育传递93;数据分析处理94;交易处理95;并且在本发明的所示实施例的上下文中,各种存储器访问代理系统具有应用控制的早期写确认工作负载和功能96。此外,具有应用控制的早期写确认工作负载和功能96的存储器访问代理系统可以包括诸如数据分析(包括来自各种环境传感器的数据收集和处理)和预测数据分析功能之类的操作。本领域的普通技术人员将理解,具有应用控制的早期写确认工作负载和功能96的存储器访问代理系统还可以结合各种抽象层的其他部分工作,诸如硬件和软件60、虚拟化70、管理80和其他工作负载90(例如,诸如数据分析处理94)中的那些抽象层,以实现本发明的所示实施例的各种目的。

如前所述,所示实施例的机制提供了新颖的方法,以保证数据完整性和确定性程序执行,同时显著地改善存储器写访问的应用性能。在一个方面,写访问请求代理设备促进了快速早期写确认和对发布应用的失败的写请求的通知。存储器写访问请求代理设备可以在运行时被选择性地启用,以服务于具有安全利用存储器写访问请求代理设备所需的支持的应用而不影响同时活动的传统应用的执行完整性。提供了一种或多种解决方案,用于支持应用级控制、写访问请求完整性查验和用于失败的写的应用级处理的屏障的操作系统(os)和应用编程接口(api)。

这些机制包括再次由处理器选择性地启用具有应用控制的早期写确认支持的存储器访问代理系统的功能。可以选择性地启用存储器访问代理,以确认早期写确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,以便存储器访问代理记录失败的ewack写请求,以便由一个或多个发布应用进行检查。

现在转到图4a-4b,是描述早期写确认(ewack)和非早期写确认(wack)性能比较的图400、425。考虑以下两个用于比较ewack和wack性能的例子。

对于图400、425,假设cpu和存储器("mem")之间的对称的二十周期64位流水线(例如,10级请求/10级响应)。换句话说,10级写请求是前10个周期,10级写响应是后10个周期,总共20个周期。还假定对于请求序列,存在四个顺序发出的192位写数据请求(例如,响应0、1、2和3)。wack可以是64位。请求流水线可传递写数据和响应流水线wacks。还假设每个写请求("请求")需要三个周期(例如192位/64位)以便使所有数据在流水线中传输。

现在转到图400,针对第一写请求(例如,请求0)的前64位到达存储器,示出了ewack和wack之间的差异。更具体地说,图400说明了对于wack,只有请求0(例如,第一个64位请求)处于第一个写请求到达存储器的传输中。只有在从存储器返回对请求0的写响应时,才可以在流水线上的传输中向存储器发出下一个写请求,例如请求1。对于每个随后的写请求(例如,请求2和3)继续该相同的过程。相反,ewack操作消除了这样的存储器访问延迟,并且使得每个写请求,诸如例如请求0-3,能够在流水线中同时被顺序发出并传输。

现在转到图4b的图425,当从存储器发出第一请求响应(例如,请求0)并到达cpu时,描述ewack和wack之间的性能差异。所有的64位ewacks(对于请求0-3)在ewack的响应流水线上处于传输中。相反,在wack的同一周期,除了几乎完成(例如,完成20个周期)的仅第一请求(例如,请求0)之外,请求流水线和响应流水线都是空的。

更具体地说,反映总ewack响应时间的表450示出了对于写访问请求0,开始周期开始于0,结束周期在20完成。对于写访问请求1,开始周期开始于3,结束周期在23完成。对于写访问请求2,开始周期开始于6,结束周期在26完成。对于写访问请求3,开始周期开始于9,结束周期在29完成。也就是说,写突发在周期29结束。

wack的表475示出了对于写访问请求0,开始周期开始于0,结束周期在20完成。对于写访问请求1,开始周期开始于21,结束周期在41完成。对于写访问请求2,开始周期开始于42,结束周期在62完成。对于写访问请求3,开始周期开始于63,结束周期在83完成。也就是说,写突发在周期83结束。如图所示,与wack相比,ewack操作可以为图4b的所有总的写请求实现54个周期的减少。

使用ewack操作,本发明能够支持ewack,而不需要存储器控制器子系统保证传递,以便最大化性能。为了支持这一点,所示实施例的机制监视关键存储器访问路径之外的写确认失败并对其进行记录,并使记录的写确认失败信息可用于应用。周期性地查验写请求错误并采取纠正动作的责任被传递到应用级。此外,作为相对于现有技术的另一个附加特征和优点,可以仅针对与应用的执行相关的请求选择性地启用ewack功能,该应用可以处理写请求访问错误,从而允许传统应用并发且安全地执行,而不需要修改。

鉴于上述内容,现在考虑图5a-5d中描绘的以下示例。如图5a所示(以及图5b-5c所示),存储器总线请求代理系统500可以包括存储器总线请求代理510("请求代理"或"ewack代理"),其可以在各种计算体系结构框架中使用。存储器总线请求代理系统500可以是计算硬件和计算机应用共同设计的系统。在一个方面,计算系统可以包括存储器总线请求代理510、与操作软件("os")502相关联的程序501、cpu504、dma506、诸如存储器总线主控器508之类的总线、存储器控制器514、以及可以耦合到存储器总线请求代理510的一个或多个ewack寄存器512。

在一个方面,存储器总线请求代理510可以耦合或交错在存储器总线主控器508和存储器控制器514之间,并且可以将写请求失败记录在一组存储器映射寄存器中,诸如例如,ewack寄存器512。ewack寄存器512可以由os502独立地和安全地检查。

鉴于上述内容,考虑存储器总线请求代理系统500的以下操作示例。作为初步问题,为了说明各种示例实施例,存储器总线请求代理510可以从存储器总线主设备508接收写请求。存储器总线请求代理510可以向存储器控制器514发出写请求。存储器总线请求代理510可以从存储器控制器514接收wack响应。存储器总线请求代理510可以向存储器总线主控器508发布从存储器控制器514接收的wack响应。然而,存储器总线请求代理510的ewack功能可以在运行时经由cpu504(例如,计算机应用控制的硬件开关)自动启用或禁用,并且可以由os502的内核通过ewack寄存器512来控制。

现在转到图5b,存储器总线请求代理510可以从存储器总线主控器508接收写请求。在写请求到达时,存储器总线请求代理510可以查验并确定写请求应当是ewack写请求还是非ewack写请求。如果写请求是ewack请求,则可以替换由存储器总线主设备508协议提供的默认请求标识符("id")。替换id可以是复合标识符,其编码1)发出写请求的cpu或dmaid,2)写请求id和3)由请求代理器510内部管理的计数器。前两个字段(即,cpu/dmaid和写请求id)由存储器总线主控器508协议提供。也就是说,cpu/dmaid和写请求id都可以由存储器总线协议提供(即,在存储器请求头部中)。cpu/dmaid和写请求id可以被组合成一个id,该id标识用于执行ewack代理(例如,存储器总线请求代理510)任务的事务。

复合id可以被推向队列520,诸如例如,朝向响应流水线的先进先出("fifo")队列520,并且可以被用作外出写请求的分配的id。如果确定写请求不是早期确认的(例如,非ewack写请求),则不加改变地转发写请求,并且可以使用从存储器总线主设备508协议提供的默认id。

此外,取决于针对写请求发布者组件,诸如os502,存储器总线请求代理510的ewack模式是被启用还是被禁止,存储器总线请求代理510可以1)立即将ewack发送回发布者应用(例如,与cpu504相关联的程序501)(ewack模式),或者2)等待并中继将由存储器控制器514在实际的写处理完成之后生成的wack。即,在ewack模式中,1)存储器总线请求代理510可以立即响应发布实体(ewack确认),而不等待控制器(例如,存储器控制器514)进行确认,和/或2)存储器总线请求代理510可以不产生ewack,而是允许控制器(例如,存储器控制器514)响应正常的wack(例如,非ewack)。

存储器控制器514可发送对于存储器控制器514接收的所有写请求的写确认,特别是因为存储器控制器514不知道或不注意由存储器总线请求代理510执行的操作。

继续图5a-5b中所示的例子,现在转到图5c,存储器总线请求代理510可以从存储器控制器514接收写确认(例如wack响应)。当存储器总线请求代理510从存储器控制器514接收到写确认530时,存储器总线请求代理510可以从fifo队列520取回下一个复合id("id")(例如,根据fifo操作的下一个复合id)。存储器总线请求代理510可以将从fifo队列520取回到的复合id与从存储器控制器514接收到的写确认530(例如wack响应)进行比较。例如,当存储器总线请求代理510向存储器控制器514发布具有id"x"的请求时,则针对该请求的存储器控制器514的响应包含idx。这使得存储器总线请求代理510能够将请求id与存储器控制器响应id相匹配。因为请求在此层级被串行化,所以如果响应未回来,那么相应请求id将在fifo操作期间无法匹配,以便识别失败的请求。

对于在ewack模式下发布的请求,如果从fifo队列520中取回的复合id和从存储器控制器514接收的写确认响应530的写确认id匹配,则存储器总线请求代理510丢弃该响应(因为ewack先前已经被传递)。在非ewack模式下,写确认530被转发到存储器总线主控器508。

另一方面,在ewack模式下,如果根据比较操作,从存储器控制器514接收的写确认响应530的复合id和写确认id不匹配,则存储器总线请求代理510可以记录或"设置"一个或多个当前有效的ewack寄存器512中的指定位。由于所有写请求都是由于单个存储器控制器514而按顺序回复的,因此每个取回的复合id都应当与从存储器控制器514接收到的到来的写确认530相匹配,除非丢失了前一个。通过在一个或多个当前活动的ewack寄存器512中设置指定的位,该位用作失败的ewack写请求的指示。

现在转到图5d,如果已经指示了失败的ewack写请求,存储器总线请求代理510可以已经在一个或多个当前有效的ewack寄存器512中设置了指定的位。因此,图5d指示了需要计算应用,例如程序501和相关的os502,来启用/禁用ewack模式,并且当针对执行流它是适当和安全的(即,在检测到写请求失败的情况下可以安全地重复)时查验ewack寄存器512。这是因为计算应用将在存储器总线请求代理510检测到失败的写入之前继续执行。因此,计算机应用需要查验失败的ewack写请求。也就是说,需要应用级支持(例如,计算机应用帮助存储器总线请求代理510检测、识别和响应失败的写请求),以便针对失败的写请求适当地检查存储器映射ewack寄存器512,以便处理和解决可能的写故障。此外,对于不能处理写故障的代码块,需要计算机应用(例如,应用级支持)禁用存储器总线请求代理510中的ewack操作模式。对ewack寄存器512(例如,存储器映射寄存器)的访问延迟极低,因此计算应用可以以可忽略的开销(频繁地或周期性地)检查ewack寄存器512。当应用请求禁用ewack操作时,也可能需要操作系统支持来安全地启用/禁用存储器总线请求代理510中的ewack操作模式,并且还用于保护ewackdma传递不发生写故障。因此,如果发布应用在ewack寄存器512中检测到失败的写请求,则在识别出一个或多个ewack寄存器512中指示的失败的ewack写请求时,可以要求发布应用在重新发布每个写请求。

在一个方面,应用级支持可以包括ewackos服务注册操作、服务启用/禁用操作和存储器写完整性屏障操作。当计算应用进入在写访问失败的情况下可以重复的处理块时,应当启用应用级支持服务,并且可以在代码中进行存储器完整性屏障查验。在屏障查验失败的情况下,计算应用程序可采取一个或多个动作。

在另一方面,操作系统级支持使得ewack服务在每个os进程的基础上可用。例如,每当进程调度器决定将cpu授予新的应用时,os可在实际上下文切换之前执行以下查验。os可查验非均匀存储器访问("numa")域,以确认计算机应用使用了ewack访问能力的存储器,并决定对于应用程序将要在其上执行的特定cpu,哪些ewack代理(因为在计算机系统中可能有多于一个的ewack代理)被启用或禁用。用于启用ewack操作的启用命令可以是原子的(对当前cpu的代理控制寄存器的单字节存储器映射写)。在接收到用于ewack操作的启用命令时,ewack代理可以阻塞所有的请求流量,并且可以在ewack代理响应写请求之前等待所有的传输中请求完成。在完成所有接收到的传输中请求之后,可以解除阻塞请求业务。用于禁用ewack操作的禁用命令不停止任何写请求业务,并且被立即应用。

作为相对于当前技术状态的另一附加特征和优点,可以向应用提供用户空间库,以使得能够使用ewack操作功能。用户空间库可以由os级ewack支持来备份。如下面的伪代码示例中所示,一个或多个潜在的“ewackmode_enable”和“ewackmode_disable”api分别启用和禁用当前进程的ewack操作功能。应注意,“ewackmode_enable”操作可以是用户库操作功能,并且可以不直接驱动先前描述的硬件/软件开关的启用。“ewackmode_check”操作可以查验是否存在任何写入错误,并且可以重置用于该进程的ewack寄存器。由应用程序决定何时使用ewack模式,并决定查验的粒度。此外,应用可以决定执行什么恢复动作(在该示例中,重启计算)。

用于一个或多个潜在的“ewackmode_enable”和“ewackmode_disable”api的伪代码分别启用和禁用ewack操作功能:

作为相对于现有技术的另一附加特征和优点,dma传递可以各自在具有os支持的ewack模式下执行,如下所述。dma引擎可以由设备驱动器使用操作系统库来编程。在启动dma传递之前,os可以查验目的地numa区域,并且决定在相应的ewack代理上为该dmaid启用ewack。当dma传递完成并且发出已完成中断时,在已完成中断处理程序的上下文中并且在将控制传递回应用之前,os可以查验或检查被分配给该dma传递的相应ewack代理ewack寄存器。在报告错误(例如,失败的写请求)的情况下,可以重复编程的传递,而不是将控制传送给发布dma传递的应用。如果没有报告的错误,则执行可以在计算系统中正常进行。每个os进程和设备驱动器(用于dma)可以在注册期间被分配唯一的ewack寄存器,并且当执行该进程时可以是活动的以用于更新。

现在转向图6,描述了用于使用具有应用控制的早期写确认支持的存储器访问代理系统的方法600,其中可以实现所图示的实施例的各个方面。即,图6是根据本发明的示例的用于在计算环境中使用具有应用控制的早期写入确认支持的存储器访问代理系统的附加示例方法600的流程图。功能600可以被实现为作为机器上的指令执行的方法,其中指令被包括在至少一个计算机可读存储介质或一个非暂时性机器可读存储介质上。功能600可以在框602中开始。可以选择性地启用存储器访问代理,以促进早期写确认(ewack)操作和向一个或多个发布应用通知失败的ewack写请求,使得存储器访问代理记录失败的ewack写请求,以用于由一个或多个发布应用进行检查,如框604所示。功能600可以在框606中结束。

在一个方面,结合和/或作为图6的至少一个框的一部分,600的操作可以包括以下各项中的每一个的一个或多个。600的操作可以在写请求的运行时选择性地启用或禁用存储器访问代理。存储器访问代理可以用作存储器总线主控器与存储器控制器之间的中间代理。600的操作可以将失败的写请求记录在与存储器访问代理相关联的一个或多个ewack寄存器中(例如,在寄存器中设置指示失败的写请求的位)。600的操作可以由存储器访问代理从存储器总线主控器接收写请求,或者由存储器访问代理向存储器控制器发布从存储器总线主控器接收的写请求。

在附加方面,600的操作可以由存储器访问代理从存储器控制器接收wack响应;或者由存储器访问代理向存储器总线主控器发布从存储器控制器接收的wack响应。存储器访问代理还可以为每个ewack写请求生成写请求标识符(id),并将所生成的写请求id放入队列中。

600的操作可以由存储器访问代理将从存储器控制器接收的wack响应与从队列中取回的所生成的写请求id进行比较。600的操作可以在确定从队列中取回的所生成的写请求id不匹配从存储器控制器接收的wack响应时,由存储器访问代理在一个或多个ewack寄存器中指示失败的ewack写请求,并且由一个或多个发布应用识别记录在一个或多个ewack寄存器中的失败的ewack写请求。另外,600的操作可以要求一个或多个发布应用在识别出一个或多个ewack寄存器中指示的失败ewack写请求时,重新发布每个写请求。

因此,如本文所述,本发明提供了一种存储器访问代理系统,其保证数据完整性和确定性程序执行,同时显著地改善了存储器写访问的应用性能。存储器访问代理系统可以包括硬件存储器写访问请求代理,其促进快速ewack和向发布应用通知失败的写请求。存储器访问代理系统可以在运行时被选择性地启用,以服务于具有安全利用其所需支持的应用,而不影响同时活动的传统应用的执行完整性。存储器访问代理系统包括操作系统和应用编程接口支持,用于应用级控制、写完整性查验和用于失败写的应用级处理的屏障。

这样,通过从性能的角度有效地实现在诸如例如云和数据中心系统的各种计算系统和架构中使用远程存储器,本发明提供了优于现有技术的附加特征和优点。更具体地,具有应用控制的早期写确认支持的存储器访问代理可以在分离的存储器(例如,“扩展存储器”)中实现并与其一起使用。因此,在没有存储器访问代理系统的情况下,存储器写入将继续具有过高的延迟,从而减少远程或扩展存储器的返回和价值。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括其上具有计算机可读程序指令的计算机可读存储介质(或多个介质),所述计算机可读程序指令用于使处理器执行本发明的各方面。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据,或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言(例如smalltalk、c++等)以及常规的过程式编程语言(例如"c"编程语言或类似的编程语言)。计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上执行,作为独立的软件包执行,部分在用户的计算机上并且部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(lan)或广域网(wan),或者可以连接到外部计算机(例如,使用因特网服务提供商通过因特网)。在一些实施例中,为了执行本发明的各方面,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1