ZNS SSD垃圾回收优化方案解读-2

四、Brick-ZNS 关键设计机制解析

Brick-ZNS 作为一种创新的 ZNS SSD 设计,聚焦于解决传统 ZNS SSDs 在垃圾回收(GC)过程中的数据迁移低效问题,其核心特色为存储内数据迁移与地址重映射功能。在应用场景中,针对如 RocksDB 和 LevelDB 等产生的顺序写入数据,ZNS SSDs 的顺序写入区域可高效处理。而分区文件系统(如 ZenFS 和 ZoneFS)则负责应用数据的访问与区域管理,包括区域操作、GC 和基于区域的数据放置。当触发 GC 时,分区文件系统会向设备的数据迁移模块发送请求,促使有效数据从命中区域迁移至目标区域。

图片

为降低 GC 数据迁移开销,Brick-ZNS 在数据迁移模块中引入两种关键方案:存储内迁移与地址重映射。对于有效数据占比低的命中块,采用存储内迁移,在设备内部移动数据,规避端到端传输;对于高有效数据占比的命中块,则运用地址重映射,减少块到块重写开销。鉴于 ZNS SSDs 现有区域 - 块映射机制的局限,创新性的动态区域 - 块映射机制应运而生,同时设置动态阈值(Th),依命中块有效数据比例智能抉择迁移方式,实现数据迁移开销最小化与空间利用率最大化的双重目标。

1. 存储内迁移(In - storage Migration)

传统主机端 GC 数据迁移的端到端传输导致严重开销。为此,Brick-ZNS 设计了 Zone_MD 和 Zone_MDF 新命令。Zone_MD 命令驱动存储内迁移,携带源地址(Src)、目标写指针(Dst)、迁移数据长度(Size)和动态阈值(Th)等参数。主机下达迁移指令后,设备定位物理块并检测有效数据比例(P),若 P < Th,数据经内部通道移至目标地址,避免端到端传输。然而,此过程使迁移由同步变异步,影响性能可预测性,且地址重映射时会引发主机目标区域无效空间记录与设备实际值不一致问题。

图片

Zone_MDF 命令有效解决了这些问题。设备接收 Zone_MD 后,若执行存储内迁移则计算迁移延迟(Lat),若进行地址重映射则确定未回收空间(Space),并迅速反馈给主机。对于存储内迁移,设备依据 Zone_MD 地址信息索引芯片可用时间,结合重写数据量与闪存操作延迟算出 Lat;对于地址重映射,设备能快速检索目标区域未回收空间大小。主机依此精准把控数据迁移性能,优化区域管理策略,确保系统高效稳定运行。

2. 动态区域映射(Dynamic Zone Mapping)

由于现有 ZNS SSDs 区域映射机制无法支持地址重映射,Brick-ZNS 构建了全新动态映射机制。设备层面,依预配置并行芯片数量将芯片分组为并行芯片组(PCG),再按块偏移将 PCG 内块分组为并行块组(PBG),以 PBG 为映射单元契合 ZNS SSDs 动态映射与芯片并行处理需求。

图片

动态区域映射流程如下:写请求到达时,主机选空闲逻辑空间充足区域,不足则拆分请求;区域接收请求后,若空闲物理空间小于写入数据量,优先选下一个可用时间最短的 PCG,以轮询方式选空闲 PBG 映射至该区域,更新映射表与空闲空间,直至空间足够后并行写入数据。该算法对系统性能无显著影响。此机制有效平衡芯片负载,提升资源利用率;空闲 PCG 充足时可实现多区域与空闲 PBG 动态映射,隔离不同 workload 性能;PCG 繁忙时优先映射空闲 PBG 确保负载均衡,但可能引发多区域映射至相同 PCG 导致访问干扰,不过已有如 Fair-ZNS 和 eZNS 等研究通过 I/O 调度缓解此问题,协同提升资源利用率与性能隔离性。

3. 地址重映射(Address Remapping)

ZNS SSDs 的垃圾回收(GC)进程中,Brick-ZNS 引入的基于并行块组(PBG)的地址重映射策略是提升性能的关键创新点。传统方式下,GC 过程中的块到块重写开销巨大,严重影响存储效率。而此策略旨在直接将命中区域中含有大量有效数据的 PBG 重映射至目标区域,避免回收低效益块,从而有效降低重写成本。

图片

在数据迁移阶段,依据命中区域和目标区域 PBG 内有效数据的分布状况,可分为不同类型组合。命中区域的 PBG 分为 V1(全有效)和 V2(部分有效)两类,目标区域的 PBG 分为 T1(已写满)和 T2(部分写入)两类。基于这四种类型的两两组合,设计了四种基本重映射策略,并针对特殊情况补充了第五种策略,以全面应对各种数据分布场景,确保重映射过程的高效性与准确性。

五、Brick-ZNS优化数据评估

