企业级存储使用的SSD磁盘的健康度问题探讨

写在前面,我的主要工作是销售企业级存储系统的备品备件和提供一些额外的增值服务。谈到销售备件,很重要的就是备件质量了。现在SSD磁盘使用越来越广泛,对于SSD磁盘的健康度就是甲方爷爷们非常关心的一个问题。本文就是想梳理一下企业级SSD固态磁盘的健康度如何评测,估计会写成一个系列文章,本文是第一篇梳理一下基本概念和所有企业级SSD固态磁盘的基本原理和健康health 衡量指标,以后有机会会对我们focus的几个重要存储产品-DELL,EMC和NetApp,从存储OS的角度来看如何检查健康度。

科普为主,如果有理解不对的地方欢迎拍砖,加vx StorageExpert。非常底层专业的半导体技术不在我们cover范围之内,当然我也不懂。

基本概念

开始基本概念,这个对于熟悉Hard disk的传统工程师们很重要,HDD和SSD是完全不同的东西,不要使用一样的健康衡量指标。多说一句,有个国内巨大的第三方公司的采购要求就是所有磁盘的健康度都必须是100%,这就是瞎扯,根本不懂。

目前的主流SSD技术是NAND颗粒,还有NOR颗粒,用的比较少了,主要就是NAND,这个符合市场需求呀,存储密度高,擦写速度快,最重要的是成本低。

HDD磁盘存放数据的原理很简单,0和1就是通过有磁性和没有磁性来区分的。但SSD就不是这个原理了,它是通过晶体管来存放0和1的,简单理解,没有电子的时候就是1,有电子的时候就是0,与机械硬盘不同,浮栅晶体管写操作只能将“1”改写成“0”,不能将“0”改为“1”。如果想将“0”改为“1”,需要采取另外一个称为“擦写”的操作。

对于写操作,是将电子拉入晶体管的浮栅极,状态就变成了“0”。对于擦写操作则是将浮栅极中的电子拉出,这就是将其状态变成了“1”。重要概念来了,这里需要注意的是擦写操作会损伤隧道氧化层,如果隧道氧化层被完全损毁,那就失去了隔离电子的能力,这样这个晶体管就坏了。这就是为什么SSD的闪存颗粒有擦写次数限制的原因。

第二个重要概念,NAND的家族中,有不同的颗粒说法:

  • SLC - Single level cell
  • MLC - Multi level cell
  • TLC - Triple level cell
  • QLC - Quad level cell

看名字就大概知道含义了,这个1234就是一个单元可以存储1个/2个/3个/4个bit数据,简单理解就是在一个晶体管中可以存储更多的数据了。由于MLC、TLC和QLC需要严格控制电子数量,其写入动作就要繁琐很多,对应着写入速度就会变慢。同时,氧化层的寿命也会有差异,就是密度越高的寿命越短了,好处也是大大的,就是单位容量增加了,SSD容量更大了,当然单位成本就更便宜了。

下面的图可以简单清晰看到几种不同颗粒存放数据的差异。

还有一个一个问题就是,存储容量确实变大了,但是由于每个单元存储的数据变多,其擦写频率就变高了,速度也会下降,擦写对介电层的破坏是不可逆的,寿命自然就短了,但是无奈MLC以上的颗粒存储数据密度更高,单位价格就便宜便宜,所以还是有很大市场的。现在存储系统上的类似于960G,1.92T,3.84T,7.68T..... 最大好像有30T还是60T的磁盘,类似这样容量的都是TLC或者QLC去了,寿命变短了。

健康度衡量指标

在简单说明了SSD磁盘的原理以后,我们下面来到主题,如何衡量一个SSD磁盘的健康度呢?Health rate。

耐久性 - endurance:这个是SSD磁盘最重要一个衡量指标。耐久性的单位是P/E(Program/Erase)周期,也就是编程/擦写周期。由于每次擦写都会损伤浮栅晶体管的氧化层,这个指标描述了可以安全擦写的次数。下面的表是我找到的一个专业描述不同颗粒的P/E。

