论文部分内容阅读
集群已成为当今高性能计算机的主流体系结构。集群文件系统是缓解高性能计算集群I/O瓶颈问题的核心技术。随着高性能计算技术的不断发展,很多高性能计算应用的存储需求在不断提高。Lustre是领先的集群文件系统,已经成为构建高性能计算存储系统的标准,在高性能计算市场中占据统治地位。它可以有效地扩展到支持上万个节点的大规模HPC系统,具有被证实的聚合性能和扩展性。随着高性能计算不断的以增加节点来提升系统性能,未来高性能计算集群将变得异常庞大,技术上给Lustre带来了扩展性、I/O性能和可用性等诸多严峻挑战。本文所做的工作就是紧紧围绕这些问题展开的。具体研究内容和创新成果如下:(1)针对大规模应用的并行I/O访问特性,设计了一种新颖的跨网络的服务器端I/O请求调度器框架,并提出了一种基于对象的轮转(OBRR, Object Based Round Robin)调度算法来优化性能。它通过调度上层的并行I/O请求的执行,呈现给后端存储系统更容易优化的I/O工作负载。同时,为了避免饥饿以及满足不同紧急程度I/O请求响应时间的需求,提出了一种新颖的两级deadline设置策略:动态deadline和强制deadline。一系列的模拟测试结果表明使用OBRR性能提高了40%以上,两级deadline设置策略可以保持公平性,避免饥饿,确保不同紧急程度I/O的响应时间。(2)与网络拥塞类似,当存储系统达到超大规模时,也会造成I/O拥塞问题。针对这个问题,提出了一种动态I/O拥塞控制机制来更好的支持未来的艾级规模HPC系统的存储需求。在该机制的控制下,当服务器轻载时,允许客户端发送更多的I /O请求给服务器,以达到优化网络和服务器资源利用率提高I/O吞吐率的目的;另一方面,当服务器负载过重时,它可以对客户端I/O进行节流控制,限制服务器挂起的I/O请求的数目,控制I/O延迟,避免服务器拥塞崩溃。在天河一号上的一系列评估实验结果证明了提出的拥塞控制机制的有效性:它阻止了拥塞崩溃的发生;在此前提下,它最大化了Lustre文件系统的I/O性能。(3)针对传统的固定超时机制不能适应超大规模集群环境的不足,提出了一种综合考虑网络条件、服务器负载、扩展性和性能等因素的自适应可扩展的RPC超时机制。它包括两个策略:自适应超时策略和及早回复策略。在自适应超时策略中,客户端设置的超时值可以根据客户端服务器间的网络情况以及服务器的工作负载动态的进行调整,以适应集群环境的变化,从而避免不必要的超时造成整个系统性能的降低;同时,为了区分服务器因负载过重而拥塞和网络/节点失效,以及为了解决嵌入式超时问题,提出了一种及早回复策略:当服务器知道它不能在客户端期待的响应时间内回复RPC请求时,它将提前发送一个轻量级的及早回复消息给客户端并指示一个估测的额外需要的服务时间。该策略进一步减少了超时的发生,提高了系统的响应速度。一系列的模拟评估的结果表明:与固定超时机制相比,使用自适应超时策略RPC超时率从76%降低到13%,结合及早回复策略,超时率甚至降低到0%;在基于RPC的超大规模集群系统中,其他的一些RPC失效检测机制,如客户端驱动的轮询或探测机制,会产生大量的不必要的网络流量,存在扩展性问题,而我们的机制通常只产生少量的网络流量,是一个更具有扩展性的基于超时的失效检测机制。(4)研究了Lustre分布式锁管理器技术。首先,分析了Lustre的文件访问的并发控制机制,基于锁回调的客户端目录项高速缓冲和数据写回缓冲;其次,研究了Lustre的基于意图锁的元数据操作和子树锁机制以及基于范围锁的文件大小获取算法;最后,提出了自适应I/O锁策略、基于区间树的范围锁冲突检测优化策略以及锁淘汰策略等,进一步增强了Lustre的I/O性能和锁服务的扩展性。(5)研究有状态的Lustre基于事务的元数据更新算法和恢复机制。Lustre允许服务器完成了事务的内存更新就可以将结果返回客户端,而且其结果在整个命名空间即为可见的。这种方式能够提供优异的元数据性能,但它会在服务器重启恢复(或者故障切换)时造成事务的叠加abort的问题,从而不能进行透明无缝的恢复。Lustre的重启恢复算法需要集群中所有客户端在指定的恢复时间窗口内与服务器重新建立连接,客户端重传未提交的事务请求,服务器严格按照事务序列号重放所有未提交的事务,其要求过于严格。为了提高Lustre的可恢复性,提出了基于版本恢复和共享时提交算法,它们分别对Lustre的元数据更新算法和重启恢复恢算法进行了扩展,允许客户端在更为宽松的条件下能够进行恢复重新加入到集群。基于版本的恢复算法在恢复的过程中加入了版本检查,允许操作对象版本匹配的事务进行重放恢复。在共享时提交算法中,服务器一旦检测到未提交的客户端间依赖事务时,会将它提交到磁盘来避免读或者写未提交的事务的数据,从而消除客户端间的恢复依赖关系,使得各个客户端可以独立的恢复。实验评估证明由于发生事务依赖时需要强制进行磁盘提交,共享时提交算法对性能会有所影响。尽管如此,在超大规模的Lustre集群中,为了能够提供高可靠高可用的服务,一般都会选择开启共享时提交功能。