本文摘要:摘要:新型非易失存储(NVM)可字节寻址,具有近似内存的低延迟特性以及外存的非易失性,受限于软硬件技术成熟度,目前首先被用于了外存。讨论了NVM用于持久性外存所面临的一系列问题以及管理上的一些挑战。接着对现有的典型NVM文件系统及其主要特性进行了梳理
摘要:新型非易失存储(NVM)可字节寻址,具有近似内存的低延迟特性以及外存的非易失性,受限于软硬件技术成熟度,目前首先被用于了外存。讨论了NVM用于持久性外存所面临的一系列问题以及管理上的一些挑战。接着对现有的典型NVM文件系统及其主要特性进行了梳理,归纳起来,这些特性主要围绕降低一致性开销、降低软件栈开销、内存与外存的融合、分布式文件系统、NVM文件系统安全、容错、空间管理等几个方面展开。最后,展望了NVM文件系统仍然有待探讨的几个研究方向,包括扩展性问题、虚拟内存与文件系统的有机融合,以及分布式文件系统等。
关键词:非易失存储;文件系统;虚拟内存;持久性外存;远程直接内存访问
0引言
存储和计算是计算机系统的两大子系统。在搜索引擎、社交网络、电子商务等主流应用中,I/O和访存已经占据了很大比重。一些数据密集型应用中,无论是内存容量还是外存带宽和延迟,已经难以满足计算需求,成为制约计算机系统性能提升的主要瓶颈。近年来,各种新型非易失存储(NonvolatileMemory,NVM)器件相继出现,如相变存储器(PCM)、自旋转移力矩随机存储器(STT-RAM)、电阻随机存储器(RRAM)等,给存储系统的设计带来前所未有的机遇。它们可字节寻址,且同时具有现有内存相当的性能和外存的非易失性,因此不仅可用做工作内存(workingmemory),以缓解现有内存容量扩展能力不足的问题,也可用做持久性外存(persistentstorage)。
计算机评职知识:可快速投稿的计算机核心期刊
因为NVM同时具有内存的字节可寻址和外存的非易失等两类存储介质的双重特性,因此也称之为持久性内存(persistentmemory)或新型NVM。所谓新型NVM,是为了与早期文献中提到的闪存区别开来,后者也归为NVM,但属于块设备。理论上,新型NVM可用于计算机系统的所有存储层次。但从产品而言,目前已量产的只有Intel的傲腾持久性内存和固态SSD盘两种,由于NVM存在写延迟和功耗高、写入次数有限等问题,以及价格因素,短期内还很难作为商用的工作内存使用,而固态盘与传统硬盘相比,优势明显,因此,在电商、金融等延迟敏感的I/O密集型应用中有很大的市场潜力。
因此,本文重点讨论NVM用做持久性外存(即外存)时面临的诸多挑战、研究现状及未来的方向。众所周知,现有的操作系统都是针对二级存储模型设计的,即工作内存和持久性外存,通过虚拟内存和文件系统两个子模块分别对它们进行管理。与传统的硬盘相比,NVM有两个根本的变化,一是可字节寻址,二是延迟有几个数量级的下降。因此,尽管可以沿用现有的面向块设备的文件系统,但软件栈开销所占比重太大,难以发挥NVM的低延迟优势。围绕如何使用NVM的持久性,学术界和工业界已进行了大量探索,大致有两个方向,一是使用持久性堆[41,43]的内存管理模式,二是使用文件系统[6,8,16,17,23,26,34]的外存管理模式。
持久性堆的管理模式涉及到编程模型、编译器、操作系统等整个软件生态的重构,工程浩大,因此,短期来看,在兼容传统文件系统编程接口的基础上构建轻量级的NVM文件系统是较为现实的选择。因此,最近几年,面向NVM的文件系统研究得到了极大关注[32,33]。 随着器件技术的不断成熟,应用单一NVM构建统一的单级存储结构,实现内存与外存的最终融合已理论上可行。单级存储结构彻底消除了数据在内存与外存之间的流动,从而显著降低了传输延迟和功耗[1]。内外存融合之后,现在的操作系统中分别管理内存和外存的内存管理和文件系统两个功能模块将合二为一,现在的内存和外存两个完全不同物理存储介质也合二为一。
然而,要实现内存与外存的真正融合,需要重构整个软件栈,是系统性工程,学术界有很多设想,但由于缺少工业界的参与,进展缓慢,但毫无疑问,内外存融合是终极目标。因此,本文着重探讨NVM出现以后文件系统如何设计。NVM的出现给文件系统安全、分布式存储系统也带来了变革和挑战,为了内容完整也略做了阐述,但由于篇幅所限无法详细展开,读者可参考其他综述文献,本文重点聚焦NVM文件系统中最核心部分“如何降低一致性开销”和“如何降低软件栈开销”等内容上。本文的思路如下:首先介绍持久性外存由传统的块设备(机械硬盘或固态硬盘)替换为字节寻址设备NVM后计算机存储系统发生的变化,接着介绍当NVM用于持久性外存时如何对其进行管理;随后针对NVM文件系统的几个关键问题,阐述了研究现状,最后对可能的研究方向进行了展望。
1NVM作为持久性外存带来的变化
1.1极低的访问延迟NVM具有接近内存的极低访问延迟,即便与flash固态盘相比,访问延迟也有几个数量级的下降。由于传统的持久性外存的访问延迟高,使得现有的文件系统的软件栈开销所占比重可以基本忽略,而由于NVM的读写延迟极低,使得这些软件开销被放大成百上千倍,不仅忽略不了反而成了影响性能的主要瓶颈,这就要求专门设计面向NVM的文件系统。
1.2可挂在内存总线上与传统的持久性外存相比,NVM最大的特点就是字节可寻址特性,使得它可以像内存一样直接挂在内存总线上,并使用Load/Store接口对其进行访问。传统的机械硬盘或flash固态硬盘是块设备,只能通过文件系统的方式进行管理,而块设备文件系统IO路径长,其中的很多层次对NVM而言都是多余的,使得软件开销比重过大,难以发挥NVM的低延迟优势,需要大幅精简。更重要的是,当NVM作为持久性外存直接挂在内存总线上时,CPU高速缓存将可以直接与持久性外存交互,为了保证持久化数据的一致性,需要不断地将数据从缓存刷到NVM,频繁的刷新操作带来很大的开销,这是一个新问题,也是NVM文件系统的一个研究重点。
1.3存储层次的深刻变化
传统的计算机系统都是二级存储模型,即内存和外存。NVM的字节寻址和非易失性,使它具有了内存和外存的双重特性,因此学术界一直在探索能否基于NVM实现内外存的真正融合,即,不仅物理上不需要提前将NVM的空间划分工作内存和持久性外存,而且逻辑上也不再加以区分,操作系统的内存管理和文件系统两个子模块也合并为一个模块,这种结构目前称之为单级存储结构(single-levelstore)。
研究表明[1],即使所有的存储介质均使用NVM,二级存储结构的延迟和功耗也要高出单级存储结构四倍,原因在于单级存储结构消除了数据在两级存储介质之间的传输,降低了传输的开销和功耗。然而,要实现这种真正融合,系统软件栈面临巨大挑战[3],因为现有的操作系统是通过完全不同的机制来管理内存和外存的,并且,程序的执行、空间的管理、存储的格式、以及系统的启动也都是基于二级存储模型设计的。内外存融合需要重构现有的功能模块及重新设计编程模型。目前相关研究甚少,且基本处于停滞阶段,但内外存融合的趋势不可逆转。
2NVM作为持久性外存的管理模式经过以上的分析可以发现,NVM与块设备有很大差异,因此,简单地沿用块设备的管理模式无法发挥NVM的性能优势。如何对NVM进行更细粒度更高效的管理也因此成为研究的热点。从目前来看,针对NVM作为持久性外存的管理模式大致分为两大方向:一是像内存一样采取虚拟内存的方式管理NVM;二是像硬盘一样采取文件系统的方式管理NVM。
2.1虚拟内存管理模式
既然NVM字节可寻址,就可以像内存一样使用内存接口(如Load/Store指令)去访问,此时可以借助MMU快速遍历操作系统管理的页表,使用TLB缓存部分页表以加快寻址速度。因此,有学者认为文件系统中的一些功能可以被替换或摈弃,比如,定位文件索引节点的方法、用于管理文件的元数据(如文件描述符)等等。确实,采取内存管理方式可以发挥硬件优势,相比纯软件的文件系统管理方式要高效很多。然而,NVM作为持久性外存使用时,与传统易失性内存有着很大不同,最大的区别在于持久性外存要求提供数据的持久性和一致性。
为此,学术界提出了各种编程模型或专门针对NVM的编程接口,如NV-heaps[43]、Mnemosyne[42]、HEAPO[41],NV-tree[44],CDDS[45]等等,主要思想是在NVM上开辟一个持久性堆(persistentheap),需要持久化的数据一律写到持久性堆里,从而保证数据的非易失性,写到NVM的其他区域不保证数据的非易失性,其实更重要的是不保证数据的一致性。对于持久性外存而言,数据的非易失性只是基本要求,更重要的是保证数据的一致性[25,35]。
如果缺乏数据的一致性保证,将无法确定从持久性外存上读取的数据是否是完整的、原子性的,继而影响程序执行的正确性。因此,数据一致性是持久化存储编程模型必须考虑的要素之一。现有的持久化存储编程模型在保证数据一致性方面均引入了不小的开销,很大程度上影响了编程模型的实用性,到目前为止,虽然已经有多种NVM持久化编程模型被提出,但都没有得到业界认可和普及。
当然,除了开销外,另一个重要原因是面向NVM的整个软件生态的不成熟,要使用新的编程模型,就必须大修现有的应用程序及优化运行时环境,是一项庞大的系统工程。虽然虚拟内存的管理模式I/O路径短,内存访问接口简单高效,但由于需要对数据一致性的支持,引入了比较大的开销,且包括编程模型、编程接口、编译器在内的整个软件生态需要重构,应用程序也需要重新改写。目前,国际存储组织SNIA针对NVM的编程模型还在制定过程中,由于商用的NVM器件还很少,相关工作推进缓慢,因此,短期来看,沿用标准的POSIX文件系统接口是现实可行的方案[4,26],现有的应用程序无须任何修改就可直接使用NVM。
2.2文件系统管理方式
作为一个良好的过度,采取文件系统的方式管理NVM仍然是一个不错的选择,从功能上来讲,现有的应用程序无须修改就可以运行。然而,性能上却有很大的瓶颈。
原因是,现有的主要文件系统,如Ext4,在当初设计时是以内存-外存二级存储结构为模型、以硬盘等慢速块设备为研究对象而设计的,软件栈开销大,不适用具有极低延迟且可字节寻址的NVM器件。提高持久性外存访问性能通常有两种做法,一是将慢速存储介质事先读入快速存储介质,二是优化文件系统尽可能减少软件栈开销。首先说改变存储介质。由于硬盘的访问速度慢,内存的访问速度快,可以将一部分内存模拟为硬盘,构建Ramdisk。读写内存显然要比硬盘快很多,虽然与硬盘相比性能得到了大幅提升,但Ramdisk仍然基于的是传统文件系统(如ext4),性能的提升主要源于硬盘内存化。
作为文件系统本身而言,仍然是基于块设备的传统文件系统,I/O路径长、层次深,相对NVM而言软件栈的开销仍然很大。为此,学术界开始尝试改造传统文件系统[52],比如,移除页缓存(pagecache)中同步数据更新机制,改用异步I/O隐藏页缓存刷新带来的开销;将页缓存作为多版本区域,优化文件系统一致性机制;采用轻量级的VFS层的元数据日志MeLo@V等。然而,改造传统文件系统始终无法从根本上改善面向NVM的文件系统的性能,原因在于NVM除了具有非易失特性外,其更像内存,只有紧密结合内存特性重新构建文件系统才能充分挖掘NVM的性能。近年来,学术界相继提出各种NVM文件系统,包括BPFS[6]、SCMFS[16]、SIMFS[17]、PMFS[8]、NOVA[23]、HiNFS[20]、FCFS[10]、Octopus[34]等。它们从不同的角度对NVM文件系统进行了优化设计,后面将详细阐述。
3NVM文件系统的几个关键问题
问题1降低一致性保证开销。数据一致性是文件系统的基本功能,也是核心功能。没有数据的一致性保证,程序的正确性也得不到保证。持久性数据的一致性有两层含义:一是持久性,即保证在掉电或系统失效前已经将数据从易失性存储区域(如高速缓存)写回到持久性外存中;二是顺序性,即保证数据是按照程序语义确定的依赖关系先后有序写入NVM中,不能乱序。传统的文件系统主要采取写前日志(WAL)或写时拷贝(COW)等技术保证数据的一致性,但这些技术相对NVM而言同样存在开销过大的问题。此外,由于NVM直接挂在内存总线上,CPU可以直接通过访存指令读写持久性外存,无须像传统的二级存储系统那样必须先经过内存。为了保证一致性,需要及时将高速缓存中的数据刷回(flush)到NVM中,频繁的flush操作对性能影响很大,是需要研究的新问题。
问题2降低软件栈开销。前文已多次提到,对NVM而言,传统文件系统的软件栈开销过大,因此,降低软件栈开销也就成为了NVM文件系统研究的主要方向。比如,传统文件系统中的块设备层和驱动层对NVM而言就是多余的[4,26]。此外,减少持久性外存与工作内存、内核空间与用户空间之间的拷贝也形成共识[23]。NVM可字节寻址,因此NVM文件系统可以不需要页缓存(pagecaching)而使用DAX技术直接访问NVM,从而减少了存储栈中NVM与DRAM之间不必要的数据拷贝。
DAX的核心是零拷贝的内存映射机制(I/Omemorymapping,mmap)。与传统文件系统中的mmap不同,DAX中的mmap是将持久化的数据直接映射到进程的虚拟地址空间,完全不需要页缓存。而传统文件系统中的mmap在将文件映射到用户空间时,虽然减少了一次数据拷贝,但依然需要页缓存。DAX已引入到Linux内核中,可有效挖掘NVM的低延迟特性[22]。DAX技术利用了NVM的字节寻址能力,但频繁的映射迫使应用程序静态预留部分存储区域且自行管理,影响了存储空间的利用率[36]。此外,由于NVM的写性能差,如何扬长避短也是研究的方向之一。
4降低一致性开销的主要方法在降低一致性方面,学术界主要提出了如下一些方法:一是尽可能利用NVM的字节寻址特性和原子性操作原语进行原位原子更新(in-placeupdate);二是尽量减少一致性保证中写的数据量;三是优化传统的日志技术;四是优化元数据的分配结构;五是延迟关键路径写操作。从本质上看,前四种都是通过减少写操作降低一致性保证开销,最后一种则是通过放松写顺序约束降低一致性保证开销。
4.1原位原子更新传统的一致性保证技术,如WAL和COW,要么在等新数据写成功后再改写原数据,要么在改写原数据前先备份原数据,实际上都写了两次,原位原子更新是直接对数据进行改写,并保证原子性。Condit等人[6]在2009年最早设计了第一个面向NVM的文件系统BPFS,使用短路影子分页法来保证元数据和一般数据的一致性,其核心思想是对细粒度数据提供原子写操作。具体是,对小于或等于8字节的数据利用硬件原语操作指令直接进行原位更新。
对于超过8字节的数据,则使用COW操作,但与完全拷贝不同,只拷贝那些未被更新的数据,因为即将被改写的数据是没有必要拷贝的。在基于树结构的文件系统中,一个数据的更新可能涉及到父节点的递归更新,直到根节点,如图5所示,所有的数据更新均采取以上规则。BPFS要求硬件提供原子性(atomicwrite)和顺序性(epochbarrier)两个原语的支持,且原位更新只适用于小粒度数据,如果某些操作涉及的数据更新较大,仍然需要开销较大的COW保证一致性。尽管如此,BPFS仍在NVM一致性保证方面进行了积极探索,其中的epoch顺序性保证机制影响深远。
5降低软件栈开销的主要方法传统的文件系统相对字节可寻址且延迟极低的NVM而言,软件栈显得臃肿。降低软件栈开销,主要的技术包括,旁路掉不必要的软件存储层次,减少拷贝;用户应用程序直接访问NVM;精细化I/O操作;kernel/user协同文件系统等等。
6内存管理与文件系统的融合NVM具有内存的字节寻址特性,可利用与内存相关的软硬件特性加速文件系统的访问。此外,在内存管理中增加对持久性的支持也是研究的方向之一,尽管后者跟文件系统关联性不大,但相关探索为未来内外存真正融合奠定了基础。
6.1利用MMU加速文件系统的访问Wu等人[16]提出了第一个内外存融合管理的文件系统SCMFS,旨在利用操作系统中现有的内存管理模块来辅助管理文件系统空间。SCMFS利用内存管理单元(MMU)将文件系统的逻辑地址空间映射到NVM的物理地址空间上,并尽可能为每一个文件分配连续的地址空间,以加速文件系统对连续数据块的访问。
此外,还采取了空间预分配机制及相应的垃圾回收机制以减少内存管理开销。Sha等人[17,26]也基于类似的思想提出了一个真正的用户空间NVM文件系统SIMFS。与传统的用户空间文件(如FUSE)不同,SIMFS不需要依附内核级文件系统来处理用户请求,因此对文件的访问更高效。SIMFS仍沿用标准的POSIX接口,文件能够以O(1)的时间复杂度暴露给用户空间,与文件大小无关。每个打开的文件都有一块连续的虚拟地址空间,由一个称之为“文件页表”的分级页表来管理,该页表保存文件中每个数据页的地址映射信息,利用MMU地址转换硬件可以快速定位文件中的数据。SIMFS以页表的形式访问元数据,而其他文件系统(如PMFS)的元数据是以B-tree的形式存放的,前者的查找速度要快很多。
7基于NVM的分布式文件系统假如没有RDMA(remotedirectmemoryaccess)在数据中心的广泛应用,NVM对分布式文件系统的设计可能不会带来太大的影响。与传统的TCP/IP协议相比,RDMA的传输延迟低至微秒级[2],仅略高于NVM的本地访问延迟。面对NVM和RDMA等两种延迟极低的新型硬件,传统分布式文件系统暴露出很大弊端[54],最根本的设计缺陷在于将存储与网络分为两个软件层次,这种松耦合的设计导致重复的元数据、过量的拷贝、不必要的事件处理,以及将用户空间的保护栅栏置于关键路径上等等[2]。
8安全、容错等其他与NVM相关的文件系统研究NVM支持的XIP特性会增加不经意写操作的风险。NVM的写次数有限,也要防止恶意的磨损攻击。还需要提供一定的容错机制,提高文件系统的鲁棒性。本节还阐述了从文件系统角度提高NVM存储空间利用率以及利用NVM加速元数据和日志数据的相关努力。
9结束语
存储与计算、网络共同组成计算机系统的三要素。数据密集型应用的大量涌现,使存储面临前所未有的压力。NVM的出现给存储系统带来巨大机遇,同时也带来诸多挑战。简单的器件替换无法挖掘NVM的性能优势,软件栈的重构也需要同步跟上。采取虚拟内存的方式管理持久性外存涉及到整个软件生态系统的革新,是一项庞大且耗时的工程。短期来看,随着3DXPoint芯片推向市场,仍然采取文件系统管理持久性外存的方式是现实可行的,过去十余年学术界开展了大量研究,一些技术已趋于成熟。本文梳理了近年来针对NVM文件系统的相关研究成果,通过梳理发现这些工作主要集中在以下几个方面:(1)降低一致性开销;(2)降低软件栈开销;(3)内存管理与文件系统融合;(4)分布式文件系统;(5)文件系统的安全、容错和空间管理等。
作者:徐远超
转载请注明来自发表学术论文网:http://www.fbxslw.com/dzlw/25688.html