关于 Flash 存储,你应该知道的一些事情
来源:互联网 发布:男装比较好的淘宝店铺 编辑:程序博客网 时间:2024/05/01 10:01
Flash 存储问题总是在我们技术支持渠道位列榜首。Toradex 投入了大量资源保证存储尽可能的稳定。然而,了解一些关于存储的基本知识还是十分重要的。首先你需要知道存储是否磨损,当往内置的存储设备上写入大量数据后,你就很容易损坏它。通过这篇博文,我们想要告诉你 Flash 存储可能会遇到的一些问题。我们先简单介绍技术内容。
目前,Toradex 计算机模块采用 NOR、NAND 和 eMMC Flash。
NOR 和 NAND 是 raw 存储设备。NAND 和 NOR 之间的主要差别是 NOR 允许随机寻址,不需要纠错以及较高的每比特成本。NAND 则只能页读取,每页中的一些位可能出错,因此需要纠错机制。
eMMC Flash 则结合使用 NAND 和一个内置控制器,后者处理大部分使用 NAND flash 时候,本来需要你自己完成的一些列任务。eMMC 也称为 managed NAND。在另一方面,NAND 和 NOR 需要有 OS 和驱动来完成对应的处理。我们稍后会在本博文中讨论这两种不同的挑战。
下面是我们的计算机模块所使用的 Flash 类型概览;
Toradex Computer Module
NORColibri PXA270NANDColibri PXA310, PXA320, VF50, VF61, iMX7, T20EMMCColibri iMX6 and T30, Apalis iMX6 and T30
NAND 上面的 bit 密度随着时间在不停增长。最早的 NAND 设备是 Single Level Cell (SLC) flash。这意味着每个闪存单元存储一个bit位信息。借助 Multi Level Cell (MLC),每个闪存单元可以存储两个或者多个bit位,bit 密度也随之提升。MLC 听起来很不错,但是也有缺点:MLC NAND 也带来更高的bit 错误率以及更低的寿命。所有的 eMMC 都使用 MLC NAND。有些 eMMC 设备可以在部分或者全部存储区域上使用 pseudo-SLC (PSLC)。这将会减少存储容量,但是提高设备上使用寿命。
这是 SLC 和 MLC 的简单对比。
per 512 Bytes, chip dependent8 bit12 bitCost per ByteHigherLower
正如上面提到的,关于我们设备上使用的 flash 技术,您需要知道很重要的一点是,您只能有限次地擦写存储设备。往 flash 存储上写入大量的数据,并不是一个好的主意。上面的表格所示,根据所使用的 flash 类型不同,直到数据可能出现损坏或者丢失前,您可以进行 10K 到 100K 次写操作。“擦写周期” 这一个令人烦恼的事情。Flash 存储的一个限制是,在被擦除之前是无法进行写操作的。而且,不能通过位擦差来完成,而是需要更大的单位,称为块。最糟糕的情况是,如果你只想改变一个字节,但是可能需要擦除整个块。一个块最大可以使 512KB。这种比你想象的要大的多的擦/写比现象称为写放大。并且可能还有 flash 文件系统所需的额外写操作。如果你想要评估你嵌入式设备上的存储的寿命,你应该把这个也考虑进来。
下面的内容向你介绍如何提高 NAND 或者 eMMC 的寿命。不要担心,这些工作都已经由 Toradex 完成,你不需采取任何工作。
我们假设你已经了解 flash 只能被有限次地擦写,并且你只是偶尔小批量地更新数据。如果这些数据总是写在同一个 flash 单元,那么你只能在 MLC flash 上写 15K 次。如果永远不使用其他 flash 单元,你的数据将会丢失,一直在写的存储单元磨损后,flash 也就随着报废。智能的 flash 驱动会采用磨损平衡。这个技术确保所有的 flash 单元被平均磨损,而不是总是使用同一个单元。
在 NAND flash 设备有可能发生一个位的数据发生翻转,你的数据因此损坏。磨损或者其他干扰都有可能引起这个现象。因此,数据需要被纠错码(ECC)保护。根据 Flash 控制器和 NAND / eMMC 的不同,部分错误数据可以被检测和纠正。
ECC 使我们能够发现错误的块,我们就可以停止使用这些坏块。根据 ECC 以及纠正的位数,可以设定容错上限,这个范围之内不需要采取进一步行动。一旦达到这个上限,数据被纠正,并转移到正常的块上面。 之前的位置表记为坏块。这些坏块不再被使用,因为它们可能已经损坏。
当你的设备在往 flash 写数据的时候突然掉电,这将会发生什么?在嵌入式设备上,你希望设备仍旧可以正常启动,并且数据不受到损坏。为了达到这个目的,所有相关的软件和硬件都需要有能力应对这种情况。你将会在下面的内容中了解我们是如何做到的。
正如上面提到的,关键是根据存储的类型采用正确配置。我们会分析目前 Toradex BSP 上所使用的技术。
下图展示了在 NAND 设备上行 WinCE 和 Linux 的配置
存储设备:我们的设备只要使用 NAND,那么都用的是 SLC NAND。
硬件驱动:硬件驱动为 NAND 设备和上层系统提供接口。上层系统也负责错误检测和纠正。在 Linux 上我们目前的镜像使用 MTD。WinCE 上我们使用 Microsoft Flash PDD 层。也有例外,如 Colibri T20,我们使用了专门的 PDD 层。
Flash 传输层:该层负责写平衡和坏块管理。在 Linux 中由 UBI 子系统完成;而 WinCE 则由 MDD 层完成。同样在 Colibri T20 上我们使用了专门的层,而不是 Microsoft Flash MDD。
文件系统:文件系统是实际管理分区以及所存文件的部分。用户通过文件 API 来是用文件系统(Linux 中通过 VFS 层)。在Linux 上,目前我们使用 UBI FS。WinCE 使用 Transaction Save exFAT (TexFAT) 。两者都可以应对掉电。基本的文件层通过支持原子操作来应对掉电发生。
下图展示了在 eMMC 设备上行 WinCE 和 Linux 的配置
存储设备:相对于 raw NAND,绝大多数的工作由 eMMC 本身完成。上层软件不需要处理写平衡、纠错和坏块管理。
硬件驱动:这是 MMC 控制器和文件系统之间的接口.
文件系统:和 NAND 设备一样,WinCE 上仍旧使用 TexFAT;我们的 Linux 镜像使用 ext3 文件系统。同样也是能够应对掉电情况。
Toradex 尽自己最大的努力提供可靠和持久的 flash 存储。然而,在开发的过程中,你还是需要始终关注 flash 的使用。
- 减少 flash 访问次数
- 了解你最终产品的写操作行为
- 检查在写操作的情况下,你产品使用寿命是否能够达到要求
- 进行压力测试和持久测试
- 避免使用 Flash 全部容量,这可以极大地提高写平衡算法的效率
如果您需要更多的信息,或者可以改善我们的配置,欢迎和我们的工程师取得联系。
- 关于 Flash 存储,你应该知道的一些事情
- 你应该知道的一些事情——CSS权重
- 你应该知道的一些事情——CSS权重
- 你应该知道的一些事情——CSS权重
- 你应该知道的一些事情——CSS权重
- 你应该知道的一些事情——CSS权重
- 关于 Git 你需要知道的一些事情
- [译] 关于 Git 你需要知道的一些事情
- [译] 关于 Git 你需要知道的一些事情
- [译] 关于 Git 你需要知道的一些事情
- 关于 Git 你需要知道的一些事情
- 关于 Git 你需要知道的一些事情
- 女孩应该偷偷的知道一些事情
- PHP 一些应该知道的事情
- 使用ClickOnce发布你的软件前,应该知道的一些事情(一些常见问题解决方法)
- 关于分布式存储,这是你应该知道的
- 在决定使用CLICKONCE发布你的软件前,应该知道的一些事情
- 在决定使用CLICKONCE发布你的软件前,应该知道的一些事情
- SOA概念
- java
- Hive(二)--架构和组件
- 建外部表查看报警日志错误
- Dapper的扩展这个你知道嘛?
- 关于 Flash 存储,你应该知道的一些事情
- 缓存框架 Ehcache Memcache Redis
- MFC- 使用问题集
- C++开源库
- JavaScript 原型的概念及使用
- CentOS6.5安装最新版 firefox
- iOS之SDWEBIMAGE的使用
- Meteor Live Template 定义几个快捷键
- 现代c++之线程本地存储thread_local