ThreadX LevelX简介以及对均衡磨损的理解

ThreadX LevelX简介以及对均衡磨损思想的理解

ThreadX LevelX简介

 Azure RTOS(ThreadX) LevelX为嵌入式应用提供了NAND和NOR闪存磨损均衡操作方式。由于 NAND 和 NOR 闪存只能被擦除有限的次数,因此均匀地分配闪存的使用至关重要。这通常被称为 “均衡磨损”,也是LevelX存在的目的。

 选择要重用哪个闪存块的算法主要是基于擦除次数但也并不完全是。如果有另一个块的擦除次数在最小擦除次数的可接受范围内,并且有更多的过时映射,那么擦除次数最低的块可能不会被选择。在这种情况下,过时映射数量最多的块将被擦除并重用,从而节省移动有效映射项的开销。

  LevelX支持NAND和NOR部分的多个实例,即应用程序可以在同一应用程序中利用LevelX的不同实例。每个实例都需要应用程序提供的自己的控制块以及自己的闪存驱动程序。 LevelX向用户展示了一个逻辑扇区的阵列,这些扇区被映射到LevelX内部的物理闪存中。

 为了提高性能,LevelX还提供了一个最新(最近使用)的逻辑扇区映射的缓存。该缓存的大小由用户定义。应用程序可以结合FileX使用LevelX,也可以直接读/写逻辑扇区。LevelX对FileX没有依赖性,对ThreadX的依赖性也很小(只使用ThreadX最基本的数据类型)。

  LevelX是为容错而设计的。闪存更新是在一个多步骤的过程中进行的,在每个步骤中都可能被中断,LevelX会在下一次操作中自动恢复到最佳状态。

 LevelX需要一个闪存驱动器来对底层闪存进行物理访问。

均衡磨损由来与实现思路

 均衡磨损需求主要是因为无论是NAND FLASH还是NorFlash每个最小擦除单元都有一个擦除次数范围的限制,擦除次数超过范围就会变成坏块,存储数据就会损坏或写入失败。而如果没有一个合理的调度机指,使得用户层代码能够对每个擦除单元进行雨露均沾,那么某些擦除单元会过早的进入寿命结束期。
 当然,对FLASH设备的均衡磨损操作已经融入到了几乎所有的存储设备中,电脑中的硬盘、手机中的存储,等等底层都有均衡磨损操作。这些在网络上搜索一大堆的介绍,我也就随笔写一下个人理解。

 均衡磨损目前主要是在用户代码或者说上层代码与底层驱动代码之间建立一个虚拟最小读写单元映射来的一个中间层代码。LevelX中对NorFlash的最小映射单元大小为512字节即128字。中间层代码为每个物理映射单元都分配一个虚拟映射单元。

  如LevelX的每128字就是一个Sector,用户代码在操作某个扇区的时候,只需操作自己的一个虚拟扇区号即可,最终实际操作哪个物理扇区由中间层代码通过虚拟扇区找到对应物理扇区,然后调用实际的底层驱动完成读、写、擦操作。既然用户只用关心操作的虚拟扇区号,那么就可以使NorFlash在供用户代码调用的基础上完成一些均衡分配操作。

 正如LevelX介绍中所说,主要是通过找到被擦除最小的物理单元,分配它进行最新的写入操作,来实现雨露均沾。当然也有的是用过对物理块的使用达到一个足够的随机,也能完成不同块的雨露均沾操作,就比如ARMmbed的LittleFS文件系统,就是采用一个CRC哈希函数来实现对未分配的空闲进行足够的随机分配。(PS: LittleFS文件除了读写速度尤其是写入速度不尽如人意,对掉电保护、均衡磨损等是相当的强,这点对嵌入式设备来说非常有必要 ESP-32中就提供了对它的flash进行了均衡磨损的api)。

 找到擦除次数最小的擦除单元(块),有很多中方法,比如采用由上到下的按照物理地址顺序分配,完全按照排序算法找到最小映射如采用堆排序链表插入排序等等方法都可以实现类似操作。

 三星的一些硬盘中就有些是采用类似操作,驱动器中集成了SDRAM或MRAM(数据掉电不丢失),完成对排序索引存储,实现找到最小块的操作。外置MRAM进行存储+映射查找计算,大大提高了映射的速度、减少了元数据写入Flash的过程,对于小文件来说确实提高了很多速度。

 这里提一下,仅仅是在未分配的空间中找到最小的擦除块进行剩下的分配,这还不足够均匀,对于那些不经常做修改的大文件,会占用很多空间,但是由于没有重新分配,导致它占用的扇区被擦除的次数很少,而别的空间都快被磨损的差不多了。这时候还需要把这些文件搬移到那些擦除次数较多的空间中,这点就比如电脑硬盘或优盘,在剩余空间不足时频繁触发碎片整理(对Flash来说严格来说不是碎片整理,更多的时数据搬移)。也增加了整体的擦除次数。所以在磁盘空间不足时,磁盘寿命会下降的非常快,而且因为频繁的数据搬移导致软件运行起来或者数据读写有些卡顿的感觉。所以很多硬盘的驱动程序都会要求保留一部分的空间作为Over Provisioning 区,就是方便数据搬移和均衡磨损。

后面介绍LevelX的存储数据格式以及open流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值