故事前传
在深邃的夜空下,星星像闪烁的灯光,点缀在无边的宇宙中。就在这充满神秘的夜空背景下,一个热爱探索未知的电脑爱好者,小张,对他的电脑世界充满了无尽的好奇。
小张的电脑就像他的朋友,陪他度过了一个又一个日夜。其中,一块SSD硬盘更是他珍贵的宝贝,因为这里面装载了他多年的心血,大量的照片、视频、设计文件,还有那些无数个日夜他与朋友们在虚拟世界中的冒险。
然而,最近小张发现他的SSD寿命即将到期。他开始担心,如果SSD寿命到了,他的数据是否会消失?他是否需要购买新的硬盘?他的数据是否还能恢复?一连串的问题让他感到困扰。
我们这篇文章就来解答下小张同学疑问
SSD的存储介质是什么,它就是NAND闪存。那你知道NAND闪存是怎么工作的吗?其实,它就是由很多个晶体管组成的。这些晶体管里面存储着电荷,代表着我们的二进制数据,要么是“0”,要么是“1”。NAND闪存原理上是一个CMOS管,有两个栅极,一个是控制栅极(Control Gate), 一个是浮栅(Floating Gate). 浮栅的作用就是存储电荷,而浮栅与沟道之间的氧化层(Oxide Layer)的好坏决定着浮栅存储电荷的可靠性,也就是NAND闪存的寿命。
但是呢,这些晶体管的电荷可不是永久存在的。它们就像一群顽皮的孩子,喜欢跑来跑去。如果你经常让它们进行“擦除”和“写入”的操作(NAND闪存中,P/E Cycle,也称为擦除次数),它们就会觉得累,电荷的存储能力也会逐渐下降(浮栅与沟道之间的氧化层被磨损的越来越严重,导致浮栅中电子的控制越来越艰难)。直到有一天,它们再也不想存储电荷了,那这个时候,你的SSD的寿命也就差不多了。
所以呢,SSD寿命评估的底层机理,其实就是计算NAND闪存的擦除和写入次数(P/E Cycle)。每个晶体管都有一个固定的擦除和写入次数,就像我们的腿一样,跑多了会累,会磨损。当这些晶体管达到一定的磨损程度时,它们就再也存储不了电荷了,这时候你的SSD可就要退休了哦!
目前市面上主要流通的就是4种NAND类型:SLC、MLC、TLC、QLC。随着每个寿命从高到低依次是SLC>MLC>TLC>QLC.
随着单个cell含有的bit数越多,NAND的可靠性也会有所降低。同时写延迟也在不断的增加。SLC写延迟在0.5ms级别,到QLC写延迟达到10-20ms,40倍的差距。
SSD寿命评估的指标主要包括两个:DWPD(Drive Writes Per Day)和TBW(Total Bytes Written)。
DWPD,即每天可以写入SSD的数据量,是衡量SSD寿命的重要指标之一。一般来说,DWPD越大,SSD的寿命越长。DWPD的计算公式为:
DWPD = (闪存P/E周期×SSD容量) ÷ 年写入数据量
其中,闪存P/E周期是NAND闪存的基本存储单元(浮栅晶体管)可进行擦除和编程的次数,这个值取决于NAND闪存的规格和制造商的规定。SSD容量表示其存储空间大小。年写入数据量则取决于用户的使用情况。
另一个评估指标是TBW,即SSD在寿命周期内可以承受的总写入数据量。TBW的计算公式为:
TBW = (每扇区可编程次数×SSD总扇区数×每天写入次数) ÷ 每扇区可编程次数
其中,每扇区可编程次数是指每个存储块(Block)可进行的编程次数,这个值取决于NAND闪存的规格和制造商的规定。SSD总扇区数表示其内部存储结构中的总扇区数。每天写入次数则根据用户使用情况而定。
DWPD和TBW都是用来衡量SSD寿命的指标,DWPD更关注每天的使用频率,而TBW则关注硬盘的总写入能力。一般来说,DWPD越大,TBW越大,SSD的寿命也越长。然而,这些指标只是评估SSD寿命的参考值,实际使用寿命还受到其他因素的影响,如工作负载、环境温度、SSD的写入策略等。
如何查看SSD寿命?
windows下获取寿命的方式:使用CrystalDiskinfo
linux获取盘SSD的smart的方式:其中“percentage_used”就是nvme协议规定的已使用的寿命比例。
nvme smart-log /dev/nvme0n1
Smart Log for NVMe device '/dev/nvme0n1'
critical_warning : 0
temperature : 48 [Celsius]
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
data_units_read : 1,665,234 [GB]
data_units_written : 463,676 [GB]
host_read_commands : 2,611,299,337
host_write_commands : 1,166,374,448
controller_busy_time : 0 [ms]
power_cycle_count : 177
warning_timer_count : 0
power_off_count : 0
shutdown_count : 0
data_units_read_power_cycle_count : 1,190
data_units_written_power_cycle_count : 942
data_units_read_warning_timer_count : 0
data_units_written_warning_timer_count : 0
sata ssd可以使用smartctl -l devstat获取,其中“Percentage Used Endurance Indicator”代表已使用寿命的比例
Device Statistics (GP Log 0x04)
Page Offset Size Value Description
1 ===== = = == General Statistics (rev 2) ==
1 0x008 4 3 Lifetime Power-On Resets
1 0x010 4 0 Power-on Hours
1 0x018 6 0 Logical Sectors Written
1 0x020 6 32768 Number of Write Commands
1 0x028 6 432 Logical Sectors Read
1 0x030 6 32780 Number of Read Commands
4 ===== = = == General Errors Statistics (rev 1) ==
4 0x008 4 0 Number of Reported Uncorrectable Errors
4 0x010 4 0 Resets Between Cmd Acceptance and Completion
6 ===== = = == Transport Statistics (rev 1) ==
6 0x008 4 6 Number of Hardware Resets
6 0x010 4 0 Number of ASR Events
6 0x018 4 0 Number of Interface CRC Errors
7 ===== = = == Solid State Device Statistics (rev 1) ==
7 0x008 1 0 Percentage Used Endurance Indicator
当然啦,SSD的寿命还会受到其他因素的影响,比如写入放大、工作环境、工作负载等等。所以呢,我们在评估SSD的寿命时,还要综合考虑这些因素。
其中,要了解些放大,我们需要先了解固态硬盘的读写机制。我们知道,固态硬盘的存储单元是由闪存颗粒组成的,无法实现物理性的数据覆盖,只能擦除然后写入,重复这一过程。因而,我们可以想象得到,在实际读写过程中,数据的读写势必会在闪存颗粒上进行多次的擦除写入,特别是当某些区块已经完全被塞满的情况下。
这些多次的操作,增加的写入数量和原始需要写入的数量的比值,就是所谓的写入放大。所以说,写入放大数值高,会损耗固态硬盘寿命。(固态硬盘闪存颗粒有着额定的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的寿命到期后,是否可以继续使用?虽然SSD的寿命主要是根据闪存单元的擦写次数预测的,但实际情况并不会完全按照预测发展。即使SSD的寿命到了,它的存储单元可能仍然完好无损,可以继续使用。此外,SSD拥有众多的数据保护机制,当SSD的寿命预计即将到期时,SSD会进入自我保护状态,降低写入量,减缓擦写次数,从而延长使用寿命。因此,即使SSD的寿命到期,用户也可以继续使用它,但是,此时SSD的性能可能会降低,数据可靠性也会受到影响,因此建议及时更换SSD。