对比可以看出,SLC可以擦写5万到10万次,而TLC只可以安全擦写大概1千次。这个是对SSD寿命非常非常重要的一个指标。

TBWTotal Bytes Written,总写入量):灰常重要,用于衡量 SSD 可以写入多少数据。TBW是SSD的容量与P/E周期数的乘积,然后除以一个写放大因素。对于前面的乘积是很容易理解的,相当于每个单元都被擦写到极限次数了。举例来说,如果一个TLC的SSD的容量为960GB,P/E为1000,那么理论上来说可以反复写入960TB的数据。但是我们知道SSD的写数据是有最小粒度限制的,比如4KB或者8KB。所以,即使你写入1个字节的数据,那也要写4KB或者8KB的一个页。鉴于上述原因,在TBW的公式里面有有个写放大因素的系数在这里。

DWPDDrive Writes Per Day,每日驱动器写入):这是一个衡量 SSD 每天可以写入多少数据的指标。他表示在设备保修期内,每天可以写入SSD总容量的多少倍。举个例子,如果一个400GB的SSD,如果DWPD是 3,每天可以写入1200GB的数据。但是如果此SSD设备的DWPD是10的话,那么每天可以写入4TB的数据。在EMC的存储磁盘上,这个DWPD有清晰的说明,经常可以看到有3WPD,1WPD,还有 1/2WPD的盘。EMC都是按照5年来计算的。根据这些可以反着计算出磁盘的总写入量。

下面是EMC存储磁盘的对应关系:

  • 1/2 pwd   这个也叫做 sas flash 4, 也有是DWPD 的说法,7.68T和15T的SSD就是这种类型
  • 1 WPD → New SAS Flash 4
  • 3 WPD → SAS Flash 3 (TLC LE drives)   这个主要是 400/800/1.6T和3.2T
  • 10 WPD → SAS Flash 2
  • 25 WPD → SAS Flash

假设一个磁盘是 3WPD的400G SSD磁盘,使用5年,理论上总写入量TBW就应该是 400G*3*365*5=2190T

其他相关术语

SMARTSelf-Monitoring, Analysis and Reporting Technology:这个无论是HDD,还是SSD都有的。这是一个硬盘健康状态监控机制,可以提供 SSD 的各种健康状态信息,包括上述的 TBW 和 PE Cycles,以及其他如通电时间、加电次数、温度、错误率等信息。我知道在HDD,很多人是可以把这个SMART信息给清除掉,这样你要的健康度都是100%了。SSD能改的我知道应该不多。

Wear Leveling(磨损均衡):由于SSD的存储单元有擦写次数的限制,SSD控制器的算法会尽量保证闪存芯片的存储单元之间均匀分配写入操作,以最大限度地延长SSD的寿命。对于存储系统来说也有磨损均衡的说明,比如一个有100块SSD的存储系统,通常也有算法保证这100块SSD的数据写入是均衡的。在存储系统中,这个存储的操作系统会处理磨损均衡的问题。当然也有一些bug会导致某些磁盘磨损更快,我知道EMC的Unity某些SSD磁盘就有这个问题,很快就到了EOL的时间,这个通过升级磁盘的firmware是可以解决的。

Garbage Collection(垃圾回收):前面介绍过,SSD的空间不能直接覆盖写,必须擦除后才能重新写数据,这就是垃圾回收的问题。

最后,到底怎么看SSD的健康度呢?有了上述这些概念,再去使用类似硬盘哨兵Harddisk Sential 这样的软件去理解health rate了。当然你也可以通过SMART指标去自己计算。

