Zoned Storage-应用

zStorage zStorage 是基于普通服务器架构,通过对象存储、分布式存储引擎、集群应用等技术构建的统一存储平台。zStorage对外提供各种类型存储访问接口及数据共享服务,可以支撑多种云计算平台的存储需求,支持的应用比如网盘、云备份、空间租赁、数据仓储、统一备份等应用。zStorage可以为zEngine提供功能更丰富的存储支持,zStorage通过zOperation可以为数据中心提供一个统一 阅读详情

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 内部结构

  • 架构概述
    在这里插入图片描述
    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 中的子模块使用,并且必须在编译 RocksDB 时显式启用。

ZenFS 项目 README 文件中维护了解释如何使用 ZenFS 编译和安装 RocksDB 的说明。

注意 请记住将块设备 IO 调度程序设置为“deadline”,以防止写入操作被重新排序。 这可以在系统引导时自动完成。

ZenFS 命令

ZenFS 提供了一个名为 zenfs 的命令行实用程序。 此实用程序用于格式化zoned设备以创建新文件系统、列出文件以及备份和恢复文件系统。

  • 创建 ZenFS 文件系统
    要创建或格式化分区块设备(例如,NVMe ZNS 设备 /dev/nvme0n1),请使用以下命令:

    zenfs mkfs --zbd=nvme0n1 --aux_path=/tmp/zone-aux --force
    
    # Output example
    ZenFS file system creat
Zoned Storage-Linux Kernel Support 之 Write Ordering Control Zoned Storage-Linux Kernel Support 之 Write Ordering ControlWrite Ordering ControlZone Write Locking 区域写锁定Initial ImplementationImproved Implementation: Block I/O SchedulerBlock I/O Scheduler Configuration手动配置自动持久配置 Write Ordering Control 从历史上看,Linux® 内核块 I 阅读详情

相关推荐

Zoned Storage-Linux Kernel Support 之 用户接口

Zoned Storage-Linux Kernel Support 之 用户接口分区块设备用户接口Sysfs Interfaceioctl() Application Programming Interface 分区块设备用户接口 用户应用程序可以使用两种类型的接口来访问分区块设备的区域信息和管理分区块设备的区域。 这两种类型的接口是: sysfs 属性文件,可以直接从应用程序作为常规文件访问,也可以从脚本语言(shell 脚本、python 等)访问。 ioctl() 系统调用,适用于 C 程序或其他

keke_Memory的博客 426

[协议]高性能存储栈设计

2.2 ZNS 的架构实现先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态其中对于ceph 这样的应用来说 bluestore或者Seastore 这样的后端引擎是直接管理裸设备的,所以不需要文件系统支持。当然如果需要,也可以通过一个内核支持的小型文件系统zonefs 来进行数据访问。

串起点滴 1502

rockdb_for_zns

关于这个分支 此开发分支将ZenFS(用于分区块设备的存储后端)添加到RocksDB。 在合并代码之前,该分支将反映实现的最新状态。 期望定期重新定基。 ZenFS概述 ZenFS是一个简单的文件系统,利用RockDB的FileSystem接口将文件放入原始分区块设备上的区域中。 通过将文件划分为多个区域并利用写入寿命提示来共存类似寿命的数据,与传统的块设备相比,系统写入放大倍数大大降低了,同时将ZenFS容量开销保持在非常合理的水平。 ZenFS旨在与主机管理的分区旋转磁盘以及具有分区命名空间的NVME SSD配合使用。 ZenFS中的某些思想和概念基于Abutalib Aghayev和Marc Acosta所做的早期工作。 依存关系 ZenFS依靠和Linux内核5.4或更高版本来执行区域管理操作。 架构概述 ZenFS实现了FileSystem API,并将所有数据文件存储到原

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2749

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

基于深度学习的水质预测:多参数监测与预测

在本篇博客中,我们详细介绍了如何使用深度学习技术处理水质预测问题,包括数据集的准备与预处理、多层感知机模型的构建、模型的训练与评估以及模型优化策略。我们使用 Python 语言基于 TensorFlow 和 Keras 框架实现了模型,并给出了各种模型优化方法及对应代码。通过实践,我们可以发现深度学习技术在水质预测方面具有很好的应用潜力。在实际应用中,我们还可以根据具体问题和数据集进一步调整和优化模型,以获得更好的预测性能。

斌擎科技 1080

Open3d Qt的环境配置

目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。

阁楼 919

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 618

学Simulink--机器人基础关节控制场景实例:基于Simulink的无刷直流电机(BLDC)关节六步换相位置控制仿真

本文详细介绍了基于Simulink的BLDC六步换相位置控制仿真方法,针对机器人关节的低成本控制需求。重点阐述了霍尔定位、六步换相和位置闭环三大核心原理,通过Simulink建模实现了从霍尔信号处理到位置环控制的全流程。仿真结果表明,该系统可实现0.3°的定位精度和80ms的响应时间,满足教育机器人等应用场景需求。文章还提供了核心代码模块和参数设置方法,并探讨了转矩脉动抑制、无传感器控制等进阶优化方向,为低成本机器人关节驱动提供了实用解决方案。

amy_mhd的博客 152

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

OpenClaw人人养虾:接入即时通讯平台Zalo

通过 Zalo Official Account(OA,官方账号)API,可以将 OpenClaw 接入 Zalo,实现面向越南用户的自动化客服和互动。

王国平的博客 437

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: Zoned Storage-Linux Kernel Support 之 文件系统
下一篇: 安装了内核重启后内核版本没有更新 调处grub引导界面 (已解决)
kxwang_
博客等级 码龄7年 144粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值