[U-Boot] [RFC V2 PATCH 0/3] Add cache for block devices

Eric Nelson
2016-03-21T01:45:24Z

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