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

本文解读的论文《Optimizing Garbage Collection for ZNS SSDs via In-storage Data Migration and Address Remapping》是由重庆大学相关研究团队撰写,发表于2024年11月。本文小编将结合论文内容进行学习解读,以供各位读者参考!由于水平有限,如有错误之处,欢迎在本文底部留言或者私信交流,感谢支持!

图片

扩展阅读:

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

  • ZNS SSD+F2FS文件系统|如何降低GC开销?

  • 为什么QLC NAND才是ZNS SSD最大的赢家?

  • NVMe SSD:ZNS与FDP对决,你选谁?


图片

在固态硬盘(SSDs)技术发展进程中,传统块接口与闪存特性的不匹配引发了诸多严重问题,如高写放大、大量预留空间需求以及页级映射所需的额外 DRAM 等,这促使了 NVMe Zoned Namespace(ZNS)接口的诞生。

ZNS 接口作为闪存 SSDs 的新兴高性能标准,通过将逻辑地址空间划分为固定大小的顺序写入区域,有效减少了映射表的 DRAM 需求,并将设备内垃圾回收(GC)和数据放置职责转移至主机,从而降低了预留成本和写放大,还避免了日志堆叠问题,使得应用能够依据数据生命周期顺序写入不同区域,进一步减少 GC 导致的写放大。

图片

然而,ZNS SSDs 的主机端 GC 仍存在显著缺陷。尽管已有研究致力于提升其 GC 性能,如通过分离冷热数据的日志结构合并式区域 GC、基于键值数据特征的生命周期感知数据放置以及整合 LSM - Tree 压缩和主机端 GC 等方法来减少有效数据迁移开销,但由于 SSD 空间使用需求,GC 过程仍会引发大量数据迁移,尤其在写密集型工作负载下更为突出。数据迁移不仅会产生不必要的端到端传输开销,即有效数据需先传输至主机缓冲区再写回设备,而且由于 GC 以区域为粒度执行,存在严重的块到块重写开销,即便命中区域块内多数数据有效,仍需按预配置映射重写到目标区域,且顺序写入特性常使命中分区块内存在大量有效数据,进一步加剧了问题的严重性。

一、ZNS SSDs 主机端 GC 现存问题剖析

  1. 数据迁移的端到端传输开销:在传统的 ZNS SSDs 主机端 GC 过程中,数据迁移流程复杂且低效。当进行垃圾回收时,数据首先需要从设备的源区域传输至主机缓冲区。这一过程涉及数据在设备与主机之间的大量传输,消耗了宝贵的系统资源与时间。随后,数据再从主机缓冲区写回 SSD 的目标位置。这种先上传再回写的方式,产生了不必要的端到端传输开销,极大地降低了数据迁移的效率,增加了系统的整体延迟,尤其是在处理大量数据时,对系统性能的影响更为明显。

  1. 块到块重写开销:ZNS SSDs 中区域与块之间存在预配置的映射关系。在 GC 操作时,这种映射机制引发了严重的块到块重写问题。由于是基于区域进行回收操作,即便某个命中区域(victim zone)中的块内大部分数据是有效的,按照预配置的映射规则,这些有效数据仍需全部迁移并重新写入目标区域(target zone)的其他块中。例如,在实际的数据存储场景中,可能存在一个块内 80%的数据都是有效且仍在频繁使用的数据,但在传统 GC 过程中,这些数据不得不被重写,导致大量的写入操作,不仅浪费了存储设备的写入寿命,还显著增加了系统的 GC 延迟,严重影响了 SSD 的整体性能与使用寿命。

为解决这些问题,本文提出了具有动态区域映射功能的新型 ZNS SSD 设计——Brick-ZNS。其主要创新点包括:设计新的 ZNS 命令实现存储内数据迁移,消除 GC 数据迁移的端到端传输开销;构建动态区域映射机制,利用并行物理块实现区域和块的动态重映射,并确保芯片间并行性;提出 GC 过程的重映射策略,降低昂贵的块到块重写开销。通过在全 I/O 真实链路环境下的一系列实验及综合分析,有效评估了该方案的有效性,为 ZNS SSDs 的性能优化提供了新的思路与方法,有望推动闪存存储技术在 GC 效率和整体性能方面的进一步提升,在存储领域具有重要的研究意义和应用价值。

二、ZNS SSDs 基础架构与命令体系