写到最后,每个存储系统都根据自己使用的磁盘的P/E,会有一套自己的健康度计算方式,和这个hard Disk Sentinel 软件出来的结果会有所不同,但不会产生趋势性的差异,就是Hard Disk Sentinel中的健康度是95%,而到了存储系统里面确变成了5%,这个是不可能的,永远不可能的。

不同厂商的SSD磁盘在SMART中的内容是不同的,但大体是差不多的,很多可以看到一个Endurance的项目,就是持久度的值,这个是很多非专业存储软件定义的健康度。

后面会针对不同的EMC,NetApp和DELL存储产品,单独来写些东西给大家,怎么去看SSD的健康度和剩余寿命等。

好了,有问题加vx  StorageExpert吧。

  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端设计】card

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 html <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Android 基础技术——View 的宽高

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 View 的宽高 Activity Resume 的时候设置或者获取view的宽高是否有效? 回答&#xff1a;不确定。 首次 onResume 无效&#xff0c;二次 onResume 就有效了。 回顾「Android 基础技术——addView 流…

力扣509. 斐波那契数

动态规划 思路&#xff1a; 斐波那契数通式&#xff1a;F(n) F(n - 1) F(n - 2)&#xff1b;以此为状态转移方程&#xff0c;对其进行动态规划&#xff1b;边界条件&#xff1a; F(0) 0F(1) 1使用两个变量来存储上一组结果&#xff1b; class Solution { public:int fib(…

详解Python程序结构

Python是一种简单易学、功能强大的编程语言&#xff0c;它的程序结构简洁清晰&#xff0c;使得开发者能够高效地编写和维护代码。本文将重点介绍Python程序的结构&#xff0c;包括模块、包、函数、类等内容&#xff0c;以帮助初学者更好地了解Python的基本组织形式。 模块是Pyt…

java.lang.IllegalArgumentException: Request header is too largeiseases

问题 笔者使用SpringBoot开发服务端项目&#xff0c;客户端发送请求控制台报错 java.lang.IllegalArgumentException: Request header is too largeiseases详细问题 控制台详细报错如下 2024-01-20 18:44:46.541 INFO 16344 --- [nio-9090-exec-4] o.apache.coyote.http11…

Jmeter 配置元件

Jmeter 配置元件 CSV 数据集配置HTTP Cookie 管理器HTTP Header 信息头管理器增加多个用户案列 使用Jmeter发送请求的时候&#xff0c;需要配置元件&#xff0c;配置请求Header、Cookie、数据集合等。可以模拟多个在线用户登录&#xff0c;修改请求头数据。 CSV 数据集配置 C…

找不到x3daudio1_7.dll怎么解决,六种有效快速x3daudio1_7.dll修复教程分享

一、x3daudio17.dll是什么文件&#xff1f; x3daudio17.dll是一个动态链接库文件&#xff0c;它是Microsoft DirectX中的一部分。DirectX是微软公司开发的一种多媒体编程接口&#xff0c;用于处理音频、视频和图形等多媒体内容。而x3daudio17.dll则是DirectX中的一个组件&…

CMeet系列技术生态沙龙---城市开发者组织年度聚会·杭州 《把握未来趋势,持续学习创新》

CSDN始终致力于促进城市区域内尖端新兴技术开发者交流,提供开放自由的切磋平台。在这个充满挑战和机遇的一年即将结束之际&#xff0c;通过本次聚会&#xff0c;汇聚杭州本地各行各业的开发者朋友&#xff0c;回顾过去一年城市社区的成就和收获&#xff0c;感谢携手同行的各位,…

用Axure RP 9制作弹出框

制作流程 1.准备文本框 下拉列表 按钮 动态面板 如图 2.先把下拉列表放好 再放动态面板覆盖 3.点动态面板 进入界面 如图 4.给按钮添加交互 3个按钮一样的 如图 5.提交按钮添加交互 如图

Python——面向对象

