NVMe FDP会被广泛使用吗?

news2024/11/26 2:47:40

图片

文章开头,我们需要先了解固态硬盘的读写机制。我们知道,固态硬盘的存储单元是由闪存颗粒组成的,无法实现物理性的数据覆盖,只能擦除然后写入,重复这一过程。因而,我们可以想象得到,在实际读写过程中,数据的读写势必会在闪存颗粒上进行多次的擦除写入,特别是当某些区块已经完全被塞满的情况下。

这些多次的操作,增加的写入数量和原始需要写入的数量的比值,就是所谓的写入放大。所以说,写入放大数值高,会损耗固态硬盘寿命。(固态硬盘闪存颗粒有着额定的P/E值,即最大的读写次数,写入放大高,P/E损耗快,寿命低。)在QLC介质中,WAF的影响更加致命。

图片

举个例子,最坏情况下的,假如我要写入一个4KB的数据Z覆盖A,并恰好目标块没有空余的页区,需要进行GC回收。这个时候就需要把B、C、D、E、F五分数据都搬走,然后擦除整个数据块,擦除完成后再整体写入6个数据页。这个整个过程,Host虽然只写了4KB的数据,但实际过程中,由于GC的问题,NAND最终写入了24KB。那么写放大WAF=24KB/4KB=6.

图片


影响WAF的因素有很多:

  • SSD FTL算法的设计会影响写入放大的大小

  • Wear Leveling,WL磨损均衡:这一机制主要是通过均衡所有的闪存颗粒,从而延长整体的使用寿命,然而依旧是增加整体的写放大

  • Over-Provisioning,OP冗余空间:也会影响NAND写入的比例,最终影响写放大

  • Garbage Collection,GC垃圾回收:比如上面的例子,就是GC垃圾回收搬迁数据,擦除数据块后写入带来了整体写放大提升。

  • 业务读写的数据模型:随机写和顺序写对NAND的写入比例有非常大的影响,直接影响写放大的系数

  • 系统层的TRIM操作:会影响invalid无效数据是否在GC过程中搬迁,对写放大影响也有重要的作用。

写放大WAF是NAND-based SSD寿命消耗的关键参数,WAF越大,寿命消耗越快,越接近1,则寿命消耗越慢,也是最理想的情况。

扩展阅读:SSD写放大的优化策略要统一标准了吗?

NVME FDP(Flexible Data Placement)的出现,就是通过灵活的数据放置使主机服务器能够更好地控制数据在 SSD 中的位置。目标是减少写入放大以提高性能。谷歌和Meta向NVME协议组织提交了Flexible Direct Placement TP4146提案,小编在nvme spec 2.0c还没查到,根据最新消息,预计在NVME spec 2.5正式合入

图片

通过示意图,来看看FDP的作用。如下图,来自应用程序 A、B 和 C 的混合数据被写入介质中可用的“超级块”。然后,应用程序 A的数据被删除,删除后会触发盘内的GC垃圾回收。完成后,将测量两个模型的写放大 WAF。

图片

图片

  • 在传统SSD中,每个应用写的数据是散乱分布不同的Die/Block,需要盘预留空间OP完成垃圾回收数据搬迁,垃圾回收过程中,还有可能会影响前端IO性能。

  • 在FDP SSD中,不同的应用程序写入了特定的物理空间,即使某个程序的数据删除,可以针对指定的物理空间执行擦除,减少了不必要的垃圾回收,降低了写放大,同时也避免了对前端IO的影响。

Meta在跟韩国的一家SSD控制器厂商FADU合作中,FDP的功能已被验证可以有效降低写放大,减少了设备磨损,并提高了性能和 QoS。

图片

上图中数据显示:

  • 蓝色线是64K随机写,随着盘运行时间的增加,写放大也会不断增加,最后WAF超过3.

  • 黄色线是通过软件优化的方式调整数据落盘的方式“Log Structured 8 Writers 64KB”,写放大突增到2-2.4,之后保持正常波动,不再上升。

  • 红色线是“Log Structured 8 Writers 64KB with FDP”,在黄色线的基础上,打开FDP,写放大接近1.

