1. ZNS SSD 的基本概念

  • Zoned Namespace (ZNS): ZNS 是一种新的NVMe接口规范,它将SSD的逻辑块地址空间划分为多个独立的、固定大小的“区域”(Zones)。
  • 区域 (Zone): ZNS SSD 的基本管理单元。每个区域都有自己的写入指针(write pointer),数据只能从这个指针位置开始顺序写入。一旦写入,就不能随机覆盖,必须“重置”(reset)整个区域才能重新写入。
  • 顺序写入限制: 这是ZNS最核心的特性。在一个区域内,数据必须严格按照顺序写入,不能跳过或随机写入。如果需要修改区域内的数据,必须将整个区域的数据(包括未修改的部分)读出,修改后,再将整个区域重置并重新顺序写入。

2. ZNS 诞生的背景:传统 SSD 的挑战

理解ZNS的必要性,首先要了解传统SSD面临的问题。

  • 闪存转换层 (Flash Translation Layer, FTL):
    • 作用: 传统SSD内部有一个复杂的FTL层,负责将主机发出的逻辑块地址(LBA)映射到NAND闪存的物理块地址(PBA)。它隐藏了NAND闪存的底层复杂性,使SSD表现得像一个传统的块设备(可以随机读写)。
    • 挑战: FTL需要管理各种复杂任务,如:
      • 磨损均衡 (Wear Leveling): 确保所有NAND块均匀磨损,延长SSD寿命。
      • 垃圾回收 (Garbage Collection, GC): NAND闪存只能以页(page)为单位写入,但只能以块(block)为单位擦除。当一个块中的某些页数据失效后(被更新或删除),这个块就变成了“脏块”,其中包含有效数据和无效数据。GC就是将脏块中的有效数据读出,写入到新的干净块中,然后擦除(回收)整个脏块。
      • 写入放大 (Write Amplification, WA): GC过程会导致实际写入NAND的数据量大于主机发出的写入量。例如,主机写入1个页的数据,但为了GC,控制器可能需要移动并重新写入多个页的数据。WA是实际写入闪存的数据量与主机写入数据量的比值,WA越高,SSD寿命越短,性能越不稳定。
      • 过量配置 (Over-Provisioning, OP): 为了给FTL和GC提供足够的空间来管理数据和进行后台操作,SSD厂商通常会在SSD内部预留一部分空间不暴露给用户,这就是OP。OP越高,WA越低,性能越稳定,但用户可用容量越小。
  • 传统SSD的弊端:
    • 性能不确定性: GC是后台操作,发生在不可预测的时间,导致随机写入性能波动大,有时会出现“卡顿”现象。
    • 写入放大: 导致SSD寿命缩短。
    • 高功耗: 复杂的FTL和GC逻辑需要更多功耗。
    • 高成本: 需要更多的NAND颗粒(用于OP),复杂的控制器芯片。

3. ZNS SSD 的工作原理

ZNS通过改变主机与SSD的交互方式来解决上述问题,将部分闪存管理职责上移到主机端。

  • 区域 (Zone) 的结构和状态:
    • 每个区域有固定的容量,例如256MB、512MB或1GB。
    • 每个区域有唯一的写入指针,指示下一个写入操作的LBA。
    • 区域状态(Zone States):
      • Empty (空): 区域中没有有效数据,写入指针位于区域的起始地址。
      • Implicitly Open (隐式开放): 区域正在被写入数据,写入指针正在移动。多个区域可以同时处于隐式开放状态。
      • Explicitly Open (显式开放): 主机通过 Open 命令明确声明要向该区域写入数据。同一时间只能有有限数量(由SSD控制器决定)的区域处于显式开放状态,通常用于保证性能。
      • Closed (关闭): 主机通过 Close 命令停止向该区域写入,或隐式开放区域在一段时间没有写入后自动关闭。写入指针停止移动。
      • Full (已满): 区域中的所有LBA都已被写入数据,写入指针位于区域的末尾。
      • Read Only (只读): 区域可能包含数据,但不能再写入。通常用于特殊数据(如固件)。
      • Offline (离线): 区域不可用。
  • 区域管理命令: 主机通过NVMe命令与ZNS SSD交互,管理区域。
    • Report Zones 获取所有区域的信息(状态、写入指针位置、容量等)。
    • Zone Append 将数据写入一个或多个区域的当前写入指针位置。这是最常用的写入方式。
    • Open Zone 显式地打开一个区域进行写入。
    • Close Zone 关闭一个已打开的区域。
    • Finish Zone 强制一个区域进入 Full 状态,即使它还没写满。
    • Reset Zone 擦除一个区域的所有数据,将其状态恢复到 Empty,写入指针回到起始位置。这是ZNS中实现“删除”或“更新”的唯一方式(通过重写整个区域)。

