CHFS:Parallel Consistent Hashing File System for Node-local Persistent Memory 一种临时文件系统

博主 1827 2022-05-22

简介:

CHFS是日本筑波大学研究人员利用计算节点上持久化内存可字节寻址、低延迟、高带宽的特性构建的并行一致性键值临时文件系统,支持高可伸缩性并行访问,具有较高的元数据性能。CHFS的特点在于没有为块设备优化的数据结构,也没有专门的元数据服务器来减少元数据访问的开销,尽管有很多前人工作解耦了文件系统的元数据和数据访问来让存储系统中元数据和数据可以并行访问从而性能得到提高。CHFS利用目录和文件的完整路径管理键值存储的名称空间,将完整的目录路径和块号作为键,元数据和文件数据作为值,将分级名称空间管理为单个平面名称空间,相比分层管理目录层级再做散列,这样可以减少元数据开销,缺点是当目录变动时,需要重新做一次散列。然后再使用一致散列在分布式键值存储中分发键值对。CHFS使用基于环的一致散列,确保每个服务器都有其它所有服务器的地址,服务器可以直接查找到目标服务器地址。系统架构上,CHFS有一个客户端库和一个服务器端,客户端库提供文件系统接口,服务器端则作为分布式键值存储服务器。

背景:

  • 超级计算机越来越多的用于数据密集型应用:数据分析,机器学习
  • 计算节点逐渐引入节点本地快速存储如NVMe SSD,NVRAM

研究人员开始探索利用节点本地存储构建临时文件系统以解决这一问题,但前有的分布式文件系统设计一般是使用本地文件系统的块存储或者依赖于日志结构合并树LSM树结构的数据库,并没有有效利用持久化内存优势(字节寻址)的设计。

于是日本筑波大学人员提出了CHFS,这是一种使用节点本地持久内存的特别并行文件系统。该设计的主要特点包括利用可字节寻址持久内存的低延迟高带宽特性,以及并行文件访问的高可伸缩性和计算节点数量方面的元数据性能

此外,CHFS完全建立在分布式键值存储之上,可以灵活地用于其它键值存储上。同时后端不仅可以是持久化内存,还可以是基于块设备的POSIX文件系统

CHFS设计

设计目的:

  • 减少元数据访问开销,提高元数据性能在计算节点数量上的可扩展性
  • 提高并行数据访问性能在计算节点数量方面的可扩展性。

具体来说,CHFS在分布式键值存储中存储文件系统元数据和文件数据。文件系统元数据包含一个层次名称空间,比如目录树和entry条目信息(比如模式、时间和所有者)。

文件管理方式:CHFS通过惟一的目录ID管理分布式键-值存储中的分层名称空间,用完整路径作为键,将分级名称空间管理为单个平面名称空间。键中的“/”字符作为目录路径的分隔符。这种方法的优点是访问目标文件时不需要遍历分层目录,在访问文件数据时直接通过put/get的接口访问底层的分布式键值存储即可。

并行访问优化:将文件分为多个chunk,chunk大小在文件创建时指定,且以字节为单位。因为文件划分为多个chunk,所以上面的键值管理方式中的键就是完整路径+chunk number。

其他文件系统元数据管理方式:将文件的元数据作为键值存储中的值存放起来,例如文件的mod,uid,gid,file size,mtime等。
image.png

服务器接口管理:服务器接口准备通过文件系统操作一致地访问和更新元数据。前面讲到CHFS将一部分元数据存储在值部分。这个元数据部分应该由服务器管理,而不是由客户端库管理,因为元数据对于文件系统管理至关重要

一致性哈希:CHFS通过使用一致散列在分布式键-值存储中分发键-值对。一致性散列特性在服务器连接或离开时移动数据的最小大小。CHFS使用基于环的一致哈希。每个服务器都有一个所有其他服务器的列表,因为服务器的数量最多在数万个范围内。通过这种方式,每个服务器可以在不进行任何通信的情况下本地查找目标服务器,这比Chord方法更有效
CHFS使用散列函数来分发键值对。服务器在一个环中按照哈希值分布。每个服务器负责从ring + 1中的前一个服务器的散列值到self服务器的散列值的范围。当服务器数量较少时,每个服务器的范围大小趋于不均衡。为了平衡范围大小,即服务器负载,引入了虚拟服务器[12]。在这种情况下,每个服务器服务于多个虚拟服务器,本质上增加了平衡范围大小所需的服务器数量。此外,本研究建议为每个服务器使用一个虚拟名称来控制服务器散列值,以达到更好的负载均衡。

CHFS通过使用基于环的一致散列在分布式键-值存储中分发键-值对。每个服务器都有一个所有其他服务器的列表,可用于零通讯查询目标服务器。服务器在一个环中按照哈希值分布。每个服务器负责从ring + 1中的前一个服务器的散列值到self服务器的散列值的范围。

实现

简要介绍一下实现:CHFS由CHFS客户端库和CHFSD服务器组成。客户端库提供了一个文件系统接口。CHFSD是分布式键值存储的服务器。使用了Mochi-Margo库,其基于RPC+RDMA的Mercury通信库和Argobots轻量级线程库。

客户端接口实现如下图:
image.png

如果后端是POSIX接口文件系统,一个简要的put(key,value)实现如下:
fd = open(key);
write(fd, value);
close(fd);
其中key是文件名,value是文件数据。

实验

实验集群平台:
一是在4-node Chris cluster connected by InfiniBand HDR100, where each node has a 2.3GHz 16-core Xeon 5218, 96GiB DDR4-3200 memory, and 768GiB Optane DC persistent memory。

另一个在a 78-node Cygnus supercomputer at the University of Tsukuba, where each node has two sockets of 2.6GHz 12-core Xeon 6126, 192GiB DDR4-2666 memory, and 3.2TB Intel SSD DC P4610。

具体数据见原文