Nor Flash的理论性能
简介
为了评估Nor性能优化空间,我需要根据Spec计算出极限情况下,Nor Flash的性能理论值。
在全志的R**相关项目中分别支持ESMT、MXIC、Winbond、GD这4个厂家的Nor Flash,具体型号不方便透露,其规格书参数如下:
| 厂家 | 写(ms) | 4K擦除(ms) | 32K擦除(ms) | 64K擦除(ms) | 全盘擦除(s) |
|---|---|---|---|---|---|
| MXIC | 0.33~1.2 | 25~120 | 140~650 | 250~650 | 26~60 |
| Winbond | 0.7~3 | 45~400 | 120~1600 | 150~2000 | 40~200 |
| GD | 0.5~2.4 | 50~400 | 160~800 | 300~1200 | 50~120 |
| ESMT | 0.5~3 | 40~300 | 200~1000 | 300~2000 | 60~200 |
上表是Spec中记录的典型时间到最大时间。
Flash有写前必须擦除的特性,为了简化计算,我们忽略除了擦除、写外的损耗,例如WREN:Write Enable等,例如传输损耗。由此计算出的性能会比实际性能略高,但也足以让我们对其性能有个直观认识。
我以性能较高的MXIC的Nor Flash为例,计算理论性能
理论性能
关键词说明如下:
EraseTime: 擦除(erase)时间
EraseSize: 擦除的大小
WriteTime: 写(write)时间
WriteCount: 一次擦除可以写多少笔数据
BlockSize: 块大小
Flash的特性要求必须先擦除后写,Nand如此,Nor也如此。
在spiffs的代码中,我们可以看到对nor的一个特殊应用:某些标志bit不擦除,直接写。是的,Nor也支持不擦除直接写,但只支持1->0的编程,因此spiffs中只用作某个1->0的标志bit也是可以的。但对大多数情况,为了不丢失数据,我们务必擦除后再写。
综合上擦除和写的时间:
Time(ms) = EraseTime + WriteTime * WriteCount
在Nor中,我们假设每次写256B的数据(1Page),那么1次4K擦除可以写16笔数据,1次32K擦除可以写128笔数据,1次64K擦除可以写256笔数据。
因此,理论性能应该为:
Speed = EraseSize / (EraseTime + WriteTime * WriteCount)
以MXIC的4K大小擦除块为例:
性能 = 4KB / (25ms + 0.33ms * (4KB / 256B)) = 4 KB / 30.28ms = 132.1 KB/s
类似的,根据上述的计算方法,我们统计的各厂家理论性能如下(KB/s):
| 厂家 | 4K擦除 | 32K擦除 | 64K擦除 |
|---|---|---|---|
| MXIC | 132.10 | 176.23 | 191.34 |
| Winbond | 71.17 | 153.70 | 194.41 |
| GD | 68.97 | 142.86 | 149.53 |
| ESMT | 83.33 | 121.67 | 149.53 |
务必注意的是,上述理论性能是按Spec的Typ时间计算的,实际使用中,擦除和写的耗时随着使用寿命的增加而增加。而对于一块全新Flash来说,其写和擦除的耗时应该会比Spec的Typ时间要少。因此也就不奇怪我实测的性能会比Spec的理论性能要略高:
| 厂家 | 4K擦除 |
|---|---|
| MXIC | 140 |
| Winbond | 117 |
| GD | 88 |
| ESMT | 101 |
上述测试的性能,是不经过FS的裸设备操作性能,且驱动中完全无buffer,文件系统/驱动的缓存对性能还是有比较大影响的。此外除了硬件损耗之外,驱动软件在检查Busy标志的延时精度也会造成一些损耗。
Nor Flash的理论性能的更多相关文章
- 国产CPU 申威1621 异数OS基础组件理论性能测试报告
国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性 ...
- [转]优化Flash性能
原文:http://www.adobe.com/devnet/flash/articles/optimizing-flash-performance.html 翻译:http://bbs.9ria.c ...
- SDF:Software-Defined Flash for Web-Scale Internet Storage System
一.参考 http://www.csdn.net/article/a/2013-12-18/309280 http://gtstorageworld.blog.51cto.com/908359/126 ...
- 机械硬盘与SSD固态硬盘性能的深度
从7200转硬盘升级到10000转的迅猛龙,那叫量变.从10000转的迅猛龙升级到SSD,这个叫质变.2者的差距是有些地方相当大,而有些却很接近,主要是难比较. 经常听到有人说:我买2个黑盘组RAID ...
- 『高性能模型』Roofline Model与深度学习模型的性能分析
转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...
- Roofline Model与深度学习模型的性能分析
原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...
- Flash平台的分析与RIA的趋势
10月3号,Flash Player 11 和 AIR 3.0正式提供下载,一片安静.最近这两年来,关于Flash的新闻一向是以负面为主,先是 Silverlight 的挑战,然后是 iphone和i ...
- nand flash详解及驱动编写
https://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_ ...
- 如何编写linux下nand flash驱动-4
2. 软件方面 如果想要在Linux下编写Nand Flash驱动,那么就先要搞清楚Linux下,关于此部分的整个框架.弄明白,系统是如何管理你的nand flash的,以及,系统都帮你做 ...
随机推荐
- C# 如何添加自定义键盘处理事件 如何配置app.config ? | csharp key press event tutorial and app.config
本文首发于个人博客https://kezunlin.me/post/9f24ebb5/,欢迎阅读最新内容! csharp key press event tutorial and app.config ...
- Java设计模式:Builder(构建器)模式
概念定义 Builder模式是一步一步创建一个复杂对象的创建型模式.该模式将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来. 应用场景 对象创建过程比较复杂,或对创建顺序或组合有依 ...
- JavaScript判断对象和数组
在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json ...
- 黄聪:wordpress调试过程只显示500错误,不显示错误内容
在functions.php文件添加如下代码: add_filter('wp_die_handler', 'get_my_custom_die_handler'); function get_my_c ...
- idea设置类注释和方法注释
类注释 1.file-->setting-->editor-->file and code templates-->includes--> file header 2.在 ...
- 玩下PHP的分词,最近有这个需求
找了个地方 下载代码 我是在这里下载的 https://www.jb51.net/codes/65593.html 1 下载完毕后 打开是这样的文件 2 先把代码集成到thinkphp3.2.3里 ...
- JavaScript之找LHS查询和RHS查询
LHS和RHS,当变量出现在赋值操作的左侧时进行LHS 查询,出现在右侧时进行RHS 查询. LHS 查询是试图找到变量的容器本身,从而可以对其赋值. RHS 理解成retrieve his sour ...
- QNetworkRequest加Authorization头,适应Rest风格的API
Rest是无状态的.Rest的请求之间不应该有依赖,在调用一个请求前,不需要一定要去提前调用另外一个请求.Rest里面不应该有 session,特别是Rest请求不应该保存信息在sesssion里,以 ...
- iOS 多线程知识梳理
#iOS多线程知识梳理 ##线程进程基础概念 ###进程 进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 ###线程 1个进程要想执行任务,必须 ...
- Linux 内存文件系统-ramfs and tmpfs
Linux内存文件系统:可满足高IO的要求 ramdisk: 基于虚拟在内存中的其他文件系统(ex2fs). 挂载方式:mount /dev/ram /mnt/ramdisk ramfs: 物理内存文 ...