为全面对比分析 Brick-ZNS 的优势,实验设置了三组对比方案。将其与不包含存储内迁移和地址重映射的传统 GC 策略(Trad)以及仅包含存储内迁移的复制型 GC 策略(IDM)进行对比。同时,考虑到已有相关研究对 ZNS SSDs 垃圾回收的探索,虽与本研究方向有所不同,但仍结合其中 Greedy 和 Cost - benefit 两种专注于优化受害区域选择策略的研究,进一步衍生出六种组合方案,分别为 Brick-ZNS 与 Greedy 结合(Brick+G)、Brick-ZNS 与 Cost - benefit 结合(Brick+CB)、Trad 与 Cost - benefit 结合(Trad+CB)、Trad 与 Greedy 结合(Trad+G)、IDM 与 Cost - benefit 结合(IDM+CB)以及 IDM 与 Greedy 结合(IDM+G)。并且,所有方案均在区域占用率达到 70% 时启动垃圾回收操作,每次回收占总区域 5% 的空间,确保了对比实验在相同的触发条件下进行,增强了实验结果的可比性。

1.垃圾回收延迟(GC Latency)

通过 db_bench 生成四种工作负载并写入空 ZNS SSD 以评估 GC 延迟,涵盖主机端 GC 与运行时区域重置延迟。

图片

与传统策略 Trad+G 相比,IDM+G 在不同工作负载(Ran、Ran+UR、Seq、Seq+UR)下分别显著降低 GC 延迟达 1.19 倍、1.17 倍、1.21 倍、1.19 倍;IDM+CB 相对 Trad+CB 也有类似显著降低。而 Brick+G 相较于 Trad+G 降低幅度更大,分别为 5.81 倍、4.67 倍、3.42 倍、5.01 倍;Brick+CB 相比 Trad+CB 也有 5.48 倍、5.52 倍、3.49 倍、5.16 倍的降低。平均而言,Brick-ZNS 相比 Trad 降低 GC 延迟达 4.82 倍。这主要归因于其有效规避了端到端传输开销,并减少了大规模块到块重写开销。

2.写入吞吐量(Throughput)

在工作负载写入过程中,每 20 秒收集 ZenFS 有效写入数据(排除 GC 期间写入)。对比发现,IDM+G 相对 Trad+G 在不同工作负载下写入吞吐量分别提升 1.05 倍、1.02 倍、1.09 倍、1.03 倍;IDM+CB 相较于 Trad+CB 也有相应提升。Brick+G 相比 Trad+G 提升更为显著,分别达 1.25 倍、1.17 倍、1.42 倍、1.21 倍;Brick+CB 相比 Trad+CB 也有 1.2 倍、1.17 倍、1.36 倍、1.2 倍的提升。平均来看,Brick-ZNS 相比 Trad 写入吞吐量提高 1.25 倍。这是因为 Brick-ZNS 的 GC 延迟降低,使得应用写入相同数据量的总延迟减少,从而有效提升了写入吞吐量。

图片

3.固态硬盘寿命(Lifetime)

收集运行时区域重置和主机端 GC 触发的物理块擦除次数来衡量 ZNS SSD 磨损(寿命损失)。由于 IDM 不影响 SSD 寿命,仅对比 Trad 和 Brick-ZNS。结果显示,Brick+G 相对 Trad+G 在不同工作负载下分别降低寿命损失 1.5 倍、1.23 倍、1.45 倍、1.4 倍;Brick+CB 相比 Trad+CB 也有 1.48 倍、1.32 倍、1.49 倍、1.42 倍的降低。平均而言,Brick-ZNS 相比 Trad 降低寿命损失 1.41 倍。原因在于 Brick-ZNS 通过重映射过滤出大量有效数据块,仅回收少量数据块,这些少量数据块含更多无效空间,相比 Trad 能以更少的擦除次数回收相同空间,有效延长了 SSD 寿命。

图片

如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • 浅析PCIe链路均衡技术原理与演进

  • 存储随笔2024年度技术分享总结

  • 浅析下一代NAND接口新特性SCA

  • 2025年CXL强势启航:开启内存扩展新时代

  • PCIe SSD在温变环境的稳健性技术剖析

  • DWPD指标:为何不再适用于大容量SSD?

  • 突破内存墙:DRAM的过去、现在与未来

  • E1.S接口如何解决SSD过热问题?

  • ZNS SSD是不是持久缓存的理想选择?

  • 存储正式迈入超大容量SSD时代!

  • FMS 2024: 带来哪些存储技术亮点?

  • IEEE报告解读:存储技术发展趋势分析

  • PCIe P2P DMA全景解读

  • 深度解读NVMe计算存储协议

  • 浅析不同NAND架构的差异与影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

当PHP遇上区块链:一场奇妙的技术之旅

PHP 与区块链的邂逅 在技术的广袤宇宙中&#xff0c;区块链技术如同一颗耀眼的新星&#xff0c;以其去中心化、不可篡改、透明等特性&#xff0c;掀起了一场席卷全球的变革浪潮。众多开发者怀揣着对新技术的热忱与探索精神&#xff0c;纷纷投身于区块链开发的领域&#xff0c;试…

