Here's a more full-featured implementation of a cache for block devices that uses a small linked list of cache blocks.
Experimentation loading a 4.5 MiB kernel from the root directory of a FAT filesystem shows that a single cache entry of a single block is the only Loading the same from the /boot directory of an ext4 filesystem shows a benefit with 4 cache entries, though the single biggest benefit is also with the first cache entry: => for n in 0 1 2 4 8 ; do > blkc 1 $n ; blkc c ; blkc i ; > load mmc 0:2 10008000 /boot/zImage ; > done changed to max of 0 entries of 1 blocks each 4955304 bytes read in 503 ms (9.4 MiB/s) changed to max of 1 entries of 1 blocks each 4955304 bytes read in 284 ms (16.6 MiB/s) changed to max of 2 entries of 1 blocks each 4955304 bytes read in 284 ms (16.6 MiB/s) changed to max of 4 entries of 1 blocks each 4955304 bytes read in 255 ms (18.5 MiB/s) changed to max of 8 entries of 1 blocks each 4955304 bytes read in 255 ms (18.5 MiB/s) As mentioned earlier in this thread, the modification to the mmc layer should probably be simpler and easier to apply to other block subsystems. Eric Nelson (3): drivers: block: add block device cache block: add Kconfig options for BLOCK_CACHE, CMD_BLOCK_CACHE mmc: add support for block device cache drivers/block/Kconfig | 19 ++++ drivers/block/Makefile | 1 + drivers/block/cache_block.c | 240 ++++++++++++++++++++++++++++++++++++++++++++ drivers/mmc/mmc.c | 10 +- drivers/mmc/mmc_write.c | 7 ++ include/part.h | 69 +++++++++++++ 6 files changed, 345 insertions(+), 1 deletion(-) create mode 100644 drivers/block/cache_block.c -- 2.6.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot