面向异构突发数据缓存的基于结构感知的I/O调度方法与流程

文档序号:21361554发布日期:2020-07-04 04:35阅读:203来源:国知局
面向异构突发数据缓存的基于结构感知的I/O调度方法与流程

本发明涉及计算机系统结构领域,尤其涉及一种面向异构突发数据缓存的基于结构感知的i/o调度方法。



背景技术:

当前大规模超算的i/o性能瓶颈主要来源于并行文件系统中磁盘的有限带宽性能。未来的e级超算的i/o存储子系统趋向多层次的异构突发数据缓存架构有希望解决多核众核芯片计算能力和磁盘数据传输能力之间的性能鸿沟导致的“i/o壁垒”问题。此结构设计的目的本质是选择将数据临时缓存在离计算节点较近的高速存储介质设备中以降低应用的等待时间。额外添加的非易失性存储器作为缓存层将减少末端并行文件系统中磁盘上的寻道时间,从而使存储系统能够提供持续的高吞吐量。

目前的相关研究针对主要针对内存和文件系统之间数据通信机制的抽象描述,只是实现了端到端的i/o读写操作优化,并未针对复杂架构的突发数据缓存系统的性能需求提供有效的i/o映射和管理能力。虽然异构突发数据缓存系统在硬件上能提供更高的i/o性能,但是由于其结构层次之间的数据移动的复杂性给数据管理带来了非常大的挑战性。

多层次的异构突发数据缓存系统通过在计算节点和存储节点之间添加更多的基于高速存储介质的存储层来提供有效的数据缓存功能。这些额外的存储层可以在许多情况下加速科学应用,例如支持检查点快递写入/读取重启、异步数据刷新和近数据端数据分析。然而,虽然越来越多的异构缓存层正在添加进大规模系统中,但如何高效地利用这些存储层来为满足支持百亿亿次计算的科学应用所要求的极端i/o并行性和性能需求是至关重要的,这对系统软件设计构成了重大挑战。

因此,亟需一种透明的数据移动和i/o调度策略来支持这种多层次的异构突发数据缓存结构,以获得高i/o性能并对用户隐藏系统架构的复杂性。



技术实现要素:

本发明的目的是提供一种面向异构突发数据缓存的基于结构感知的i/o调度方法,可以提高应用程序的端到端i/o性能。

本发明的目的是通过以下技术方案实现的:

一种面向异构突发数据缓存的基于结构感知的i/o调度方法,包括:

通过运行时模块监视活动的应用程序i/o阶段的状态,并通知数据调度模块;

所述数据调度模块具备结构干扰感知功能,对于接收到的i/o请求,所述数据调度模块检测每个存储层的负载状态,根据每个存储层的负载状态以及存储层的优先级做出数据移动方向的调度决策;如果接收到i/o结束消息,则更新各存储层的负载状态。

由上述本发明提供的技术方案可以看出,通过协调多个数据密集型应用程序的并发执行以高效透明地管理异构多层次的缓存系统中不同存储层之间的数据移动;根据分析应用程序的i/o操作和异构突发数据缓存系统中的各个存储层的状态优先级,在访问过大的情况下,可以将数据自动映射到不同的存储层以减少同一存储层中不同应用程序之间的i/o干扰,从而提高应用程序的端到端i/o性能。通过自动将数据放置在多个存储层上以平衡存储层之间的i/o负载。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。

图1为本发明实施例提供的一种面向异构突发数据缓存的基于结构感知的i/o调度方法的流程图;

图2为本发明实施例提供的基于结构感知的i/o调度算法示意图。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。

本发明实施例提供一种面向异构突发数据缓存的基于结构感知的i/o调度方法,能够分析来自每个活跃应用程序的所有i/o操作调用,并根据各种不同的数据调度策略将数据映射到不同的存储目标来实现高i/o性能。目标是通过一种对用户透明的方式来协调来自不同应用程序的i/o请求来提高应用程序性能和系统效率。该方法通过对突发性的i/o请求进行动态分流以降低本地缓存的带宽压力。为了实现跨多个缓存层次之间的自动数据传输,该方案实现了一种干扰感知的i/o重定向优化,用于最大化所有存储层的带宽利用率并减少共享缓存层中的跨应用的i/o竞争干扰。

如图1所示,为本发明实施例提供的一种面向异构突发数据缓存的基于结构感知的i/o调度方法的流程图,其主要包括:

步骤1、通过运行时模块监视活动的应用程序i/o阶段的状态,并通知数据调度模块。

本发明实时中,运行时模块由每个计算节点的独立进程在后台执行,与元数据组织器和数据调度程序通信。所述计算节点指得是实际运行应用的服务器节点,运行时模块是运行在服务器节点中的一个软件,负责监控分析在这个服务器节点上运行的所有应用程序的i/o阶段状态。

运行时模块具有应用感知功能,当活动的应用程序进入或完成某个i/o阶段时,会发出i/o请求或者i/o结束消息,运行时模块将通过捕获具体的i/o操作和时间戳信息来拦截i/o请求,并将i/o请求或者i/o结束消息发送到数据调度模块以通知相应i/o阶段的开始或结束。

一个i/o阶段开始表示一个应用准备开始读写一段数据,此时需要通知数据调度模块,数据调度模块根据i/o请求、以及目前整个存储系统的状态,决策出将数据缓存在哪个存储层次最合理(读写时间最佳)。如果i/o阶段结束,通过i/o结束消息通知数据调度模块,因为数据调度模块是根据活跃应用的i/o状态和各个存储层的状态信息来为即将开始的i/o方向做决策的。

例如,当应用程序启动并在其每个节点上调用write函数准备写数据时,会发出i/o请求,运行时模块会拦截此i/o请求并向数据调度模块发送i/o请求,指示应用程序已在该计算节点上启动了相应的i/o操作。该i/o请求主要信息有文件本身相关的(比如文件句柄、读写操作类型、读写位置、读写长度)和相关应用程序的运行时信息(例如i/o进程数)。数据调度模块和运行时模块之间的通信具有可忽略的开销,因为消息传递是由后台的系统进程来进行处理,因此不会直接影响应用程序的执行过程。

步骤2、所述数据调度模块具备结构干扰感知功能,对于接收到的i/o请求,所述数据调度模块检测每个存储层的负载状态,根据每个存储层的负载状态以及存储层的优先级做出数据移动方向的调度决策;如果接收到i/o结束消息,则更新各存储层的负载状态。

本发明实施例中,数据调度模块专为性能驱动目的而设计。数据调度模块的主要用例是在异构突发数据缓存系统中自动执行数据移动和更新。它基于各个存储层之间不同的优先级(依次为共享突发数据缓存节点、并行文件系统、以及本地nvm设备)提供自动数据移动管理并与其他模块协调。为了实现应用程序的高i/o性能,数据调度程序首先检测每个存储层的可用性(通过负载状态体现)并分析每个应用程序的i/o状态(应用程序当前是在访问哪个存储层次和i/o进程数个数)以做出数据移动方向的调度决策。例如,如果应用程序已发出i/o请求,则数据调度模块将从运行时模块调用对应i/o请求的信息,并从元数据管理器中检索每个存储层的状态,以确定此i/o操作的下一个缓冲目标地点。通过应用所选择的数据调度算法来实现实际的数据移动过程。数据调度程序是可配置和可定制的,以部署不同的i/o调度策略或算法。它还具有结构干扰感知功能(也即后文介绍的以n/2为阈值的调度方法),何时或何处刷新缓冲数据的决定也基于所选择的调度策略。其目标是降低同时访问同一共享存储层的不同应用程序之间的i/o干扰。此外,数据调度模块还负责从共享式突发数据缓存节点到并行文件系统之间的数据异步传输。

