Part.1
事件背景
2021年2月,特斯拉宣布在中国市场召回36,126辆进口Model S和Model X车辆,以及在美国市场召回大约134,900辆同款车型。召回的原因是这些车辆装载的eMMC多媒体存储卡达到了它们的编程/擦除周期寿命极限,导致了文件系统完整性维护的问题。
故障影响
车辆中央显示屏故障:包括但不限于导航、媒体播放和其他依赖于显示屏的功能失效。
驾驶安全风险:由于显示屏上的信息对于驾驶辅助至关重要,因此可能造成一定的安全隐患,如倒车影像不可见或不清晰等。
解决方案
特斯拉为受影响的车辆提供免费的服务,将原有的8GB eMMC模块升级到64GB版本,以延长其使用寿命并恢复相关功能。另外特斯拉表示,在eMMC达到累计损耗寿命极限前的一到六个月,用户会收到中央显示屏发出的警告提示,提醒用户预约售后维修服务。
事件影响及思考
特斯拉eMMC(嵌入式多媒体卡)耗尽事件,不仅给车主造成了安全驾驶风险,而且也导致公司成本增加、品牌形象受损等严重后果。此事件再次警示我们,保证存储卡寿命对于设备可靠性和数据安全性至关重要。
存储卡寿命是一个产品生命周期中一个值得探讨的话题,本文将为你分享威努特在存储卡寿命测试中的一些方法和实践过程。
Part.2
存储卡寿命概念
存储卡寿命是指存储卡从最初使用到出现无法正常工作或性能严重下降等故障状况时所能持续的时间。存储卡寿命终止后,会导致无法读写数据、数据丢失或损坏、读写速度大幅下降。
读写对存储卡寿命影响
写操作(包括编程和擦除操作)是导致闪存单元磨损的主要原因。每次进行写入或擦除操作时,需要对存储单元施加较高电压,都会对存储单元造成一定的损耗。读操作对闪存寿命的影响很小,基本可以忽略。为了延长存储寿命,主要是减少不必要的写入操作;存储卡寿命测试,也主要是测试写入操作。
存储卡理论寿命
存储卡主要由闪存芯片构成,闪存芯片的写入寿命限制,通常用 P/E 次数(Program/Erase Cycles,即编程 / 擦除周期)来衡量。一般 TLC(Triple-Level Cell )闪存的 P/E 次数在 1000-3000 次左右,MLC(Multi-Level Cell) 闪存的 P/E 次数在 3000-10000 次左右,而 SLC(Single-Level Cell)闪存的 P/E 次数可达 10 万次以上。
图2-1 三种闪存技术区别
我们在存储选型时主要参考产品中业务数据的写入量,如果写入量比较大,就要选择容量大、耐擦写的存储卡,可参考指标TBW(Terabytes Written,写入太字节数),和P/E周期数理论计算关系为:P/E周期数=TBW/容量,此公式是一个理论值,实际使用中可能会因为写入放大(Write Amplification) 等因素导致实际寿命与理论值有所差异。
比如,当主机请求写入一个较小的数据块时,闪存可能需要先读取整个block,并将原有数据和新数据一起写入到新的block中,然后再将原有的block擦除。这个过程导致实际写入的数据量大于主机请求的数据量,从而产生了写入放大。
写入放大系数是一个衡量闪存存储器性能的指标,它表示实际写入到存储介质中的数据量与主机请求写入的数据量之间的比率。
所以,实际应用中,TBW和P/E周期数的计算关系一般为:
P/E周期数 = TBW / 容量 / 写入放大系数
写入放大系数也和产品的实现方案有关,为了降低写入放大系数,可以采取以下方法:
块对齐写入:确保主机写入的数据是以闪存块为单位进行的,这样可以避免跨多个闪存块的写入操作,减少数据冗余。
避免频繁的小写入:尽量避免频繁地进行小块的写入操作,而是优先进行较大块的写入,从而降低写入放大。
垃圾回收:定期进行存储卡的垃圾回收操作,将无效或已删除的数据块清除掉。垃圾回收可以整理闪存存储,减少数据碎片,从而降低写入放大系数。
数据合并:在闪存中,不同数据块之间可能存在空白区域。将新写入的数据合并到这些空白区域中,而不是单独写入新的数据块,可以减少数据冗余。
*本文主要针对的是闪存,而机械硬盘有其固有特性,并不适用。
Part.3
存储卡寿命测试的意义
确保存储卡满足产品的寿命要求
在特斯拉案例中,如果提前对此模块做测试,就能识别出此配件不满足要求,而会换装一个更耐擦写的存储卡。
在一些关键领域和环境中如工业控制现场,每个产品都有严格的寿命要求。在寿命周期内,必须保证产品可靠、稳定运行,否则可能造成灾难性后果。影响产品寿命的一个主要因素是易消耗类部件如存储卡。例如某款产品我们承诺其寿命能支撑20年,那么在20年内,其存储卡的写入寿命不能被耗尽。这些要求都需要通过实测数据来证实,从而获得客户的信任。如果测试发现存储卡寿命不满足当前业务要求或对未来扩展业务存在风险,就需要升级为更耐擦写的存储卡(如某SLC增强型存储卡寿命提升了10倍,擦写次数由3000提升为30000次),具体选择什么类型的存储卡,就需要详细测试数据做支撑。更耐擦写的存储卡也意味着更高的价钱、更高的成本,所以存储卡寿命测试也是保障产品利润的重要方法。
为产品优化IO写入提供依据
如果IO写入速率不做合理控制,无论提供多强的存储卡,都无法保证其寿命,所以在测试存储卡寿命时,IO写入是我们重点关注的内容,例如我们测试有的业务模块时,发现其IO写入速率过大且数据无关紧要如一些日志打印,最终优化为在默认模式下避免此类内容输出。有的新增模块只是一个计数,但是IO写入增量比较大,最终采取了以缓存方式做实时更新,周期性(降低写入频率)对数据库进行操作。在产品中增加任何一个涉及写入量的功能模块,都需要对其IO进行测试,并比对历史数据来快速判断对存储寿命的影响。
除了和主程序相关的IO数据外,也需要关注系统级一些容易被忽略的IO写入。必须合理控制好IO写入,才能为存储卡寿命提供必要保障。
前面提到的写入放大系数,也和具体的写入代码实现有相关性,这些都需要经过实际测试才能获得最真实可靠的数据参考,为产品优化提供数据支撑。通过存储卡寿命测试,降低了产品IO,也可以间接地提升产品性能。
Part.4
存储卡寿命测试实践
本章节主要介绍威努特产品在存储卡寿命测试中的一些实践经验。
影响存储卡寿命的两个核心因子是其容量和支持的擦写次数,所以我们的测试主要围绕这两个因子进行,即通过测试固定业务模型下某个周期内存储卡完整擦写次数,来推算此存储卡能支撑的理论寿命。
SSD存储卡寿命计算方法
在这里我们只考虑核心因子来计算存储卡寿命,公式如下:
C(寿命总周期) = N(支持的擦写总次数)/ T(擦写一次所支持的周期)
在以上公式中N(或通过TBW间接计算出)是已知量,只要将变量T确定,就能得出此存储卡在相应产品的具体业务模型下的寿命。
01
获取SSD已擦写基础信息
smartctl 是一个用于检查和管理硬盘健康状况的命令行工具,可以帮助用户检测硬盘的潜在问题并预防数据丢失。
在系统上执行查询命令:smartctl -a /dev/sda1
说明:设备分区信息如/dev/sda1,可通过命令fdisk -l获取
02
转换已擦写基础信息为已擦写次数
读取上图中“ID”为173,列为“RAW_VALUE”的属性值即20185449,并将其转换为16进制即0000 0134 0169(hex),0134为Erase Count的16进制,再转换为10进制是308,308就是存储卡已经擦写的次数,假设此存储卡支持的完整擦写次数为3000,那么此存储卡已经消耗的寿命为308/3000≈10.3%
我们在测试周期内不断监控擦写次数的跳变,然后根据擦写次数的增量,就能得出1次擦写所支持的周期。影响此结果的就是数据写入速率,业务模型是决定写入速率的关键。
业务模型选取
选择正确的业务模型对于存储卡寿命测试尤为重要,即应选择对存储卡寿命消耗最快的业务组合。一般原则为:开启产品的所有涉及IO写入的业务功能、使运行周期内数据写入量最大、运行周期尽可能长、模拟生产环境情况(如周期性上下电),而实际的情况可能存在某几个业务有一个总写入规格(如每日总告警为N条),会导致不同的业务组合,写入速率差异很大,这就要逐一测试此类模块的IO数据来选出写入速率最大的模块。通常情况下,实际生产环境中数据写入速率小于我们测试的模型值。
例如威努特某产品存储卡寿命测试选择的业务模型如下:
持续抓包N Mbit/秒、N条白名单告警/天、N条入侵检测告警/天、N条会话循环等,每天执行一次下电-上电(通过某产品的托管电源模块触发),触发擦除(如日志已达到存储周期阈值30天,后续每后移1天,则删除最早1天的数据)。
在以上模型下,查看IO写入速率(每隔30秒统计1次,统计时长为2880秒)
命令: ./pidstat -d -x 30 2880
对IO监控在产品测试还有以下意义:
有助于发现IO写入速率不合理的模块,督促产品及时进行设计优化。
增加任何新功能模块时,可通过对比原来IO数据来快速评估数据写入速率增量是否合理和是否存在风险。
测试过程及结果
按选取的业务模型配置产品相应业务,持续运行产品,并监控存储卡擦写次数的跳变。
SSD寿命计算过程: 以下图为例,按选定的业务模型持续进行数据写入,记录从2023-02-11 01:21:19至2023-02-13 10:22:33(周期约为57小时) 累计擦写次数为3,按此推算擦写次数3000可以支持的理论年数为:
3000 / 3 * 57 / 24 / 365 ≈ 6.5年
其他说明:
以上计算的是存储卡完整理论寿命,即一张存储卡擦写次数从0到3000次耗尽所能支撑的周期,如果要看存储卡的剩余寿命,需将完整擦写次数改为剩余擦写次数(即3000减掉已擦写次数)再计算。
部分不合格的存储卡可能达不到标注的擦写次数,可以通过快速对存储卡写入(脱离业务)验证擦写次数是否达标。
Part.5
存储卡寿命测试总结
本文深入剖析了存储卡寿命测试的关键要素、实践路径及重要意义。在工业控制等关键领域,产品需在既定寿命周期内稳定运行,而存储卡作为易损耗部件,其寿命直接关系到产品的整体表现,一旦存储卡出现故障可能导致灾难性后果。
在存储卡寿命测试的实践中,需要精准选取业务模型、紧密贴合生产环境、密切监测擦写次数等,充分暴露潜在问题,为产品优化提供有力依据。借助智能工具,可高效获取并转化数据,进而精准算出存储卡的理论寿命。
综合来看,存储卡寿命测试不仅是对产品质量的加固,更是提升产品在复杂生产环境中持续稳定运行能力的关键举措。通过严谨的测试流程,我们得以提前洞察存储卡的潜在风险,及时采取优化措施,延长产品使用寿命,降低运维成本,增强市场竞争力。在未来产品研发与质量管控中,应持续强化存储卡寿命测试环节,以更精湛的技术、更严谨的态度,确保每一款产品都能历经时间考验,为用户带来持久稳定的服务体验。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...