图片

如上图,因为写放大的原因,对性能也产生了很大的影响。写放大的变化趋势和性能的变化趋势,基本成反比

此外,谷歌也在大力推进FDP的落地。根据谷歌公布的数据中心案例数据,基于4K随机写+OP 28%,在使能FDP功能下,写放大从2.5下降到1.25.

图片

谷歌这个案例可以看到FDP带给数据中心的好处有很多:

  • 节省OP空间,可以释放更多的存储容量,节省18%的成本。

  • 写放大的降低,也会提升盘的使用寿命,让SSD可以使用更长的时间,这部分也会有35%的成本节省。

  • 写放大降低后,也相应可以提升盘的性能。同样使能更多盘容量空间。

支持 FDP 的系统架构的前景,其中 WAF ~1 是新常态,应该足以引起任何超大规模运营商的注意。此外,FDP非常容易实现。它与旧主机向后兼容,因此无需升级基础架构。设备读取和其他行为不会更改。

扩展阅读:NVMe SSD:ZNS与FDP对决,你选谁?

读到这里,不知道大家是否有一个疑问,既然FDP这么优秀,会被广泛使用吗?

基于目前小编对FDP的认知,FDP在大型数据中心中应用可能会比较顺畅,Meta/Google也都在全力推进,并已经有突破的进展,但是并不会得到市场广泛应用。主要原因是FDP的实现,是需要对应用负载有清晰的了解,并有一定的软件开发适配。这部分开发适配的代价与使能FDP的收益,估计只有大规模数据中心可以最大化的平衡。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

04-SpringBoot的基础配置及其配置文件分类,解决Yaml文件失效问题

SpringBoot的配置 SpringBoot是用来提高Spring程序的开发效率的,使用SpringBoot后几乎不用做任何配置功能就有了,因为很多功能已经有默认配置帮我们做好了 配置文件的相关配置 在一个项目中不同的技术对应不同的配置文件并且这些配置文件的格式也不统一 SpringBoot提供了一…

打印由*组成的菱形

如图所示,这是我们要用代码所实现的图形。 那么我们该如何实现这个呢,对于这种题,我们只有静下心来找其中的规律了。 我们先来看看它的上面部分: 它是由空格和星号组成的,那么我们是不是可以先打印空格然后再打印星号…

2023 年 API 安全状况

在当今快速变革的数字世界中,API 已成为快速交付业务功能的关键。这些数字连接器支撑着我们今天见证的大部分企业创新,从无缝的客户体验到集成的合作伙伴生态系统。 随着 API 使用量的激增,潜在风险呈指数级增长。让我们用硬数据来说明 API …

【redis 面试题】③ 缓存雪崩

文章目录 前言一、什么是缓存雪崩二、缓存雪崩的解决方案 前言 跟着B站的黑马程序员学习面试题,目前是redis的第三个内容——缓存雪崩 课程传送门:redis——缓存雪崩 一、什么是缓存雪崩 缓存雪崩是设置缓存时采用了相同的过期时间,导致缓存…

Pytorch 快速参数权重初始化

定义一个函数: 这里比如要初始化2维卷积权重值,采用xaiver 数据分布,还有很多其他的数据分布可以探索 def weights_init(m):if isinstance(m, nn.Conv2d):xavier(m.weight.data)xavier(m.bias.data) 然后定义一个含2维卷积的网络&#xff…

HTML5+CSS3小实例:带功能区的图片悬停特效

实例:带功能区的图片悬停特效 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&…

esxi 6.7下安装黑裙

esxi上创建一个黑裙系统的虚拟机&#xff0c;用来存资料 一、工具 硬件&#xff1a; 工控机&#xff1a;装有esxi6.7系统&#xff08;192.168.100.2&#xff09;&#xff0c;配置&#xff1a;3865U&#xff0c;16G内存&#xff0c;120Gmsata120sata硬盘&#xff0c;6个网口 主…

oracle转换人大金仓全过程