4. ZNS SSD 带来的优势

  • 显著降低写入放大 (WA): ZNS SSD的FTL变得非常简单甚至可以没有,因为主机负责将数据以顺序方式写入区域。当区域数据失效时,主机直接重置区域即可。GC操作大大简化,从而使WA接近于1。
  • 更可预测的性能: 由于GC活动大大减少,性能波动小,随机写入性能更加稳定。
  • 延长SSD寿命: WA的降低直接减少了NAND闪存的实际擦写次数,从而延长了SSD的耐久性。
  • 降低过量配置 (OP) 需求: 由于GC的简化,SSD内部不需要预留大量的OP空间,可以提供更高的可用容量。
  • 简化SSD固件: SSD控制器不再需要复杂的FTL和GC逻辑,可以更专注于读写性能优化。
  • 更好的主机-设备协作: 主机了解闪存的物理特性,可以根据应用的需求进行更智能的数据放置和管理。

5. ZNS 对软件栈的影响(核心挑战和研究方向)

ZNS的优势是基于其对传统块设备接口的颠覆。这意味着现有的操作系统、文件系统、数据库和应用程序都无法直接、高效地使用ZNS SSD。

  • 文件系统:
    • 传统文件系统: 例如 ext4、XFS、NTFS 等,它们假定底层存储设备是随机可写的块设备。如果直接运行在ZNS上,每次写入都需要重置整个区域,效率极低。
    • 日志结构文件系统 (LFS/LSM-Tree Like FS): F2FS, Btrfs 等日志结构文件系统,其写入模式(追加写)与ZNS的顺序写入特性更契合。它们需要进行修改和优化才能在ZNS上高效运行。
    • ZNS-aware 文件系统: 需要全新的文件系统设计,能感知区域、管理写入指针、智能地选择区域进行写入、高效地处理元数据、并在区域满或需要更新数据时智能地管理区域重置。Linux 内核中的 zonefs 是一个初步的ZNS文件系统,但功能有限。
  • 数据库和键值存储:
    • LSM-Tree 数据库 (e.g., RocksDB, Cassandra): 它们的写入操作(MemTable flush、Compaction)天然是顺序的,与ZNS特性非常匹配。需要优化其compaction策略,使其能更好地利用ZNS的区域特性,例如将L0/L1层数据直接映射到ZNS区域。
    • B-Tree 数据库 (e.g., MySQL, PostgreSQL): 它们的随机写入模式对ZNS是一个挑战。需要设计新的缓存层、WAL(Write-Ahead Log)策略或数据结构来适应ZNS,例如将WAL写入ZNS区域,而将随机更新写入一个小的常规SSD区域或PMem区域。
  • 应用程序:
    • 许多应用程序直接依赖文件系统或数据库接口。
    • 对于高性能应用,可能需要直接通过ZNS API(如 libzbd 库)与ZNS SSD交互,从而实现定制化的存储管理,最大化性能。
    • 适合ZNS的应用: 日志系统、流媒体存储、大数据分析(特别是追加写入和批处理)、版本控制系统、归档存储等。
  • I/O 栈:
    • 操作系统需要新的I/O调度器来管理ZNS设备的区域分配和写入调度。
    • 需要新的内存管理和页缓存策略,以优化数据写入ZNS。

