Tune Flash各个参数是个技术活, 既要有普适性,有时又需要满足一些特定甚至极端的需求,而各种参数之间还会互相影响:比如满足了BER的需求,可能会导致tProg和tErase过长。
Flash出厂时,因为要卖给多个客户(多种应用场景),Flash厂商不会针对某个应用场景特意做优化(做到100分),反过来他们的做法是提供一组参数,能够较好的适应大多数场景(比如80分)。
成立于2013年的NVMdurance的卖点就是,你不知道买来的Flash怎么调才能最好的适用你的场景,我用我的软件帮你找到最优的参数组合。据说可以把Endurance提高3~10倍。
NVMdurance有两把刷子:
左侧的NVMdurance Pathfinder:
- 离线版本,有自己的参数组数据库
- 根据客户需求(例如PE cycle, retention等),在数据里找到最适合的参数组合
- 可以找一组,也可以找多组适用于Flash不同的生命周期(例如PE cycle 5000~2000 作为第一阶段, 2000~500作为第二阶段,500以下作为第三阶段 )
右侧的NVMdurance Navigator:
- 连接一个实体的模组到SSD主控,跑他们的程序
- 以Pathfinder提供的参数组合为基础,根据SSD的实时状态(RBER/threshold/timing)动态调整
按照官方说法,两者配合服用效果最佳,但也可以单独使用。(感觉有点像地图软件的路线查询离线导航和导航过程中根据实时路况动态调整路线有木有。)
根据NVMdurance的描述,我理解下来他是下面这样玩的:
不断的测试各种参数组合并记录结果到数据库;(Navigator)
通过机器学习分析各种参数设置组合对结果的影响;(Pathfinder)
根据场景要求,计算并推荐出几套较优的组合;(Pathfinder)
在真实环境(SSD)验证这些组合(Navigator)
以上四个步骤循环往复。
Pathfinder的数据流模型如下:
可以看到右下角高亮的数量级,200个8bit的Flash相关的寄存器,会带来巨量的参数组合。但可是:
反正是用软件模拟硬件,可以用大量廉价的硬件环境并行计算;
巨量的模拟结果是喂饱AI的最好食物,数据量越大,计算出来的参数组合就越接近真实的最佳组合;
反正后面还可以用真实的硬件进行验证;
Flash磨损原理
让电子进出浮栅(Floating Gate)需要提供一个高电压
随着写入、擦除的次数增多,用来困住电子防止跑进、跑出的氧化层(Tunnel Oxide)中陷落的电子数量也会增加,为了拔掉这些电子所需要的擦除周期也就越久
氧化层积累的电子越来越多,最终会导致擦除动作难以将浮栅(Floating Gate)恢复为没有电子的状态,这个存储单元也就寿终正寝了。
针对这个问题,NVMdurance可以将Flash的生命周期划分为5个阶段,每个阶段施加不同的,刚刚够用的电压,随着PE cycle的增加,逐渐提高施加的电压而不是像Flash厂商那样永远施加一样的电压。从而延缓氧化层磨损,达到延长寿命的效果。见下图:
想想IBM的沃森是怎么在医疗,法律行业为人民服务的,NVMdurance在2016年上半年拿到2500万美刀(美帝的VC好小气)的融资,不奇怪。