NVMe ZNS 作为闪存 SSDs 的高性能接口,其核心创新在于将设备逻辑地址空间划分为多个固定尺寸区域,各区域配备写指针确保顺序写入并与物理块对齐。这种设计使得 ZNS SSDs 能够借助高效的区域数据放置机制降低写放大,并通过粗粒度区域映射减少 DRAM 需求。在实际应用场景中,如 LSM - tree 键值存储、日志结构文件系统、内存交换、缓存及 RAID 系统等,ZNS SSDs 性能表现优于传统块接口 SSDs。

图片

ZNS 规范定义了主机与设备交互的系列命令,包括 Zone_Read、Zone_Write、Zone_Mgmt 和 Zone_Append,通过 PCIe 总线传输并在设备区域转换层解析执行。然而,数据迁移时仅依靠读写命令导致数据需先从设备读至主机缓冲区再写回设备,产生不必要的端到端传输开销,成为影响性能的关键因素之一。

1. ZNS SSDs 当前区域映射机制剖析

尽管 ZNS 规范未明确区域映射规则,但现有研究揭示了其遵循的两个重要原则。其一,采用粗粒度块级映射组织区域,有效削减映射表 DRAM 占用;其二,将区域映射到跨不同闪存芯片的多个物理块组,利用闪存芯片 I/O 并行性,其中并行块组(PBGs)可并行读写,PBG 内芯片数量可由设备商配置,如典型的 4 芯片 PBG 示例中,其物理页按特定顺序写入确保芯片间并行与块内顺序写入。

图片

但在垃圾回收过程中,这种基于区域的粗粒度 GC 机制暴露出严重弊端。由于需按预配置映射回收区域空间,无论命中块内有效数据比例高低,所有数据都将被重写到目标块,如含 80%有效数据的 PBG 迁移 80%数据仅释放 20%空间,极端情况下全有效 PBG 也会被重写,极大降低了数据迁移效率,严重损害 ZNS SSDs 整体性能。

2. ZNS SSDs 运行时区域重置与主机端垃圾回收机制

得益于区域数据放置策略,部分区域数据可同时失效实现空间释放,即运行时区域重置机制,但在实际应用中,因闪存的异地更新特性,写密集型工作负载仍需垃圾回收提升空间利用率,故该机制仅能减少 GC 调用次数而非完全替代。与传统 SSDs 不同,ZNS SSDs 将 GC 职责转至主机,且主机端 GC 以区域为粒度重置,远超传统块擦除单元。

图片

主机端 GC 包含命中区与目标区选择、有效数据迁移和命中区重置三个子任务,但当前有效数据迁移过程效率极低。一方面,受限于 ZNS 命令集,数据迁移产生高额端到端传输开销;另一方面,区域块映射配置致使块到块重写开销巨大,这些开销严重削弱了主机端 GC 的优势。因此,优化 ZNS SSDs 主机端 GC 数据迁移成为关键研究方向,后续研究将基于相关实验分析深入探讨改进策略,以突破现有性能瓶颈。

三、数据分布与主机端 GC 开销解析

1. 无数据迁移下的有效数据分布洞察

基于全栈 SSD 模拟器(FEMU)构建的 ZNS SSD 设备(搭载 RocksDB 和 ZenFS)实验表明,在未进行数据迁移(仅启用运行时区域重置)且所有区域均已分配的情况下,多数区域空间利用率极低,平均仅约 40%。ZenFS 采用基于区域的数据放置策略,虽理论上可使同一区域内具有相同生命周期的数据同时失效以提升效率,但实际环境中数据放置难以达理想状态,数据迁移仍不可或缺。

图片

对于不同类型工作负载,如随机写入(Ran)及随机写入加更新(Ran + UR)的前两类负载,多数区域有效数据约占 50%;而顺序写入(Seq)及顺序写入加更新(Seq + UR)的后两类负载,多数区域有效数据仅占 30%左右。由于数据生命周期受诸多外部因素影响难以精准预测,即便同一区域内数据预期寿命相同,也并非能同时失效,只要存在有效数据,区域内大量无效空间便无法回收。在写密集型工作负载下,区域消耗速度远超回收速度,极端情况下所有区域均含有效数据而无法回收,导致严重写入停顿与极低空间利用率,凸显了垃圾回收(GC)对保障可用区域及提升空间利用率的关键必要性。

2. 主机端垃圾回收开销深度分析

