In fairness I did say others I had spoken to had no complaints, perhaps I was just unlucky or my expectations were too high
No. When I added the 1 byte config file (really, one byte!) to AuRei, people complained about slow booting. "Latency" or "random access time" is the time the card needs to access a random sector. Now, I'm not sure if all large (64/128 GB) cards have bad latency (which is not read/write speeds, those are very fast), but everyone who had the slowdown had large cards. It's not "a myth", I saw it happen.
There's more than one thing at play here. Reading a 1 byte file is actually many operations. For example:
0. Start with root directory
1. Read the first sector of the directory
2. Scan for the target file/directory (processing in memory... can "optimize" media by copying boot files onto the media before any other files)
3. If directory found, read the FAT table to find full allocation for that directory and goto #1
4. If end of sector, and directory continues, read the next sector for this directory and goto #2
5. Once file is found, read the FAT table to find full allocation for that file (which is probably not optimized out on single-sector files)
5. Read the actual sector(s) of the file
Thus, this is at least three sectors read (root, FAT, and actual file), as I've not seen any caching or other optimizations in the file system code. Add at least two more reads for a subdirectory (directory entry + FAT need to be read). Reading of a single-byte file is essentially as quick as reading a single-cluster sized file.
Most likely, the users experiencing slowdowns had *lots* of files on the media.
A quick improvement (data isn't copied, just directories modified):
* make a directory in the root, called "TMP"
* move all files and folders into TMP, so it's the only thing in root directory.
* move boot-time critical files back into root directory
* move everything else back into the root directory
Why? This makes the boot-time critical files take up the first few directory entries, and thus ensures single-sector read of the root directory will find that file/directory.
A better improvement:
* Use robocopy for the below (built-in to Windows)
* robocopy everything off the SD card to temp hard drive space
* format the SD card
* robocopy boot-critical files and directories back onto the SD card
* robocopy all the other files, using /CREATE option to only create file/directory entries
Why? makes all the allocations sequential, and /CREATE ensures directory entries are also all at the start of the media....
CFW improvements:
There's a few things to tweak that can help.
1. Cache the directory entries, if you're booting and know there are no writes to the media
2. Don't look at FAT if file size is less than one cluster... just need the first cluster