背景
简介
-
File Based Optimizations,简称FBO,大概翻译为"基于文件的优化"。
-
7月份的时候,看到小米公司发出的宣传文章,一种自研的"FBO焕新存储技术",并且加入了UFS规范。
-
看小米公司相关文章的介绍,这个技术主要应用在那些使用较久的设备上,让存储设备的读取性能恢复到类似于全新手机的性能。
-
8月份JEDEC正式发布这个名为"File Based Optimizations"的扩展特性。本文主要是介绍这个FBO标准的内容。
卡顿的原因
- 设备使用长时间后,用户会明显感觉到卡顿的性能下降导致。比如我几年前买的某国产手机,使用一年后,软件的响应速度奇慢无比,所以我每隔1个月就恢复出厂设置一次,后来确实受不了就换了手机。
- 导致这个问题的原因有很多,和存储器件关系比较大。比如长时间使用,存储器件容量剩余空间不多了,各种app的频繁写入,导致存储器件中存储介质碎片化严重,每次写入新数据需要触发数据搬移,从而导致写入性能下降。此外,还可能导致存储器件中数据物理存放的关联性下降,表现为一段连续的逻辑区间,却分布在NAND Flash不同的位置上,使得读取时无法利用最优的并发效果,导致读性能下降,FBO针对的是这种情况。
FBO实现
原理
- 主要实现方式是上位机通过解析文件系统,把关键的的文件的逻辑区间(比如影响系统性能的只读文件)告知存储器件,存储器件去分析这个逻辑区间的存储结构,并且通过调整存储结构为较优的方式,从而提高读性能,从而达到“焕新”的效果。
流程介绍
- 上位机发送分析请求和优化请求,针对的是逻辑区间
- 存储器件对指定的逻辑区间进行分析,看数据的分布对性能影响有多少,通过“Regression Level”告知上位机情况。
- 上位机根据自身需要,设定优化等级,让存储器件对低于阈值的逻辑区间进行优化。
Regression Level
- 协议定义了"Regression Level",用于描述分析性能下降的程度。
- 这个值的设定方法根据存储器件固件自行去判定。
- 这个值分为11个等级,定义如下
• 0x00 –no Regression
• 0x01 – 1%-10% Regression Level
• 0x02 – 11%-20% Regression Level
• …
• 0x0A – 91%-100% Regression Level
• Other values: reserved
优化实现方式
- 根据不同的固件实现方式有关系,比如把相关逻辑数据搬移可以并发的位置,具体看存储器件的实现。
后话
- 本质还是主要通过存储固件对数据进行搬移,达到读性能提升。所以会造成存储介质NAND Flash的磨损。
- 不过问题不大,毕竟不需要频繁触发,且触发优化的逻辑区间需要合理。
- 整理后,由于数据存储的逻辑相关性更好了,所以对后续的使用可能也更好了。
- 上位机和存储器件的交互很重要,比存储器件固件自行识别处理效率高多了,后续大有所为。