简介

为了评估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的理论性能的更多相关文章

  1. 国产CPU 申威1621 异数OS基础组件理论性能测试报告

    国产CPU 申威1621 异数OS基础组件理论性能测试报告 文章目录 国产CPU 申威1621 异数OS基础组件理论性能测试报告 前言 测试平台 测试项目 SW1621 异数OS 容器虚拟交换机模拟性 ...

  2. [转]优化Flash性能

    原文:http://www.adobe.com/devnet/flash/articles/optimizing-flash-performance.html 翻译:http://bbs.9ria.c ...

  3. 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 ...

  4. 机械硬盘与SSD固态硬盘性能的深度

    从7200转硬盘升级到10000转的迅猛龙,那叫量变.从10000转的迅猛龙升级到SSD,这个叫质变.2者的差距是有些地方相当大,而有些却很接近,主要是难比较. 经常听到有人说:我买2个黑盘组RAID ...

  5. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  6. Roofline Model与深度学习模型的性能分析

    原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...

  7. Flash平台的分析与RIA的趋势

    10月3号,Flash Player 11 和 AIR 3.0正式提供下载,一片安静.最近这两年来,关于Flash的新闻一向是以负面为主,先是 Silverlight 的挑战,然后是 iphone和i ...

  8. nand flash详解及驱动编写

    https://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_ ...

  9. 如何编写linux下nand flash驱动-4

    2.       软件方面 如果想要在Linux下编写Nand Flash驱动,那么就先要搞清楚Linux下,关于此部分的整个框架.弄明白,系统是如何管理你的nand flash的,以及,系统都帮你做 ...

随机推荐

  1. cd 到目录自动ls

    $vim ~/.bashrc 文件末尾加入: cdls() { cd "${1}" ls; } alias cd='cdls' $source ~/.bashrc

  2. 任意视频批量转码MP4-H264助手

    使用说明 简单的粗暴的小工具,利用windows命令行调用ffmpeg完成任意格式视频转换成H264编码的MP4视频,以确保视频可以在主流浏览器中直接播放,如:Chrome.Firefox等. 只需要 ...

  3. Struts2框架和SpringMvc框架的区别

    Struts2框架和SpringMvc框架的区别 一.拦截机制的不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域 ...

  4. 12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统

    本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享. 1.引言 Go ...

  5. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

  6. 【文本处理命令】之find搜索命令

    一.find搜索命令 find命令用于按照指定条件查找文件.在系统工作中find命令是不可缺少的,我们一般要查找某个目录下的文件时,都是使用find命令查找,另外find命令也可以配合对查找出的文件进 ...

  7. Python之基本运算符

    基本运算符 1.算符运算符 运算符 描述 例子 + 两个对象相加 a+b - 两个对象相减 a-b * 两个数相乘或返回一个被重复若干次的字符串 a*b / 两个数相除 a/b % 取模,返回除法的余 ...

  8. solidity 智能合约之间的调用

    智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用.本篇文章带大家通过具体示例来了解一下智能合约之间的调用. 在智能合约的编译过程中,有两种情况:调用 ...

  9. java高并发系列 - 第5天:深入理解进程和线程

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.程序是指令.数据及其组织形式的描述,进程是程序的实体. 进程具有的 ...

  10. C# download big file

    I had validated this.To download SSMS which is more than 500M+ static void Main(string[] args) { str ...