Writing performance can be enhanced with additional code for caching of FAT table in RAM. Mine colleague have developed these function, with an old 256MB card speedup was 3-4 times, from 4kB/s to 15kB/s. New cards are 5 times faster. With new high capacity, high speed speed cards speedup is not so drastically because bigger cluster size, but you can get at least twice of speedup. We were developed this using CF cards on parallel bus, but I believe that same thing is possible with SD cards.
Trick is that uTasker after every data write in file on card also write FAT sector and update file size. If you keep FAT sector temporary in RAM and update just RAM image, and keep file size also in RAM, you save much of time. Just save FAT on end of file or when you need to change FAT sector, file size save just on end of file, in closeFile routine. Problem is when you turn off power while file is open, and FAT is in RAM, we solved this with saving FAT image and size in NVRAM, so on power up is checked state of NVRAM FAT sector, and saved on card if necessary.
This is our proprietary code, and I can't share it, but idea is simple and it works great.
Best regards
Andrija