OpenChannelSSD之六_从OpenChannelSSD到ZNS

OpenChannelSSD之六_从OpenChannelSSD到ZNS

背景

关于在GitHub上的Open Channel SSD 的开源项目好久没人更新过,在qemu搭建的平台上改进过,经常会出现bug, 对内核版本,qemu版本,系统版本要求相当高了。
虽然有很多论文已经发表出来了,但是讲真的觉得很多都是理论假设,并不能真的得到相应的实验结果,因此在学相关方面内容一定要看顶会论文,毕竟阿里的内部技术并不是公开的。

如今企业级要实现云存储效率需要单个SSD满足许多不同的工作负载,而工作负载现在可以说是无处不在。在应用共享SSD的时候,负载之间干扰造成延时忽高忽低,最坏时延迟巨幅升高。 保证为每一个硬盘用户提供稳定的服务质量,才能体现出云环境的服务质量。

在这里插入图片描述

传统SSD把内部的FTL交给主机处理是Open-Channel SSD的主要功能,让用户自制属于自己的SSD。

Chunk 和 PU

Open-Channel SSD提出了chunk和PU的概念。
Chunks特点:

  • 在LBA范围内顺序写入;
  • 需要重置才能重写;
  • 借鉴HDD的SMR规范(ZAC / ZBC);
  • 针对SSD物理限制进行了优化:使写入与介质对齐
    在这里插入图片描述

Parallel Units特点:

  • Host可以对单独的工作负载进行direct I/O;
  • 单个或者多个die实现条带化;
  • 并行单元继承了底层介质的吞吐量和延迟特性;
  • 与NVMe中的I / O确定性相似的概念;

在这里插入图片描述

不难看出,Open-Channel SSD实现了I/O分离,可预测性延迟的特点,FTL功能移至Host端负责数据管理以及I/O调度。
但是实际情况,Open-Channel Specification 仅仅定义了Open-Channel涉及的最为通用的部分。不同厂商的SSD产品特性不同,它们或者难以统一,对定制化应用和工作负载的需求,依旧欠缺灵活性

关于Zoned Namespaces (ZNS)

采用Open-Channel SSD架构有阿里,微软等,将这个架构成为NVMe标准规范一部分的概念,提供灵活的定制化需求是一个热点研究。西部存储将功能驱动到解决关键OCSSD用例的NVMe中,提出了ZNS的概念。

• 它是NVMe工作组中的技术提案

  • 相对于正常的NVMe Namespace, Zoned Namespace将一个Namespace的逻辑地址
    空间切分成一个个的zone。Zone的基本操作有Read, Append Write,Zone
    Management 以及Get Log Page。

• 将zone接口标准化是为了:

  • 减少设备端的WAF;
  • 减少OP;
  • 减少SSD的DRAM,这是SSD中代价最高的部分;
  • 改善延迟和吞吐量;
  • 适用软件生态系统;

在这里插入图片描述

怎么来理解?
ZNS与SMR的ZBC / ZAC相似
• 存储空间被分成多个zone
• 每一段zone内都是顺序写入的
• 它是针对SSD优化的接口
-与介质特征保持一致(Zone的大小和Nand的块大小一致,Zone的容量与介质大小一致)
-减少NAND介质擦除周期

关于Zone的信息:
• Zone 状态转换

  • Empty, Implicitly Opened, Explicitly Opened, Closed, Full, Read Only, Offline
  • Empty -> Open -> Full -> Empty -> ….
    • Zone Reset
  • Full -> Empty
  • Zone 大小 和 Zone容量
    • Zone 大小是固定的
    • Zone容量是在一个Zone内的可写区域
    • 与Open-Channel相比,最大的区别就是在Zoned Namespace中,Zone的地址是LBA(Logical Block Address, 逻辑块地址)Zone Namespace就可以避免Open-Channel里繁琐的
      各类地址转换。

在这里插入图片描述
在这里插入图片描述

考虑到对一个区域(zone)多个写入的可伸缩性低(如下图为例),ZAC/ZBC 需要严格的写入顺序,限制写入性能还会增加host的开销,因此,软件生态系统,HBA等面临巨大挑战。

在这里插入图片描述

所以引入追加区域 (Zone Append),将数据追加到一个区域而不定义偏移量,由驱动器返回将数据写入该区域的位置。

Zone Write 示例:
3x Writes (4K, 8K, 16K) – Queue Depth = 1

在这里插入图片描述

Zone Append 示例:
3x Writes (4K, 8K, 16K) – Queue Depth = 3

在这里插入图片描述

ZNS 指的是具有ZAC / ZBC软件生态系统的Synergy。
现有的ZAC/ZBC-aware文件系统和设备映射都“工作正常”,支持ZNS只需要很少的更改;重用已应用于ZAC / ZBC硬盘驱动器(SMR)的现有工作;直接与文件系统集成(没有host-side FTL;1TB的介质设备不需要1GB 的DRAM; 能更好地利用SSD);代码已经在大厂商生产中使用,并且可以在Linux生态系统中使用。

在这里插入图片描述

ZNS使用现有的存储堆栈:
• 用户空间库

  • Libzbd
  • Nvme-cli
  • Blktests
  • Util-linux (blkzone)
  • fio
  • libzns
    • 内核空间库
  • NVMe对Zones的支持
  • XFS, Btrfs, F2FS, dm-zoned, etc…
    • 具有ZNS支持的Qemu

ZNS是为了满足多数应用对QOS及Latency需求的基础,然而却不如Open-Channel灵活。

### ZNS SSD 的定义 Zone Namespaces (ZNS) SSD 是一种新型的固态硬盘技术,旨在通过重新设计存储接口来优化闪存介质的工作方式。与传统的基于块的传统 NVMe SSD 不同,ZNS SSD 将物理 NAND 闪存划分为多个独立区域(zones),每个区域都具有固定的大小并支持顺序写入操作[^1]。 这种分区方法使得主机能够更好地控制数据放置位置,并减少了垃圾回收过程中所需的额外开销。此外,由于采用了更高效的地址映射机制,ZNS SSD 可以显著减少 DRAM 使用量和过度配置比例(OP),从而降低了整体成本[^2]。 ### ZNS SSD 的工作原理 #### 数据写入流程 当应用程序向 ZNS SSD 发起写请求时: - 主机首先会查询哪些 zone 处于可写状态; - 接着选择一个合适的可用 zone 进行连续的数据写入; - 如果当前 zone 写满,则自动切换到下一个未使用的 zone 继续写入过程; 这种方式确保了所有新数据都被追加到现有内容之后,而不是随机分布在各个地方,这有助于提高读取性能并延长设备寿命。 #### 垃圾回收机制 对于已经完成写周期或包含无效扇区的 zones: - 设备内部维护了一个列表用于跟踪这些不可再用的空间; - 当某个 zone 被标记为空闲后,它会被清理以便再次接受新的写入命令; - 清理过程中只涉及有效数据搬移而不影响其他正常工作的 zones; 这种方法不仅简化了磨损均衡算法的设计难度,同时也提高了整个系统的稳定性和可靠性。 ```python def write_data_to_zns_ssd(data_chunk): available_zones = get_available_zones() for chunk in data_chunk: current_zone = select_next_writeable_zone(available_zones) while not is_zone_full(current_zone): append_data(chunk, current_zone) mark_as_used(current_zone) update_zone_state() def garbage_collection(): stale_zones = identify_stale_or_invalid_zones() for zone in stale_zones: valid_data = move_valid_data_from(zone) erase_and_reset_zone(zone) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值