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

ZNS出现的背景是什么?ZNS SSD的原理是把namespace空间划分多个zone空间,zone空间内部执行顺序读写。

在ZNS的场景下,不同应用按照Zone配置信息,相应存放业务数据。由于是Host管理数据的摆放和存取位置,会最大程度减少GC垃圾回收。降低SSD内部的写放大,提升SSD的寿命。

减少SSD的DRAM空间和去掉OP冗余空间,提升用户可用的容量。

扩展阅读:

Flash-Friendly File System(F2FS)作为一种专为闪存优化的日志结构化文件系统,其核心特点之一是采用了日志结构化设计,即LFS(Log-Structured File System)模式,特别适合与ZNS SSD配合使用。因为ZNS SSD要求数据在每个区域内按顺序写入,而LFS模式本身就强调将写操作以连续的块序列形式记录在存储介质上,两者在设计理念上天然吻合。

ZNS将存储区域划分为一系列独立的区域(zones),每个区域具有其自身的写入规则和容量属性。特别强调了两个与区域相关的参数:zone-size和zone-capacity。

  • Zone-size:指的是一个区域内包含的逻辑块总数。这是一个固定值,表示从区域起始到结束的整个物理范围,包括所有可写入和不可写入的逻辑块。

  • Zone-capacity:则是指区域内可用于有效数据存储的逻辑块数量,它代表了用户在该区域中可以实际写入数据的容量。值得注意的是,zone-capacity可以等于或小于zone-size。这意味着在区域内部可能存在一些不能被用户使用的逻辑块,它们可能是出于硬件维护、磨损均衡或其他内部管理目的而被SSD制造商预留给系统使用的。

当F2FS被用于管理ZNS SSD时,它会充分利用ZNS提供的zone-capacity信息来优化存储管理。在F2FS初始化挂载时,系统会检查每个区域的zone-capacity是否小于zone-size。如果是这种情况,表明该区域存在一部分不可用的逻辑块。此时,F2FS会在空闲段位图(free segment bitmap)中标记那些起始于zone-capacity之后的所有段(segments)为非空闲状态。这样做有以下几个目的:

  1. 防止误分配:将这些段标记为已使用,可以防止文件系统在后续的写操作中错误地将新数据写入这些实际上不可用的区域,从而避免了可能的数据丢失或系统故障。

  2. 减少GC负担:由于这些段内包含的逻辑块无法用于数据存储,因此它们自然无需参与垃圾回收(garbage collection,简称GC)。GC是文件系统用来回收无效数据占用空间、保持存储空间高效利用的过程。若提前知道某些段不会发生有效数据写入,那么文件系统就可以避免在GC过程中对这些段进行扫描和整理,从而大大降低了GC的复杂度和开销。

在处理zone-capacity与默认段大小(在F2FS中通常是2MB)不对齐的情况时,可能出现一个segment跨越zone-capacity边界的情况。这种跨越zone-capacity边界的spanning segments虽然开始位置位于zone-capacity之前,但其部分或全部延伸到了zone-capacity之后。对于这类segment,F2FS仍然视其为可用的:

  • 对于跨越区容量边界但起始位置在区容量之前的segment,其在区容量范围内的部分被视为可写入的,这部分逻辑块可以被正常分配给用户数据。

  • 而跨越区容量边界后超出区容量的部分则被认为是不可用的,这部分逻辑块不会被分配给用户数据,也不需要进行垃圾收集。

为了适应ZNS SSD的特性,F2FS采用多设备配置。具体而言,将元数据(如超级块、检查点、段信息表、节点地址表和段摘要区等)放置在具备随机写入能力的存储设备上,而将主要的数据块(节点和数据)放在ZNS SSD上。这样的布局确保了元数据不受ZNS的顺序写入约束影响,能够快速响应更新请求,同时充分发挥ZNS SSD在顺序写入上的优势。

在LFS模式下,F2FS强制所有写操作按顺序写入,并确保在section内部按顺序使用segment。这种设计完全符合ZNS SSD要求在单个zone内顺序写入的特性。LFS模式确保了F2FS与ZNS SSD的深度整合,使得文件系统的写操作严格遵循ZNS设备的底层物理特性,从而避免了因违反写入顺序而导致的性能损失。

尽管F2FS与ZNS SSD的结合在理论上有利于降低GC开销,但在实际应用中,特别是在写密集型工作负载下,仍可能出现性能下降。这是由于在高利用率场景(即OP配置空间较少)下,垃圾回收过程可能导致大量有效数据需要移动,涉及定位有效块并将其移至其他区域的操作,这一过程既消耗时间又影响整体系统性能。此外,F2FS在处理ZNS SSD时,可能会被迫将直接写direct I/O转换为buffer I/O,而突发的buffer IO读写操作可能导致内存使用激增、页面缓存被丢弃,进而影响数据移动过程,特别是涉及大序列写入和随机读取的操作。

相关推荐
和光同尘@几秒前
66. 加一 (编程基础0到1)(Leetcode)
数据结构·人工智能·算法·leetcode·职场和发展
伍哥的传说6 分钟前
Lodash-es 完整开发指南:ES模块化JavaScript工具库实战教程
大数据·javascript·elasticsearch·lodash-es·javascript工具库·es模块·按需导入
飞哥数智坊12 分钟前
放弃 Cursor 后,我又试了 CodeBuddy,感觉国产又行了
人工智能·codebuddy
新智元32 分钟前
世界首富换人!81 岁硅谷狂人 4000 亿身价碾压马斯克,33 岁华裔才女逆袭
人工智能·openai
lingling00935 分钟前
分子生物学ELN系统:如何通过衍因科技实现实验室效率革命
人工智能
sunshine-sm44 分钟前
CentOS Steam 9安装 MySQL 8
linux·运维·服务器·数据库·mysql·centos·centos stream
机器之心1 小时前
交互扩展时代来临:创智复旦字节重磅发布AgentGym-RL,昇腾加持,开创智能体训练新范式
人工智能·openai
请提交用户昵称1 小时前
大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。
大数据·flume·datax·dolphin·presto·findbi·大数据组件
max5006001 小时前
实时多模态电力交易决策系统:设计与实现
图像处理·人工智能·深度学习·算法·音视频
IT果果日记1 小时前
详解DataX开发达梦数据库插件
大数据·数据库·后端