请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3281|回复: 17
收起左侧

[RL-FlashFS] 基于SPI Flash的FlashFS批量创建文件和写数据测试以及相关问题

[复制链接]

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
发表于 2015-9-15 15:16:11 | 显示全部楼层 |阅读模式
1. 每次创建10个CSV文件,分别写入32字节数据。速度测试如下:
    (创建前挂载,10个文件都写完后卸载)
================================================
经过测试发现,随着数据大批量的写入,首次创建文件和后面创建的9个文件需要的时间越来越长
1.png



多次创建后发现速度剧增。
2.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 15:22:02 | 显示全部楼层
只挂载一次,后面不再重复挂载和卸载,发现首次创建的时间基本跟后面9次一致了,但是随着不断的写入,
打开时间还是不断增加。估计FlashFS每次创建新文件都有一个查询的过程,随着文件数的大量增加,查询时间也长了。
3.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 17:01:15 | 显示全部楼层
fout = fopen ("re.csv",   "a");   append方式坚决不可以用在SPI Flash上面,这样会造成写入耗时越来越长。
1.png


写到400次的时候,速度已经没法看了。
1.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 17:27:40 | 显示全部楼层
对同一个文件进行重复重写fout = fopen ("re.csv", "w"); 测试了1000次,速度较稳定,每次写1024字节。
打开速度还算稳定。没有进行重复的加载和卸载。
1.png


测试进行了重复的加载和卸载,跟上面的速度基本一样。
2.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 18:04:01 | 显示全部楼层
创建1000个文件,每次写64字节数据,测试结果如下,创建新文件的时间慢慢增加。
1.png

2.png

================================
重新写这1000个文件。
3.png

4.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 19:00:49 | 显示全部楼层
创建到4000个文件时,速度已经无法容忍了,每次64字节。
1.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 23:50:31 | 显示全部楼层
依次创建1000个文件,每次写数据1024字节,然后循环重写9次,一共是执行了10000次。
测试10000次.png
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-15 23:59:17 | 显示全部楼层
测试总结:
1. 使用的时候切记不可以使用fopen (xxxxx, "w")模式,这样会造成文件的访问速度极其慢。
2. 创建的文件不要太多,最好不要超过1000个文件。文件越多访问速度也越慢。
3. 实际测试按照一页的倍数(256字节)进行写操作最好,这样基本没有文件碎片。
4. 不管创建的是多少文件,如果采用的是重复写已经创建的文件,打开文件的速度会一点点增加,
    最终趋于一个最大值,后基本不会再增加,而是变成小值后继续增加,如此循环,实际测试是这样的。
5. 挂载系统后,首次创建或者打开文件比较的耗时间,这点要注意。
6. 真正耗时间的不是读写文件耗时间,而是创建或者打开文件比较的耗时间。
=============================================================
a. 这么来说的话,实际使用SPI Flash的FlashFS时最好采用创建多个文件来做数据管理,但是创建
    的文件数最好不要太多,要不会造成访问速度极其慢。
b. 可以考虑删除文件然后重新创建文件进行数据记录,这样速度要快些。
    另外就是在文件打开的情况下,进行数据读写操作,记录了多条数据后再进行关闭文件,要不重新打开
   文件比较耗时间。只有关闭了文件,写的数据才会记录到SPI Flash里面。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-9-17 09:12:58 | 显示全部楼层
实际测试还有一种非常实用的方法,而且很适合基于SPI Flash的FlashFS,可以挂载了文件系统以后,创建文件,创建后不要再关闭这个文件,然后使用
fwrite等函数写数据,写一次数据调用一次fflush即可。这样就不需要重复打开和关闭文件了,而且也不怕掉电问题。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

3

主题

382

帖子

388

积分

版主

Rank: 7Rank: 7Rank: 7

积分
388
发表于 2015-9-17 14:27:36 | 显示全部楼层
finit初始化文件系统时,会有检索整个文件系统fat和fsinfo的过程,导致运行巨慢。。。

估计打开文件时也有这种问题,你可以跟踪到反汇编里面,看看到底是哪个代码段耗费了这么多时间

我就是这样发现finit的问题的
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

积分
0
发表于 2015-10-23 09:14:58 | 显示全部楼层
我在使用中还发现,随着文件的不断变大,搜索文件函数ffind时间也越来越长。
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2015-10-23 09:24:24 | 显示全部楼层

回 zhou_jinbao 的帖子

zhou_jinbao:我在使用中还发现,随着文件的不断变大,搜索文件函数ffind时间也越来越长。 (2015-10-23 09:14) 
这个应该是他内部机制决定的,我现在的办法就是打开一个文件后不要关闭,通过函数
fwrite后,再fflush同步一下,这样数据就写入到SPI Flash,速度也很稳定了。

创建文件太多比较影响速度。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

积分
0
发表于 2017-7-18 18:54:10 | 显示全部楼层
我手上做的一个项目想要使用FLASHFS,问题是写入的数据量一大,文件系统就会莫名其妙的损坏,掉电后再上电,fcheck通不过,必须要重新格式化才行,百思不得解啊!!
我用的单片机是LPC1343,  FLASH是W25X32;
高手可知道是啥原因?
ps: 不用FLASHFS, 直接操作FLASH 没有问题.
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2017-7-19 01:38:00 | 显示全部楼层

回 stillman 的帖子

stillman:我手上做的一个项目想要使用FLASHFS,问题是写入的数据量一大,文件系统就会莫名其妙的损坏,掉电后再上电,fcheck通不过,必须要重新格式化才行,百思不得解啊!!
我用的单片机是LPC1343,  FLASH是W25X32;
高手可知道是啥原因?
ps: 不用FLASHFS, 直接操作FLASH 没有 .. (2017-07-18 18:54)
损坏倒是没有遇到过,主要是这个帖子里面说的速度慢的问题。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

0

主题

2

帖子

10

积分

新手上路

积分
10
发表于 2018-9-6 17:06:25 | 显示全部楼层
请问,如果需要对同一个文件重复写入数据,不采用fopen (xxxxx, “a”)  模式,可以怎么处理呢?
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2018-9-7 01:11:56 | 显示全部楼层
1604-9527 发表于 2018-9-6 17:06
请问,如果需要对同一个文件重复写入数据,不采用fopen (xxxxx, “a”)  模式,可以怎么处理呢?

这样的话,最好可以记录一批数据后,创建个新的文件继续。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

0

主题

2

帖子

10

积分

新手上路

积分
10
发表于 2018-9-7 20:32:58 | 显示全部楼层
eric2013 发表于 2018-9-7 01:11
这样的话,最好可以记录一批数据后,创建个新的文件继续。

感谢你的回复
现在做的硬件是SPI FLASH,上位机把很多个 APP分段下发给设备,在设备上能手动选择app来更新。如果采用创建新的文件的方法,一个APP就需要很多个文件来保存数据了,感觉实用会不太方便。
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2018-9-8 02:06:56 | 显示全部楼层
1604-9527 发表于 2018-9-7 20:32
感谢你的回复。
现在做的硬件是SPI FLASH,上位机把很多个 APP分段下发给设备,在设备上能手动 ...

下发APP应该问题不大,可以实际测试下性能。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-2-19 14:58 , Processed in 0.226462 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表