Page 1 of 1

SPIFFS performance too bad?

Posted: Mon Dec 24, 2018 4:21 am
by gongli
Hi, I found fopen/fread spiffs files on my board are extraordinary slow.

The board I have is an ESP32-WROVER-B board with 16MB spi flash. About 10M of the flash is partitioned as spiffs.
On the spiffs, there are several files arranged in at most two level sub directories. Sizes of the files range from several KBs to several hundreds KBs.

As I observed, a fopen can take hundreds of milliseconds to several seconds, while a fread take up to several seconds, for files at about 500KB. The fread is carried out slice-by-slice, with a single slice of size 4KB.

In my use case, these file operation is not time critical. However, as they go far beyond my normal expectation. I wonder if these performances are normal?

Re: SPIFFS performance too bad?

Posted: Mon Dec 24, 2018 9:52 am
by loboris
This is definitely not normal.
Opening the file and reading should be quite fast (< 1ms per 4K block). Writing can be slow, as the sector has to be erased and that can take ~100 ms.

Re: SPIFFS performance too bad?

Posted: Mon Dec 24, 2018 10:29 am
by gongli
Thanks loboris for the reply. Any clue to the cause?

Re: SPIFFS performance too bad?

Posted: Mon Dec 24, 2018 11:02 am
by ESP_igrr
Perhaps try increasing the page size? For the 10MB partition, 256 byte page size might be resulting in too many pages. I recall seeing such issues reported on the SPIFFS repository, although I can't find the exact link now...

Re: SPIFFS performance too bad?

Posted: Tue Dec 25, 2018 3:06 am
by gongli
Thanks for the hint. I tried increasing page size from 256 to 1024 which did no help. Worse, it's performance downgraded by ~50%. I also tried increasing block size from 4096 to 8192 or 32768, but they won't work (complained NOT A FS error). However, by reduce partition size to 4MB I can see more than doubled performance. Though still fall below some normal expectation.

Re: SPIFFS performance too bad?

Posted: Fri Dec 28, 2018 7:07 pm
by Ritesh
gongli wrote:
Tue Dec 25, 2018 3:06 am
Thanks for the hint. I tried increasing page size from 256 to 1024 which did no help. Worse, it's performance downgraded by ~50%. I also tried increasing block size from 4096 to 8192 or 32768, but they won't work (complained NOT A FS error). However, by reduce partition size to 4MB I can see more than doubled performance. Though still fall below some normal expectation.
Hi,

Would you please explain your scenario in details with statistical data as well? Also, Would you please try with direct file instead of creating file inside directory? Because there might be chances of getting delay while writing data into file system? Also are you using standard SPIFFS or loboris supported SPIFFS component?

Re: SPIFFS performance too bad?

Posted: Sat Dec 29, 2018 8:43 am
by gongli
Ritesh wrote:
Fri Dec 28, 2018 7:07 pm

Would you please explain your scenario in details with statistical data as well? Also, Would you please try with direct file instead of creating file inside directory? Because there might be chances of getting delay while writing data into file system? Also are you using standard SPIFFS or loboris supported SPIFFS component?
My use case is a small web server hosting several files (less than 10). The file sizes range from hundred bytes to hundred K bytes. In the performance observation only a single browser is connected.

The file system image is generated using mkspiffs https://github.com/igrr/mkspiffs

Code: Select all

mkspiffs -d 5 -c [directory] -b 4096 -p 256 -s 0x400000 spiffs.bin
The app uses api esp_vfs_spiffs_register() to mount the file system at run time.

A 4MB partition is designed for the spiffs:

Code: Select all

storage,  data, spiffs,  0x800000, 4M,
The module on board is an ESP32-WROVER-B with 16MB flash.

And put all files under root directory makes no difference. Listed below are some detaild time measurements. The fopen means time used for calling fopen(), flash for fread(), and socket for socket send(). Among these, the biggest file is app.js which is nearly 600KB.
I (292722) app: httpd.hpp:155 serving /spiffs/index.html in 16ms. fopen=4ms flash=10ms socket=2ms
I (292878) app: httpd.hpp:155 serving /spiffs/all.css in 98ms. fopen=0ms flash=82ms socket=16ms
I (294910) app: httpd.hpp:155 serving /spiffs/main.css in 2028ms. fopen=10ms flash=1872ms socket=146ms
I (294937) app: httpd.hpp:155 serving /spiffs/aisz.js in 22ms. fopen=5ms flash=14ms socket=3ms
I (294962) app: httpd.hpp:155 serving /spiffs/main.js in 20ms. fopen=9ms flash=8ms socket=3ms
I (300033) app: httpd.hpp:155 serving /spiffs/vendor.js in 5067ms. fopen=4ms flash=4149ms socket=914ms
I (307310) app: httpd.hpp:155 serving /spiffs/app.js in 7272ms. fopen=6ms flash=5940ms socket=1326ms

Re: SPIFFS performance too bad?

Posted: Tue Sep 22, 2020 12:45 pm
by FoxTerrier
Hello,
I got exactly same problem as you (with same (not so good) solution : return to 2Mb SPIFFS in place od 8mb)
Did you finally find a real solution ? tune sspiffs settings ?
any advice ?

Thanks a lots !