6. 如何学习和实践

  • 阅读 NVMe Zoned Namespace Command Set 规范: 这是最官方、最详细的ZNS定义。
  • 学习 libzbd 库: 这是Linux上与ZNS SSD交互的C语言库,可以帮助你理解如何编程管理区域。
  • 使用 ZNS 模拟器:
    • Linux null_blk 模块: 这是Linux内核提供的一个非常强大的模拟器,可以模拟ZNS设备,无需真实硬件即可进行软件开发和测试。
    • QEMU 模拟器: QEMU 也可以模拟ZNS设备,用于虚拟机环境的测试。
  • 关注 Linux 内核对 ZNS 的支持: 了解 zonefs、F2FS on ZNS、ZNS block layer 等进展。
  • 阅读相关论文: 搜索FAST、USENIX ATC、OSDI、EuroSys、HotStorage等顶级会议上关于ZNS的论文,了解最新的研究进展和挑战。
  • NVMe-CLI 工具: 使用 nvme-cli 工具,特别是其 nvme zns 子命令,可以查看ZNS设备信息、管理区域等。

总而言之,ZNS SSD代表了存储系统从“设备管理复杂性”向“主机管理复杂性”的转变。这为上层软件带来了巨大挑战,但也开启了巨大的优化潜力和研究机会。深入理解ZNS的底层机制和其对整个系统栈的影响,是成功进行相关研究和开发的基石。

NAND 闪存FTL(Flash Translation Layer) 在 SSD 中的核心作用。我们一条一条地梳理清楚:

✅ 一、为什么要把逻辑地址映射到 NAND 的物理地址?

1. 主机视角:

主机(比如操作系统)通过标准的块设备接口(如 SATA 或 NVMe)访问存储设备,发出的命令是:

“我想在逻辑地址 LBA=123456 上写入这段数据。”

主机并不知道这个逻辑地址对应底层闪存的什么地方,它只管读/写某个“地址”。


2. SSD内部视角(NAND 闪存):

但 SSD 里存储数据的介质是 NAND 闪存,它有如下特点:

  • NAND 不能随机覆盖写入,只能:
    • 把数据“写到空白页”。
    • 如果想更新某个数据,只能把整块擦掉后再重写(成本很高)。
  • NAND 分为“页”(最小写入单元)和“块”(最小擦除单元):
    • 通常:页 = 4KB,块 = 256页(1MB)。

所以:

主机说:“请把数据写入 LBA 123456”

SSD 不能直接写进 NAND 对应的那个位置 —— 那里可能已经有数据,必须重写整块,非常低效。


3. FTL 的作用:

FTL(Flash Translation Layer)就像一个中介或“翻译器”,它做了这几件事:

主机FTLNAND 闪存
LBA 123456查表找到一个空页,比如 Block 7, Page 42
写入数据实际写入到该物理地址

FTL 的核心功能:

  • 建立一个 LBA → PBA(物理块地址) 的映射表。
  • 管理数据更新、GC、磨损均衡等任务。
  • 屏蔽 NAND 的写入限制,让 SSD 像机械硬盘一样“看起来可以随便写”。

✅ 二、什么是 NAND?

NAND 是一种非易失性存储器,属于闪存(Flash Memory)的一种:

类型特点
NAND Flash大容量、便宜、写入快、擦除复杂,用于 SSD、U盘、SD卡等
NOR Flash启动速度快、可直接执行代码,常用于BIOS、嵌入式系统

NAND 的结构特点:

  • 分为 Block(块) → Page(页);
  • 通常一次写入一页(例如 4KB),但只能一次性擦除整个块(例如 1MB);
  • 数据写入必须是“空页写入”(不能覆盖写过的数据);
  • 具有寿命限制(每个块只能擦除一定次数)。

✅ 三、现在的 SSD 是不是还是用 NAND 存储数据?

是的。

当前主流的 SSD(无论是消费级还是企业级)几乎都使用 NAND 闪存 作为核心存储介质。以下是几种常见的 NAND 类型:

