构建世界更快的内存文件系统
2018-09-12沙行勉
沙行勉
摘要:新一代非易失性存储器,如PCM、MRAM等,将使内存具备数据存储的能力,并显示出低功耗和优秀的数据访问性能等优越性。把非易失性存储级内存纳入内存管理空间将成为解决传统计算机系统数据l/O瓶颈的有效解决途径。然而,现有文件系统的设计架构使其无法充分利用非易失性内存的特性并发挥其优势,因此,我们需要重新审视现有文件系统的架构。从全新的角度思考面向非易失性内存的新型内存文件系统设计框架。我们提出了一个全新的概念“文件虚拟地址空间”,并在此基础之上,设计并实现了一个新型的持久化内存文件系统SIMFS。
关键词:持久化内存;虚拟地址空间;内存文件系统
DOI: 10.3969/i.issn.1005-5517.2018.7.006
0 引言
大数据时代的到来使得人们对数据处理效率的要求日益高涨,推动研究界和工业界发展可以克服传统内存、外存之间性能鸿沟的内存计算解决方案。相比基于传统外存的解决方案,内存计算有突破性的性能优势,这一点从Spark和Hadoop的对比中得到体现。Spark是一种新型内存集群计算框架,而HadOOp是基于传统外存的集群计算框架MapReduce的经典实现。相比之下,Spark可以比HadOOp快100倍。在计算机系统中,文件系统是数据存储的最根本的基础设施,对上层应用提供存储数据、访问数据的基本服务。因此,如果能够提供文件系统的内存计算方案,就能加速所有在其上运行的、需要处理数据的应用,从而提升整个系统的性能及用户体验。
新兴的非易失性内存(Non-Volatile Memory,简称NVM)提供了实现内存文件系统的机遇。一方面,NVM可以通过DIMM插槽直接连接到内存总线,提供字节寻址的高速数据访问;另一方面,NVM存储密度大、数据掉电不丢失,和磁盘、固态硬盘一样提供大容量的持久性数据存储。在采用新型非易失性内存的系统结构中,文件系统可以在NVM内存上存储并通过片上高速总线读写。
但是现有系统软件没有充分发挥非易失性内存物理特性和优势,如现有内存文件系统的元数据结构仍然以块设备上的传统文件系统的元数据结构为模板,要用软件查找元数据结构以获得文件数据块的物理位置,造成极大性能开销。为此,我们需要思考如何将文件数据结构与当前计算机体系中的内存管理机制相结合,并充分利用CPU中现有虚拟地址转换硬件的处理能力构建高效的内存文件系统。
1 对持久化内存文件系统设计的思考
对于在非易失性内存上建立文件系统上有一个常见误解,认为可以利用Ramdisk-类的工具在非易失性内存上建立一个模拟磁盘,然后把现有块设备文件系统部署到模拟磁盘。这种误解没有考虑到传统I/O软件栈和块设备文件系统产生的系统开销,不能发挥非易失性内存文件系统的卓越性能。块设备文件系统(如EXT4)需要经过诸多针对块设备的软件层次,例如I/O调度层、通用块层和块设备驱动层,如图1所示。诸多软件层次会造成数据在各级缓冲区中的多次拷贝。即使是管理模拟成磁盘的内存,对于传统I/O软件栈和块设备文件系统,其多个软件层次仍会造成数据读写之外的大量系统负载及性能损失。所以,为充分发掘非易失性内存的性能优势,系统设计者需要突破原有的设计思想,从新研究和设计面向新型非易失性的内存文件系统。
当前内存文件系统可以分为两类。一类是临时性的内存文件系统,如RAMFS和TMPFS。从系统设计的角度来看,这类文件系统借用了内核中的虚拟文件系统(VFS)所定义的通用文件组织结构,把所有的元数据(例如超级块和索引节点)和数据都存放于内存。但是,每次加载的元数据结构在内存中的位置不确定,物理内存也会随系统关闭而回收。因此,即便把临时内存文件系统部署在NVM上,系统重启后也无法找回文件。
另一类是持久化的内存文件系统,例如BPFS,PRAMFS和PMFS。与临时内存文件系统不同,持久化内存文件系统的元数据结构独立于内核的内存管理系统,并且固定存放在非易失性内存的已知位置中。在系统重启后,持久化内存文件系统可以在非易失性内存的确定位置找到其特有的元数据结构。现有的内存文件系统通过软件搜索元数据结构,或者建立额外的映射表,将文件映射到虚拟地址空间。这些方法都不能充分利用处理器中的地址转换硬件MMU。
當前持久化内存文件系统的设计有两大缺点:
第一,没有考虑到传统I/O软件栈和块设备文件系统(如EXT4)需要经过诸多针对块设备的软件层次,造成大量额外的系统管理开销及性能损失。 第二,元数据搜索由软件完成,具有较大的开销。文件系统通常管理两类数据:描述文件属性的元数据和文件数据。其中,元数据包含指向文件数据的物理存放地址的索引结构。例如,EXT4文件系统的索引节点(mnode)中使用直接索引和间接索引记录文件数据的块在磁盘中的物理地址。以图2 (a)为例,如果要访问某文件的k个页面,该文件系统需要不断重复执行以下步骤:1)文件系统搜索元数据,查找请求的数据页的物理位置:2)文件系统调用数据传输函数访问当前页面的数据。
因此,我们需要为内存文件系统的文件创建一个连续的虚拟地址空间,这样就可以利用文件的虚拟地址空间和硬件MMU迅速定位到文件数据的物理位置,避免软件方式搜素元数据结构产生的开销。如图2(b)所示,文件系统只要1次数据拷贝操作就可以读完k个页面,并不需要用软件流程逐层搜索文件的元数据结构。所以,连续虚拟地址空间中的文件访问开销远低于现有文件系统。
2 持久化内存文件系统设计的基本架构
在以上的思考基础上,我们提出了“文件虚拟地址空间”的全新设计框架,并在此设计框架下设计实现了持久化内存文件系统(Sustainable In-Memory File System, SIMFS),打破了传统文件系统的设计思路。
在该框架下,每个文件都有一个独立且连续的虚拟地址空间。为了充分利用地址转换硬件并迅速地建立文件的虚拟地址空间,我们提出一个新的元数据结构“文件页表(File Page Table)”。文件页表将存放文件数据的物理页组织起来,保存文件的每个数据页的地址映射信,如图3所示。
在文件虛拟地址空间的框架下,每个文件都有一个文件页表。在创建文件时,系统给该文件建立一个基本的文件页表,例如三级页表,每级各有一个物理页。
在这个新框架下,文件页表用于为对应的文件建立虚拟地址空间。在打开文件时,系统将文件页表顶层的数个指针写入进程页表对应的位置,这样,文件的数据页就可以用虚拟地扯和loa d/sto re指令直接访问。这种建立虚拟地址空间的方式的耗时与文件大小无关,系统可以在常数时间内为文件建立起进程中的虚拟地址空间。基于这种结构,文件可以获得连续的虚拟地址空间,而真正的文件数据却可以分散存储在物理内存中,每一个文件所拥有的物理内存都由一个专有的层次化的“文件页表”组织起来。
这个全新的文件虚拟地址空间的优点在于:
1)文件系统读文件数据不需要软件搜索元数据结构。此外,由于文件的虚拟地址空间已经嵌入到进程的虚拟地址空间,读文件数据不会引起缺页中断;
2)当文件拥有连续虚拟地址空间后,文件访问操作仅需调用一次数据传输操作。文件的虚拟地址到物理地址的转换由CPU中的硬件MMU完成,不需要软件搜索元数据,查找文件数据的效率极高。
3 结论
本文介绍了基于文件虚拟地址空间的概念而设计,并在Linux内核中实现的一个功能完整的持久化内存文件系统SIMFS。首次提出“文件虚拟地址空间”的设计框架。提出了在文件虚拟地址空间组织文件数据的组织结构“文件页表”。这种设计架构能够充分利用硬件MMU实现高速文件数据访问。我们在Linux内核中设计实现一个功能完整的持久化内存文件系统SIMFS。支持所有POSIX标准文件系统接口,支持基于Linux系统的应用程序。
用标准测试工具验证文件系统的性能。与华为公司合作测试的结果表明,SIMFS的文件读写带宽可以达到性能理论上限(即内存总线带宽)的89%,超过其他已知的内存文件系统,是目前世界上文件读写速度最快的内存文件系统。
参考文献:
[1]Ousterhout J K, Agrawal P, Erickson D, et al. The Case for RAMClouds: Scalable High-Performance Storage Entirely in DRAM[J]. Operating Systems Review, 2010, 43(4):92-105.
[2]Zaharia M, Chowdhury M, Franklin M J, et al. Spark: Cluster Computing with Working Sets[C],in Proceedings of the Usenix Conference on Hot Topics in Cloud Computing (HotCloud '10),2010, 15:1-7.
[3]Hadoop[Z] http://hadoop.apache.org/.
[4]Dean J, Ghemawat S. Simplified Data Processing on Large Clusters[C], in Proceedings ofthe Proceedings of Operating Systems Design and Implementation {OSDI '04), 2004:107-113.
[5]Freitas R F, Wilcke W W. Storage-Class Memory: The Next Storage System Technology[J].IBM Journal of Research & Development, 2008, 52(4.5):439-447.
[6lCondit J, Nightingale E B, Frost C, et al. Better l/0 through Byte-Addressable, PersistentMemory[C], in Proceedings of the ACM SIGOPS Symposium on Operating Systems Principles(SOSP '09), 2009 :133-146.
[7]Longerbeam S, Locke M A, Morgan K D. Protected and Persistent RAM Filesystem[P], 2003.
[8lDulloor S R, Kumar S, Keshavamurthy A, et al. System Software for Persistent Memory[Cl,inProceedings of the European Conference on Computer Systems (EuroSys '14), 2014:1-15.