关键词:
文件系统
元数据
键值存储
固态硬盘
持久内存
分离式持久内存
摘要:
为了满足高性能文件系统对高效、可扩展元数据服务的需求,键值存储系统被广泛用于管理文件系统元数据。将文件系统元数据以键值对的形式存储时,文件系统元数据负载通常具有较高的单点键值操作占比,并且键值存储系统不再需要严格有序地存储键值对数据。然而,针对通用场景设计的键值存储系统在文件系统元数据负载下难以实现最优的性能。在键值索引结构方面,传统索引结构难以同时支持高效的文件系统元数据单点访问以及范围查找。在键值数据管理方面,结合存储设备的访问特性以及文件系统元数据键值对不再严格有序存储的特点,可以实现更高的读写性能。因此,面向文件系统的元数据管理场景,针对不同存储架构上的键值存储系统性能优化,开展了以下三个方面的研究:
固态硬盘上日志结构合并树(Log-Structured Merge Tree,LSM-Tree)的多层数据组织结构限制了元数据负载下的键值对访问效率。严格的键值对排序导致了严重的写放大,增加了管理固态硬盘上元数据键值对的开销。为此,提出了一种基于动态分片哈希索引以及聚合的固态硬盘键值存储系统PhatKV。首先PhatKV采用了目录感知的混合动态分片哈希索引结构,通过两次哈希查找快速地读取元数据键值对,并结合文件系统元数据负载访问键值对的局部性,限制了索引的内存占用;然后提出了三阶段元数据聚合策略,通过聚合数据的方式保证同一个目录下元数据在物理上连续存储,同时实现快速的键值对写入;最后,采用新型异步接口访问固态硬盘提升数据写入效率。实验结果表明,PhatKV的键值操作吞吐量相较于传统LSM-Tree最高提升了7.9倍,同时基于PhatKV的文件系统实现了1.6倍到3.9倍的元数据操作吞吐量提升。
持久内存上的树结构索引(LSM-Tree、B+树等)以及哈希表难以同时支持高效的单点元数据访问以及目录的范围查找。基于日志结构的数据管理中,由于日志元信息更新导致持久内存设备上写负载不均衡,难以充分利用持久内存写带宽,降低了写操作性能。为此,提出一种基于双哈希索引以及负载均衡日志的持久内存键值存储系统PetaKV。PetaKV首先按照目录划分键值对数据,并为每个目录构建一个日志,用于存储目录下的文件元数据,提升了目录访问的范围查找效率;其次,设计了基于内存与持久内存的双哈希索引结构,其持久内存中的文件表用于支持高效的元数据键值对访问,其内存中的目录表结合日志用于支持范围查找;PetaKV的日志采用了虚拟头部策略,通过平衡多个持久内存设备上日志元信息更新造成的持久内存写负载,提升了键值对写入性能。实验结果表明,PetaKV相比传统持久内存上的键值存储系统实现了2.5倍到3.8倍的性能提升,并且基于PetaKV的文件系统也实现了1.2倍到6.4倍的元数据操作性能提升。
对于分离式持久内存,持久内存服务器端的持久内存随机写带宽以及CPU有限,难以实现高效的哈希索引结构,制约了分离式持久内存上基于哈希索引管理文件系统元数据的效率。为此,提出一种基于DPU卸载以及混合异构哈希索引的分离式持久内存键值存储系统DoW-Meta。DoW-Meta通过引入数据处理单元(Data Processing Unit,DPU)构建了高效的哈希键值存储系统DoW-KV。首先提出了混合异构哈希索引结构,利用DPU内存吸收客户端的随机写入,并利用直接内存访问(Direct Memory Access,DMA)将数据以较大粒度写入持久内存,提升持久内存带宽利用率;然后将哈希索引结构的维护卸载到DPU的处理器,避免了其对持久内存端CPU资源的依赖;最后通过客户端混合读策略,提升键值对查找效率。基于DoW-KV设计了分离式架构下的双哈希索引结构,并构建了面向文件系统元数据负载优化的键值存储系统原型DoW-Meta。实验结果表明,DoW-KV相比于现有基于分离式持久内存的键值存储系统提升了1.2倍到2.3倍的读写操作吞吐量,并且DoW-Meta也实现了1.2倍到2.1倍的元数据操作性能提升。