前提 Oracle服务器&#xff1a;创建用户&#xff0c;导入数据库人大金仓服务&#xff1a;创建用户 注意&#xff1a;两者的参数设置要保持一致&#xff08;数字集UTF-8&#xff09;&#xff0c;人大金仓设置大小字符不敏感 人大金仓工具介绍 数字库开发管理工具&#xff1a;链…

【PTE-day03 报错注入】

报错注入 1、报错注入 group by count2、报错注入 extractvalue3、报错注入updatexml1、报错注入 group by count http://124.222.124.9:8888/Less-5/?id=-1 union select 1,count(*),concat((select database()),ceil(rand(0)*2)) as a from information_schema.tables grou…

思维模型 飞轮效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。万事开头难&#xff0c;坚持就不难。 1 飞轮效应的应用 1.1使用飞轮效应的亚马逊 亚马逊的创始人杰夫贝索斯&#xff08;Jeff Bezos&#xff09;提出了“飞轮理论”&#xff0c;即通过不断…

jira Licenses更新步骤

有时候我们不想花钱使用jira,那么只有通过一个月以续期的方式来使用jira。下面提供下自己实测的方式 1、获取License Key 登录地址&#xff1a;https://my.atlassian.com 登录自己的Google账号&#xff0c;进入到下面账号&#xff0c;然后点击“New Trial License” product上…

HTB——introduction to active directory

文章目录 一、Active directory structure二、Active Directory Terminology 一、Active directory structure Active Directory &#xff08;AD&#xff09; 是用于 Windows 网络环境的目录服务。它是一种分布式分层结构&#xff0c;允许集中管理组织的资源&#xff0c;包括用…

【java】实现自定义注解校验——方法一

自定义注解校验的实现步骤&#xff1a; 1.创建注解类&#xff0c;编写校验注解&#xff0c;即类似NotEmpty注解 2.编写自定义校验的逻辑实体类&#xff0c;编写具体的校验逻辑。(这个类可以实现ConstraintValidator这个接口&#xff0c;让注解用来校验) 3.开启使用自定义注解进…

14.2 并发与竞争实验

一、原子操作实验 这节使用原子操作来实现对 LED 设备的互斥访问&#xff0c;也就是只有一个应用程序能使用 LED。 1.1 实验程序编写 因为是 12 章已经修改了设备树&#xff0c;所以这里暂时不用修改。 在 /linux/atk-mpl/Drivers 该目录下创建 7_atomic 子目录&#xff0c;并且…

大数据商城人流数据分析与可视化 - python 大数据分析 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的基站数据分析与可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度…

pandas DataFrame转成字典

目录 dict形式list形式records形式split形式 dict形式 原数据 DateFrame.to_dict() pd.read_excel(r"D:\Users\admin\Desktop\授信额度使用.xlsx").to_dict()list形式 DateFrame.to_dict(‘list’) pd.read_excel(r"D:\Users\admin\Desktop\授信额度使用.x…

Python 爬虫基础

Python 爬虫基础 1.1 理论 在浏览器通过网页拼接【/robots.txt】来了解可爬取的网页路径范围 例如访问&#xff1a; https://www.csdn.net/robots.txt User-agent: * Disallow: /scripts Disallow: /public Disallow: /css/ Disallow: /images/ Disallow: /content/ Disallo…

企业为啥邀请媒体做专访?有哪些注意事项?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 一&#xff0c;企业邀请媒体做专访有以下几个原因&#xff1a; 1.提升品牌知名度&#xff1a;通过媒体的报道和专访&#xff0c;企业可以扩大品牌的曝光度&#xff0c;增加公众对企业的认…

oracle 数据库 LISTAGG详解

目录 简介: 效果展示&#xff1a; 举例&#xff1a; 测试表及数据&#xff1a; 简介: Oracle数据库的LISTAGG函数用于将多行数据合并为单个字符串&#xff0c;常见于分组操作&#xff0c;实现数据的垂直到水平的转换。 解决问题如&#xff1a;一个人有多个手机号&#xff0c…

系列一、Spring + SpringMVC + MyBatis整合

一、概述 整合 Spring、SpringMVC、MyBatis。 二、整合步骤 2.1、pom <dependencies><!-- 普通maven项目中使用Sl4j注解 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1…