数据调度模块执行的调度算法的伪代码如图2所示,数据调度模块最多允许n/2个应用程序同时访问相同的共享存储层(即,共享突发数据缓存节点或者并行文件系统),n为系统中活动的应用程序的总数,其具体数值可以根据实际情况设定,本发明不其数值进行限定;当数据调度模块收到i/o请求时,检测共享突发数据缓存节点的负载状态,若并发访问量(concurrentaccessonbb)小于n/2,则将相应i/o请求的目的路径设置为共享突发数据缓存节点(第5-8行);否则,意味着共享突发数据缓存节点的负载比较高,处于过载状态,则检测并行文件系统的负载状态,若并发访问量(concurrentaccessonpfs)小于n/2,则将相应i/o请求的目的路径设置为并行文件系统(第9-12行),若不小于n/2,则意味着并行文件系统的负载比较高,处于过载状态,再继续分配新的i/o操作访问此层会有降低执行中的应用性能的风险。因此,当共享突发数据缓存节点与并行文件系统的访问量均不小于n/2时,将相应i/o请求的目的路径设置为本地nvm设备,以等待下一个调度决策。

数据最终的保存位置是最下层的并行文件系统,本地的nvm设备与共享突发数据缓存节点都是作为缓存作用的。如果是存在本地的nvm设备也是暂时的,会等到共享缓存节点或并行文件系统的负载不过高的时候再继续进行向下传递。当接收到i/o结束消息时,那就意味着在相应存储层中的访问量减少了,数据调度模块更新该存储层的负载状态,那下一次i/o请求的位置判断就会根据当前各个存储层最新的状态来做决策。

本发明实施例中,所述数据调度模块检测每个存储层的负载状态时,是从元数据组织器中获取每个存储层的状态。所述元数据组织器负责维护每个存储层的状态,包括:每一存储层的可用存储空间和i/o并发度(即并发运行的应用程序的数量);还用于在应用程序的i/o阶段期间跟踪每个数据文件的元数据操作,具体来说,当数据调度模块处理完实际的数据传输过程后会将完整数据文件划分为多个数据块,并且将各个数据块放置在相应的存储层中以进行下一次移动。因此,元数据管理模块负责跟踪所有数据块的位置(数据块的位置信息来自于运行时模块),以便为应用程序保留整个数据文件的完整视图。

为了便于理解,下面以两个应用程序的调度过程为例进行介绍。

应用程序的执行流程通常为计算→i/o→计算→i/o这样的循环模式。当应用程序1执行i/o请求时,首先数据将缓存在共享突发数据缓存节点中然后返回计算阶段。如果应用程序2也发起了i/o操作请求,数据调度程序将检查共享突发数据缓存节点的负载情况。如果它发现应用程序1占用了共享突发数据缓存节点的大部分带宽(假设n=2)并且并行文件系统处于相对空闲状态,则让应用程序2直接将其数据写入并行文件系统。

当应用程序1完成缓存并继续下一个计算阶段时,共享突发数据缓存节点将在后台异步的将缓存数据刷新到并行文件系统。在这段时间内缓存节点的存储空间和可用带宽都会被释放,调度模块检测到这个情况会让应用程序1重新定向其i/o路径,将其剩余数据写入到共享突发数据缓存节点的缓冲区,以获得更高的i/o带宽。在此过程中,元数据组织器始终监视并提供各个存储层的状态信息,以避免过多的应用程序同时访问相同存储层的可能性。如果存在多个应用程序同时访问共享突发数据缓存节点和并行文件系统且两者都处于接近满负荷状态。在这种情况下,调度程序会让新的i/o请求优先定向到计算节点内的nvm存储设备中,并且会根据异构突发数据缓存系统中其他存储层的状态决定将缓存数据刷新到下一目的存储路径的合适时间。

本发明实施例上述方案,可以实现与面向异构突发数据缓存的基于结构感知的i/o调度。通过协调多个数据密集型应用程序的并发执行以高效透明地管理异构多层次的缓存系统中不同存储层之间的数据移动。根据分析应用程序的i/o操作和异构突发数据缓存系统中的各个存储层的状态优先级,将数据自动映射到不同的存储层以减少同一存储层中不同应用程序之间的i/o干扰,从而提高应用程序的端到端i/o性能。通过自动将数据放置在多个存储层上以平衡存储层之间的i/o负载。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例可以通过软件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,上述实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

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