【原创】大数据治理入门(10)《数据资产化:从数据到价值》入门必看 高赞实用

数据资产化&#xff1a;从数据到价值 引言&#xff1a;数据资产化的概念 数据资产化&#xff08;Data Monetization&#xff09;是指将企业内部的各种数据转化为有价值的资产&#xff0c;通过数据的应用和分析提升企业的运营效率、降低成本、增加收入和优化决策。在大数据时代…

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 &#xff1a; 选择类型 1&#xff1a; 将当前的工程打包成IP 2&#xff1a; 将当前的BD工程打包成IP 3&#xff1a; 将指定的源码打包成IP 4&#xff1a; 创建一个新的AXI 接口IP 其中3和4是比较常用的&#xff0c;本次…

一文简要了解为什么需要RAG、核心原理与应用场景

欢迎来到AI应用探索&#xff0c;这里专注于探索AI应用。 一、为什么需要RAG&#xff0c;它解决了哪些问题 在自然语言处理领域&#xff0c;生成式预训练模型&#xff08;如GPT&#xff09;已经展示了强大的文本生成能力。然而&#xff0c;这些模型有以下局限性&#xff1a; 知…

很简单的K8s集群部署方法-KubeKey自动化部署

K8s集群部署方法-KubeKey自动化部署 文章后续KubeSphere部署安装&#xff0c;接入KubeKey安装的k8s集群 文章目录 K8s集群部署方法-KubeKey自动化部署 一.清理kubeadm安装的k8s集群缓存二.服务器安装前准备1.设置主机名2.配置时间同步3.关闭系统防火墙4.安装系统依赖5.关闭swap…

Linux之文件系统前世今生(一)

Linux在线1 Linux在线2 一、 基本概念 1.1 块&#xff08;Block&#xff09; 在计算机存储之图解机械硬盘这篇文章中我们提到过&#xff0c;磁盘读写的最小单位是扇区&#xff0c;也就是 512 Byte&#xff1b;很明显&#xff0c;每次读写的效率非常低。 为了提高IO效率&…

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务&#xff0c;可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器&#xff0c;或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

【0x0052】HCI_Write_Extended_Inquiry_Response命令详解

目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Extended_Inquiry_Response命令格式 2.2. FEC_Required 2.3. Extended_Inquiry_Response 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段(主机端) 4.2…

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…

Mockito+PowerMock+Junit单元测试

一、单元测试用途 1、日常开发团队要求规范&#xff0c;需要对开发需求代码进行单元测试并要求行覆盖率达到要求&#xff0c;DevOps流水线也会开设相关门禁阀值阻断代码提交&#xff0c;一般新增代码行覆盖率80%左右。 二、Mock测试介绍 1、Mock是为了解决不同的单元之间由于…

candb++ windows11运行报错,找不到mfc140.dll

解决问题记录 mfc140.dll下载 注意&#xff1a;放置位置别搞错了

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 ???本期讲解关于spring aop的入门介绍~~~ ??感兴趣的小伙伴看一看小编主页&#xff1a;-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.AOP概述 1.1什么是AOP ?1.2什么是Spring AOP ???2.Spring AOP入…

(01)STM32—GPIO

1. GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出端口。可配置为8种输入输出模式。引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V。输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时…

python实现pdf转word和excel

一、引言   在办公中&#xff0c;我们经常遇收到pdf文件格式&#xff0c;因为pdf格式文件不易修改&#xff0c;当我们需要编辑这些pdf文件时&#xff0c;经常需要开通会员或收费功能才能使用编辑功能。今天&#xff0c;我要和大家分享的&#xff0c;是如何使用python编程实现…

基于 Python 的深度学习的车俩特征分析系统,附源码

博主介绍&#xff1a;✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…

LabVIEW串口通信调试与数据接收问题

在使用LabVIEW进行串口通信时&#xff0c;常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信&#xff0c;并提供常见问题的排查与解决方法&#xff0c;帮助用户更高效地进行数据接收调试。通过调整…

单元测试与unittest框架

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

LuaJIT Garbage Collector Algorithms

Explain 本篇文章是对Make Pall发表wili内容《LuaJIT 3.0 new Garbage Collector》的翻译和扩展&#xff0c;因为原文是对LuaJIT 2.x GC重要功能的简介和对LuaJIT 3.0 new GC的工作计划&#xff0c;所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT 2.x GC做…

1.17组会汇报

STRUC-BENCH: Are Large Language Models Good at Generating Complex Structured Tabular Data? STRUC-BENCH&#xff1a;大型语言模型擅长生成复杂的结构化表格数据吗&#xff1f;23年arXiv.org 1概括 这篇论文旨在评估大型语言模型&#xff08;LLMs&#xff09;在生成结构…