针对 ZNS SSDs 实施 Greedy 和 Cost - benefit 两种近期 GC 策略进行研究,二者在区域占用率达 70%时启动 GC,每次回收 5%区域,并启用运行时区域重置减少 GC 调用次数。主机端 GC 数据迁移平均延迟高达 123 秒,涵盖块到块重写、端到端传输及区域重置开销。其中,端到端传输延迟(平均占总 GC 延迟 17%)包括命令传输与数据传输延迟,分别由主机读写命令发出及设备与主机间数据传输所致。

图片

数据重写开销是 GC 延迟的主要因素,平均占比达 72%。根源在于当前基于区域的 GC 机制,无论命中块内有效数据量多寡,均需重写所有数据以释放空间。分析命中块内有效数据比例发现,平均 25%的命中块有效数据超 70%,22%的命中块回收时全部为有效数据。这是由于顺序写入使区域内相同物理块常写入同一文件数据,导致有效数据集中于某些块,引发严重块到块重写开销,即大量有效数据从命中块迁移至目标块。

图片

ZNS SSDs 主机端 GC 受高数据迁移开销严重制约,包括端到端传输与块到块重写开销。此现状迫切催生创新 GC 方案,通过存储内数据迁移消除端到端传输开销,并借助地址重映射降低块到块重写开销,为后续研究指明方向,成为提升 ZNS SSDs 性能的关键突破点。

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

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

相关文章

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中,数据管理的自动化是提高生产效率和产品质量的关键。然而,许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点,如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时,以及…

JavaScript笔记基础篇03——函数

黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 目录 函数 函数的使用 1.函数的声明语法 2.函数的…

在PyCharm中使用Anaconda中的虚拟环境

1、在File菜单中找到Settings 2、Settings中搜索interpreter,找到Python Interpreter,再点击Add 3、选择第一个local interpreter 4、如图: 5、找到anaconda安装位置中的envs文件夹,在里面选择需要添加的python环境,如…

Windows系统安装 Rust 及其配置

1、在Rust官网下载Rust安装程序 (1)官网链接:Rust中文官网 (2)下载链接:下载Rust安装程序 (3)下载好后的rust安装程序,如下图: 2、运行 rustup-init.exe 安…

Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 排行榜界面 系统管理界面 看板展示 摘要 本项目以对B站热…

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统(RDBMS)&am…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

基于SpringBoot的装修公司管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘,实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下: #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…

Django多线程爬虫:突破数据抓取瓶颈

Django框架以其高效、安全、可扩展性强等特点,在Web开发领域得到了广泛应用。同时,Python语言的多线程支持和丰富的库也为开发多线程爬虫提供了便利。将Django与多线程技术相结合,不仅可以利用Django的强大功能进行项目管理和数据存储&#x…

RabbitMQ前置概念

文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…

神经网络基础-正则化方法

文章目录 1. 什么是正则化2. 正则化方法2.1 Dropout正则化2.2 批量归一化(BN层) 学习目标: 知道正则化的作用掌握随机失活 DropOut 策略知道 BN 层的作用 1. 什么是正则化 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小…

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 :VMware Workstation 17 Pro ubuntu版本:ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware,点击顶部的“编辑"菜单,打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…

前端【2】html添加样式、CSS选择器

一、为html添加样式的三种方法 1、内部样式 2、外部样式 3、行内样式 二、css的使用--css选择器 1、css基本选择器 元素选择器 属性选择器 id选择器 class/类选择器 通配符选择器 2、群组选择器-多方面筛选 3、关系选择器 后代选择器【包含选择器】 子元素选择器…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <3>5分钟集成好druid并使用druid自带监控工具监控sql请求

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

仿射密码实验——Python实现(完整解析版)

文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1&#xff09;初步了解古典密码 2&#xff09;掌握仿射密码的实现 实验方法 根据下图仿射密码&#xff08;变换…

在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南

QNAP 为用户提供了一个名为 Container Station 的应用&#xff0c;它在 QNAP NAS 上将 Docker 和 LXC 结合在一起&#xff0c;通过图形化界面&#xff0c;让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station&#xff0c;以…

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 Vite、Vue 3 和 Mapbox GL 从零搭建一个项目的完整步骤&#xff0c;包括环境搭建、依赖安装、配置和代码示例。 文章目录 1. 初始化项目2. 安装 mapbox-gl 依赖3. 配置 Mapbox Access Token4. 实现地图组件5. 在 App.vue 中使用地图组件6. 启动开发服务器7. 添加自定…