类型每个单元存几位特点
SLC(Single Level Cell)1位/单元最快、最耐用、最贵(用于缓存)
MLC(Multi Level Cell)2位/单元较好,企业级常用(已被TLC取代)
TLC(Triple Level Cell)3位/单元目前主流消费级 SSD 使用
QLC(Quad Level Cell)4位/单元更便宜但耐用性更差(适合冷数据)

此外,还有:

  • 3D NAND:把 NAND 堆叠在垂直方向,提升密度、降低成本。
  • V-NAND(Vertical NAND):Samsung 的 3D NAND 名称。

✅ 四、小结

解答
为什么 SSD 要将主机的逻辑地址映射到 NAND 的物理地址?因为 NAND 的物理写入限制多,不能直接更新原位置,FTL 需要找空页写入并建立映射。
这样做是不是因为 SSD 都是用 NAND 存储数据?是的,现在的 SSD 几乎都使用 NAND 闪存作为存储介质。
NAND 是什么?一种非易失性存储器,是 SSD 的核心存储芯片。具有页写入、块擦除、寿命限制等特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86999.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86999.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86999.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【seismic unix生成可执行文件-sh文件】

Shell脚本文件(.sh文件)简介 Shell脚本文件(通常以.sh为扩展名)是一种包含Shell命令的文本文件,用于在Unix/Linux系统中自动化执行任务。它由Shell解释器(如Bash、Zsh等)逐行执行,常…

Debezium日常分享系列之:在 Kubernetes 上部署 Debezium

