Posts Tagged ‘FAT32’

Great Performance from FullFAT

Monday, November 17th, 2008

Today I managed to find some time to test the performance of FullFAT so far. (Always good to know your heading in the right direction).

I got some very promising results, testing on BlackFIN hardware, in comparison to a port of the FreeDOS fat driver:

The performance shows figures, for directory tree traversal using long filenames.
FreeDOS took 232982011 Core Clock Cycles.
FullFAT took only 3357211 Core Clock Cycles.

That shows that the FullFAT algorithm for directory tree traversal, and long-filename handling is 70x faster.
The test involved invoking the ls command, and seeing how long it took, using each driver.

I’ve also improved the portability of the entire framework, by ensuring that there are no memory alignment issues. The only platform portability that is required is to create memory access routines for BIG ENDIAN devices, and also those devices that do not have single byte access.

All these options will be easily configurable in a config.h header file.

These results surprised me a little, as I thought my directory tree traversal algorithm wasn’t particularly lean, I’ll see if I can improve even further later. Right now, stability across all platforms is the main priority.

The next small task is to bring FAT32 compatibility in-line with FAT16. Then i’ll be traversing the FAT tables, and reading files as efficiently as possible.

I’ll write more at a later date to keep you informed with the progress.

FullFAT Embedded FAT/12/16/32 Filesystem Driver

Monday, November 17th, 2008

FullFAT development is well underway now, and moving ahead at full-speed. So far FAT16 support is the most comprehensive, with some small bug-fixes required to finish the full FAT32 support.

Long FileName (LFN) support is also working extremely well, and FullFAT can already quickly traverse its way through directory trees, and quickly provide the contents of the folder to a simple LS program.

Further testing is required for BIG ENDIAN architectures, to ensure maximum portability. As I only have a LITTLE ENDIAN pc, and access to little endian BlackFIN development hardware, its difficult for me to test and debug my BIG ENDIAN routines.

Full read file capabilities should be finished by the end of this week, for fat16 and 32 formats. FAT12 support will be implemented later, although its possible I might not include this in the final product for code density reasons. (If you’re using FAT12 let me know, and I’ll make sure it gets included).

After the FAT16/32 file read support I’ll be doing a full code-review, to minimise memory footprints, increase performance and efficiency. I’ll also be implementing a full-featured I/O manager, that will handle caching by sectors (for memory constrained devices) or by clusters (for those with a bit more freedom!).

I’m still thinking exactly what to do with the code,shall I release under GPL for the greater good of Free Software, or maybe I’ll provide it free for non-commercial use only. Charging embedded designers only a reasonable one-off fee for use in their end products.

I expect an initial release of FullFAT around January 2009.