Some benchmarks:
* mkfs on 500 MB qcow2 disk
mkfs WITHOUT WITH
ide, cache=off,snapshot=off 41 s 5 s 8x faster
ide, cache=off,snapshot=on 40 s 5 s 8x faster
ide, cache=on, snapshot=off 3 s 3 s
ide, cache=on, snapshot=on 4 s 3 s
* tar jxvf linux-2.6.25.7.tar.bz2
ide, cache=off,snapshot=off 847 s 379 s 2.2x faster
ide, cache=off,snapshot=on 801 s 364 s 2.2x faster
ide, cache=on, snapshot=off 238 s 236 s
ide, cache=on, snapshot=on 236 s 237 s
* dd if=/dev/zero of=file
dd if=/dev/null WITHOUT WITH
ide, cache=off,snapshot=off 333 kB/s 3.7 MB/s 11.3x faster
ide, cache=off,snapshot=on 337 kB/s 3.6 MB/s 10.9x faster
ide, cache=on, snapshot=off 9.06 MB/s 9.23 MB/s
ide, cache=on, snapshot=on 8,89 MB/s 8.89 MB/s
* dbench 1
dbench WITHOUT WITH
ide, cache=off,snapshot=off 20.8494 MB/sec 24.8521 MB/sec +19,2%
ide, cache=off,snapshot=on 20.9349 MB/sec 24.2296 MB/sec +15,7%
ide, cache=on, snapshot=off 23.6612 MB/sec 25.4724 MB/sec + 7,6%
ide, cache=on, snapshot=on 24.1836 MB/sec 24.8169 MB/sec
[PATCH 1/5] extract code from get_cluster_offset() into new functions
seek_l2_table(), l2_load() and l2_allocate().
[PATCH 2/5] divide get_cluster_offset() into get_cluster_offset() and
alloc_cluster_offset().
[PATCH 3/5] divide alloc_cluster_offset() into alloc_cluster_offset()
and alloc_compressed_cluster_offset(). Factorize code
to free clusters into free_used_clusters().
[PATCH 4/5] modify get_cluster_offset(), alloc_cluster_offset() and
free_used_clusters() to specify how many clusters we
want.
[PATCH 5/5] in free_used_clusters(), try to aggregate free clusters
and freed clusters.
Laurent
--