当前位置: 首页 > news >正文

NVMe FDP会被广泛使用吗?

图片

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

这些多次的操作,增加的写入数量和原始需要写入的数量的比值,就是所谓的写入放大。所以说,写入放大数值高,会损耗固态硬盘寿命。(固态硬盘闪存颗粒有着额定的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的收益,估计只有大规模数据中心可以最大化的平衡。

相关文章:

NVMe FDP会被广泛使用吗?

文章开头,我们需要先了解固态硬盘的读写机制。我们知道,固态硬盘的存储单元是由闪存颗粒组成的,无法实现物理性的数据覆盖,只能擦除然后写入,重复这一过程。因而,我们可以想象得到,在实际读写过…...

[黑马程序员Pandas教程]——Pandas数据结构

目录: 学习目标认识Pandas中的数据结构和数据类型Series对象通过numpy.ndarray数组来创建通过list列表来创建使用字典或元组创建s对象在notebook中不写printSeries对象常用API布尔值列表获取Series对象中部分数据Series对象的运算DataFrame对象创建df对象DataFrame…...

AI 绘画 | Stable Diffusion 提示词

Prompts提示词简介 在Stable Diffusion中,Prompts是控制模型生成图像的关键输入参数。它们是一种文本提示,告诉模型应该生成什么样的图像。 Prompts可以是任何文本输入,包括描述图像的文本,如“一只橘色的短毛猫,坐在…...

tomcat默认最大线程数、等待队列长度、连接超时时间

tomcat默认最大线程数、等待队列长度、连接超时时间 tomcat的默认最大线程数是200,默认核心线程数(最小空闲线程数)是10。 在核心线程数满了之后,会直接启用最大线程数(和JDK线程池不一样,JDK线程池先使用工作队列再使用最大线程…...

本地部署 CogVLM

本地部署 CogVLM CogVLM 是什么CogVLM Github 地址部署 CogVLM启动 CogVLM CogVLM 是什么 CogVLM 是一个强大的开源视觉语言模型(VLM)。CogVLM-17B 拥有 100 亿视觉参数和 70 亿语言参数。 CogVLM-17B 在 10 个经典跨模态基准测试上取得了 SOTA 性能&am…...

bff层解决了什么痛点

bff层 -- 服务于前端的后端 什么是bff? Backend For Frontend(服务于前端的后端),也就是服务器设计API的时候会考虑前端的使用,并在服务端直接进行业务逻辑的处理,又称为用户体验适配器。BFF只是一种逻辑…...

面试经典150题——Day33

文章目录 一、题目二、题解 一、题目 76. Minimum Window Substring Given two strings s and t of lengths m and n respectively, return the minimum window substring of s such that every character in t (including duplicates) is included in the window. If there …...

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙,没怎么记录东西了。Android的Handler重要性不必赘述,之前也写过几篇关于hanlder的文章了: Handler有多深?连环二十七问Android多线程:深入分析 Handler机制源码(二) And…...

Javaweb之javascript的详细解析

JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过代码/js效果演示提供资料进行效果演示&…...

Linux常用命令——cd命令

在线Linux命令查询工具 cd 切换用户当前工作目录 补充说明 cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directo…...

VHDL基础知识笔记(1)

1.实体:其电路意义相当于器件,它相当于电路原理图上的元器件符号。它给出了器件的输入输出引脚。实体又被称为模块。 2.结构体:这个部分会给出实体(或者说模块)的具体实现,指定输入和输出的行为。结构体的…...

volatile-日常使用场景

6.4 如何正确使用volatile 单一赋值可以,但是含复合运算赋值不可以(i之类的) volatile int a 10; volatile boolean flag true; 状态标志,判断业务是否结束 作为一个布尔状态标志,用于指示发生了一个重要的一次…...

策略模式在数据接收和发送场景的应用

在本篇文章中,我们介绍了策略模式,并在数据接收和发送场景中使用了策略模式。 背景 在最近项目中,需要与外部系统进行数据交互,刚开始交互的系统较为单一,刚开始设计方案时打算使用了if else 进行判断: if(…...

学习LevelDB架构的检索技术

目录 一、LevelDB介绍 二、LevelDB优化检索系统关键点分析 三、读写分离设计和内存数据管理 (一)内存数据管理 跳表代替B树 内存数据分为两块:MemTable(可读可写) Immutable MemTable(只读&#xff0…...

Docker Swarm实现容器的复制均衡及动态管理:详细过程版

Swarm简介 Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py…...

Proteus仿真--1602LCD显示仿手机键盘按键字符(仿真文件+程序)

本文主要介绍基于51单片机的1602LCD显示仿手机键盘按键字符(完整仿真源文件及代码见文末链接) 仿真图如下 其中左下角12个按键模拟仿真手机键盘,使用方法同手机键一样,长按自动跳动切换键值,松手后确认选择&#xff…...

Rust语言和curl库编写程序

这是一个使用Rust语言和curl库编写的爬虫程序&#xff0c;用于爬取视频。 use std::env; use std::net::TcpStream; use std::io::{BufReader, BufWriter}; ​ fn main() {// 获取命令行参数let args: Vec<String> env::args().collect();let proxy_host args[1].clon…...

FSDiffReg:心脏图像的特征和分数扩散引导无监督形变图像配准

论文标题&#xff1a; FSDiffReg: Feature-wise and Score-wise Diffusion-guided Unsupervised Deformable Image Registration for Cardiac Images 翻译&#xff1a; FSDiffReg&#xff1a;心脏图像的特征和分数扩散引导无监督形变图像配准 摘要 无监督可变形图像配准是医学…...

音视频技术开发周刊 | 318

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 日程揭晓&#xff01;速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站&#xff0c;保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…...

asp.net docker-compose添加sql server

打开docker-compose.yml 添加 sqldata:image: mysql:8.1.0 打开docker-compose.override.yml 添加 sqldata:environment:- MYSQL_ROOT_PASSWORDPasswordports:- "8080:8080"volumes:- killsb-one-sqldata:/etc/mysql/conf.d 在docker里面就有了sql server容器镜像…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...