Zoned Storage-应用

Zoned Storage-应用

  • RocksDB with ZenFS
    • ZenFS介绍
      • ZenFS 内部结构
    • Getting Started
      • Prerequisites
      • 构建和安装 ZenFS
      • ZenFS 命令
      • Benchmarking 基准测试

RocksDB with ZenFS

ZenFS介绍

RocksDB 是用于快速存储设备的持久KV存储。 它是使用 Log-Structured Merge-Tree (LSM-tree) 数据结构实现的。 它类似于基于 LSM-tree 的键值引擎实现:值存储在按键递增顺序排序的表中。 表是按顺序写入的,从不修改。 LSM-tree 数据结构的这一基本原理使得支持zoned块设备成为可能。

RocksDB 的存储插件架构使得适应不同的存储后端成为可能。 更重要的是,ZenFS 实现了对 zoned 块设备的支持并集成到 RocksDB 中。

ZenFS 是 RocksDB 的文件系统插件,它使用 RocksDB FileSystem [sic] 接口将文件放置到原始zoned块设备上的zones中。 通过将 files 分进 zones 并利用 **“write lifetime hints”(WLTH)**来共同定位相似生命周期的数据,与传统块设备上的常规文件系统相比,ZenFS 可以减少系统写入放大ZenFS 确保文件系统或设备上没有后台垃圾收集,从而提高了吞吐量、尾部延迟和耐用性方面的性能

ZenFS 可以使用 extent 分配策略 将多个文件存储在单个zone中。 一个文件可以由一个或多个 extents 组成,所有extents 构成的文件可以存储在设备的同一zone(或不同zones)中。 一个extent从不跨越多个zones。 当区域中的所有file extents都无效时,可以重置该zone,然后重新使用以存储新的file extents。(一个文件由于1个或多个extents组成,该文件可以存储在1个和多个zones中,1个extent不可以出现在多个zones中)

ZenFS 根据 RocksDB 库提供的**“write lifetime hints”(WLTH)** 将file extents 放置到zones中。 当 WLTH 相似时,ZenFS 总是尝试将file extents 放在相同的 zone 中。

在 ZenFS 中,数据垃圾收集仅由 RocksDB 在启动 LSM-tree 表压缩过程时执行。 ZenFS 不执行垃圾回收,ZNS 设备控制器也不执行垃圾回收。(ZenFS和ZNS SSD 控制器 本身都不提供GC机制。垃圾回收是由于KV Compaction执行的)

注意 ZNS: Avoiding the Block Interface Tax for Flash-based SSDs USENIX ATC 2021 文章中提供了更多信息。

ZenFS 内部结构

  • 架构概述
    Zoned Storage-应用_第1张图片
    ZenFS 实现了 FileSystem的 API,并将所有数据文件存储到原始分区块设备上。 LOG和LOCK文件存储在可配置目录下的默认文件系统中。 区域管理通过 libzbd 完成,ZenFS io 通过正常的 pread/pwrite 调用完成。

  • 文件系统实现
    文件被映射到一组extents中:

    • Extents是块设备上的块对齐的连续区域
    • Extents不跨越zones
    • 一个zone可能包含多个extents
    • 来自不同文件的extent可能共享zones
  • 数据回收
    ZenFS 在当前的实现状态下异常懒惰,并且不进行任何垃圾收集。 随着文件被删除,已用容量zone计数器会下降,当它达到零时,可以重置和重复使用zone。

  • 元数据
    元数据存储在块设备的第一个zone的rolling log中。

    每个有效的元数据区包含:

    • 具有当前序列号和全局文件系统元数据的超级块
    • 文件系统中所有文件的至少一个快照
    • 增量文件系统更新(新文件、新扩展区、删除、重命名等)

Getting Started

Prerequisites

ZenFS 需要 Linux 内核版本 5.9 或更高版本。 使用的内核必须配置为zoned block device support enabled.

ZenFS 使用 libzbd 库。 在构建和安装 ZenFS 之前,必须编译和安装此库的最新版本。

构建和安装 ZenFS

ZenFS 嵌入到 RocksDB 中。 它可以作为 RocksDB 中的子模块使用,并且必须

你可能感兴趣的:(分区存储,linux,分区存储,kv,Rocksdb)