Debezium日常分享系列之:在 Kubernetes 上部署 Debezium 先决条件步骤部署数据源 (MySQL)登录 MySQL db将数据插入其中部署 Kafka部署 kafdrop部署 Debezium 连接器创建 Debezium 连接器 Debezium 可以无缝部署在 Kubernetes(一个用于容器编排的开源平台…

利润才是机器视觉企业的的“稳定器”,机器视觉企业的利润 = (规模经济 + 技术差异化 × 场景价值) - 竞争强度

影响机器视觉企业盈利能力的关键因素。这个公式本质上反映了行业的核心动态:利润来自成本控制(规模化效应)和差异化优势(技术壁垒与场景稀缺性的协同),但被市场竞争(内卷程度)所侵蚀。下面我将一步步拆解这个公式,结合机器视觉行业的特点(如工业自动化、质检、安防、…

EPLAN 中定制 自己的- A3 图框的详细指南(一)

EPLAN 中定制 BIEM - A3 图框的详细指南 在智能电气设计领域,图框作为图纸的重要组成部分,其定制的规范性和准确性至关重要。本文将以北京经济管理职业学院人工智能学院的相关任务为例,详细介绍在 EPLAN 软件中定制 BIEM - A3 图框的全过程…

macbook开发环境的配置记录

前言:好多东西不记录就会忘记 git ssh配置 当我们的没有配置git ssh的时候,使用ssh下载的时候会显示报错“make sure you have the correct access rights and respository exits" 如何解决,我们先在命令行检查检查一下用户名和邮箱是…

GitLab 18.1 高级 SAST 已支持 PHP,可升级体验!

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

[学习]M-QAM的数学原理与调制解调原理详解(仿真示例)

M-QAM的数学原理与调制解调原理详解 QAM(正交幅度调制)作为现代数字通信的核心技术,其数学原理和实现方法值得深入探讨。本文将分为数学原理、调制解调原理和实现要点三个部分进行系统阐述。 文章目录 M-QAM的数学原理与调制解调原理详解一、…

图书管理系统练习项目源码-前后端分离-使用node.js来做后端开发

前端学习了这么久了,node.js 也有了一定的了解,知道使用node也可以来开发后端,今天给大家分享 使用node 来做后端,vue来写前端,做一个简单的图书管理系统。我们在刚开始学习编程的时候,需要自己写大量的项目…

【甲方安全视角】企业建设下的安全运营

文章目录 一、安全运营的概念与起源二、安全运营的职责与定位三、安全运营工程师的核心能力要求四、安全运营的典型场景与应对技巧1. 明确责任划分,避免“医生做保姆”2. 推动机制:自下而上 vs. 自上而下3. 宣传与内部影响力建设五、安全运营的战略意义六、为何需要安全原因在…

03认证原理自定义认证添加认证验证码

目录 大纲 一、自定义资源权限规则 二、自定义登录界面 三、自定义登录成功处理 四、显示登录失败信息 五、自定义登录失败处理 六、注销登录 七、登录用户数据获取 1. SecurityContextHolder 2. SecurityContextHolderStrategy 3. 代码中获取认证之后用户数据 4. 多…

IPLOOK 2025上半年足迹回顾:连接全球,步履不停

2025年上半年,IPLOOK积极活跃于全球通信舞台,足迹横跨亚洲、欧洲、非洲与北美洲,我们围绕5G核心网、私有网络、云化架构等方向,向来自不同地区的客户与合作伙伴展示了领先的端到端解决方案,深入了解各地市场需求与技术…

【Kafka】docker 中配置带 Kerberos 认证的 Kafka 环境(全过程)

1. 准备 docker 下载镜像 docker pull centos/systemd,该镜像是基于 centos7 增加了 systemd 的功能,可以更方便启动后台服务 启动镜像 使用 systemd 功能需要权限,如果是模拟 gitlab services 就不要使用 systemd 的方式启动 如果不使用 s…

用Python构建一个可扩展的多网盘聚合管理工具 (以阿里云盘为例)

摘要 本文旨在从开发者视角,探讨并实践如何构建一个命令行界面的、支持多网盘聚合管理的工具。我们将以阿里云盘为例,深入解析其API认证与核心操作,并用Python从零开始实现文件列表、重命名、分享等功能。更重要的是,本文将重点讨…

筑牢网络安全屏障

在数字化浪潮席卷全球的今天,网络空间已成为继陆、海、空、天之后的 “第五疆域”,深刻影响着国家政治、经济、军事等各个领域。“没有网络安全就没有国家安全”,这句论断精准道出了网络安全与国家安全之间密不可分的关系。​ 网络安全关乎国…

计算机网络(一)层

一、分层 分层的意义:简化复杂性、提高灵活性、促进标准化 (1)法律上国际标准——OSI体系结构 (2)事实上的网络标准——TCP/IP体系结构 TCP:运输层的协议 IP:网际层的一个协议 网络接口层&…

STM32 rs485实现中断DMA模式收发不定长数据

在STM32F103上使用TD301D485H模块通过USB转485/422串口线与电脑通信 TXD (TD301D485H) -> PA2 (STM32F103)RXD (TD301D485H) -> PA3 (STM32F103)CON (TD301D485H) -> PA1 (STM32F103) 由于485是半双工通信,需要在发送和接收时控制方向引脚(CO…

DDL-8-小结

DDL 小结 DDL 小结 DDL 小结DDL - 数据库操作DDL - 表操作 DDL - 数据库操作 查看当前有哪些数据库 SHOW DATABASES;新建数据库 CREATE DATABASE 数据库名;使用数据库 USE 数据库名;查询当前数据库 SELECT DATABASE();删除数据库 DROP DATABASE 数据库名;DDL - 表操作 查看当前…

Redis 安装使用教程

一、Redis 简介 Redis 是一个开源(BSD 许可)、内存数据结构存储系统,可以用作数据库、缓存和消息中间件。支持字符串、哈希、列表、集合、有序集合等数据类型,广泛应用于分布式缓存、排行榜、实时数据分析等场景。 二、下载安装…

Go语言测试与调试:单元测试与基准测试

以下是《Go语言实战指南》中关于 测试与调试:单元测试与基准测试 的详细内容,涵盖测试编写、运行、覆盖率分析与性能测试,适用于实际项目开发与性能优化阶段。 一、Go 的测试体系概览 Go 提供原生的测试工具包 testing,无需第三方…

数字FIR-I型滤波器设计(窗函数法)

目录 一、实验目的 二、实验原理 2.1 概念辨析 2.2 代码实现逻辑与工具函数 三、实验内容 3.1 设计带通滤波器(电平组合法,(理想宽带低通-理想窄带低通)x窗函数) 3.2 高通滤波器(…