前言 小伙伴们好久不见&#xff0c;本期我们了解一下Python中面向对象的一些基础知识&#xff0c;为以后的上位机学习做下基础&#xff0c;因为前面我们对c语言进行了系统学习&#xff0c;所以Python基础知识我们就不做阐述了&#xff0c;逻辑基本相同&#xff0c;就是书写的格…

Android学习之路(22) ARouter原理解析

1.ARouter认知 首先我们从命名来看:ARouter翻译过来就是一个路由器。 官方定义&#xff1a; 一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦 那么什么是路由呢&#xff1f; 简单理解就是&#xff1a;一个公共平台转发系统 工作方式&…

安装RabbitMQ sentos并挂载

1. usr/local/software/mq/data 创建data目录, mkdir data 2. 拉取镜像 docker pull rabbitmq 3.配置网络 docker network create --driver bridge --subnet172.18.12.0/16 --gateway172.18.1.1 wn_docker_net 4. 设置参数并创建挂载 docker run -it \ --name rabbitmq \…

SpringBoot 3.1.7 集成Sentinel

一、背景 我的项目需要引入限流&#xff0c;降级&#xff0c;熔断框架&#xff0c;由于 Spring Cloud 2022.0.4 已经不再支持 Hystrix&#xff0c;Spring Cloud 提供了替代方案&#xff0c;如 Resilience4j&#xff0c;可以使用它来替换 Hystrix。但是网上搜了一下国内Resilie…

Axure RP 9 动态面板

目录 轮播图绘制 多种方式登录 前言: 轮播图绘制、多种方式登录界面绘制 轮播图绘制 首先绘制一个动态面板 在概要区域选中动态面板进入State1面板中插入图片绘制 双击图片绘制插入本地图片&#xff0c;右键State1重复状态并更改图片 点击交互面板新建交互将需要添加…

【微服务】springcloud集成sleuth与zipkin实现链路追踪

目录 一、前言 二、分布式链路调用问题 三、链路追踪中的几个概念 3.1 什么是链路追踪 3.2 常用的链路追踪技术 3.3 链路追踪的几个术语 3.3.1 span ​编辑 3.3.2 trace 3.3.3 Annotation 四、sluth与zipkin概述 4.1 sluth介绍 4.1.1 sluth是什么 4.1.2 sluth核心…

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法&#xff0c;也是经常使用的命令&#xff0c; -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示&#xff0c;top命令可以看…

Servlet系列两种创建方式

一、使用web.xml的方式配置&#xff08;Servlet2.5之前使用&#xff09; 在早期版本的Java EE中&#xff0c;可以使用XML配置文件来定义Servlet。在web.xml文件中&#xff0c;可以定义Servlet的名称、类名、初始化参数等。然后&#xff0c;在Java代码中实现Servlet接口&#x…

C++逆向分析New_Delete

一个运行程序是一定有四个区域&#xff0c;分别是&#xff1a;代码区&#xff0c;数据区&#xff0c;栈区&#xff0c;堆区。 栈区我们知道&#xff0c;是函数传参保存临时变量的一段内存空间。那么堆区是干嘛的呢&#xff1f; 堆区就是动态开辟的一块内存空间&#xff0c;用…

年味渐近 其乐龍龍!2024四川省网联会年货节闪亮来袭!

1月19日&#xff0c;“其乐龍龍2024四川省网联会年货节”正式启动&#xff0c;此次活动由四川省网联会主办&#xff0c;以直播、短视频多种形式在抖音、微博、小红书等多平台同步呈现&#xff0c;旨在为广大消费者带来一场别开生面的年货盛宴&#xff0c;助力激发消费活力。 年…

数据结构:链式队列

队列是限制在两端操作进行插入操作与删除操作的线性表&#xff0c;允许进行插入操作的一端称为"队尾"&#xff0c;允许进行删除操作的一端称为“队头”。当线性表中没有元素时&#xff0c;称为“空队”。队列的特点是先进先出。 队列两种规定&#xff1a; 1、front…