2021-08-19 07:53:56 +00:00
|
|
|
From 83e1167e1a350bd08ac6245f47a5877438408492 Mon Sep 17 00:00:00 2001
|
2021-07-26 18:44:01 +00:00
|
|
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
|
|
Date: Mon, 26 Jul 2021 17:39:23 +0100
|
|
|
|
Subject: [PATCH] cache, cow: Use a 64K block size by default
|
|
|
|
|
|
|
|
Based on the results presented in the previous commit, use a 64K block
|
|
|
|
size by default in both the cache and cow filters. For the cache
|
|
|
|
filter you could go back to a 4K block size if you wanted by using the
|
|
|
|
cache-min-block-size=4K parameter. For cow it is compiled in so
|
|
|
|
cannot be adjusted.
|
|
|
|
|
|
|
|
(cherry picked from commit c1905b0a28677d961babdb16d6f30ae61042c825)
|
|
|
|
---
|
|
|
|
filters/cache/cache.c | 2 +-
|
|
|
|
filters/cache/nbdkit-cache-filter.pod | 4 ++--
|
|
|
|
filters/cow/blk.h | 2 +-
|
|
|
|
tests/test-cache-block-size.sh | 2 +-
|
|
|
|
tests/test-cow-extents1.sh | 33 +++++++++++++++------------
|
|
|
|
5 files changed, 23 insertions(+), 20 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/filters/cache/cache.c b/filters/cache/cache.c
|
2021-08-05 08:13:39 +00:00
|
|
|
index 109ac89e..c912c5fb 100644
|
2021-07-26 18:44:01 +00:00
|
|
|
--- a/filters/cache/cache.c
|
|
|
|
+++ b/filters/cache/cache.c
|
|
|
|
@@ -73,7 +73,7 @@
|
|
|
|
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
|
|
|
|
unsigned blksize; /* actual block size (picked by blk.c) */
|
|
|
|
-unsigned min_block_size = 4096;
|
|
|
|
+unsigned min_block_size = 65536;
|
|
|
|
enum cache_mode cache_mode = CACHE_MODE_WRITEBACK;
|
|
|
|
int64_t max_size = -1;
|
|
|
|
unsigned hi_thresh = 95, lo_thresh = 80;
|
|
|
|
diff --git a/filters/cache/nbdkit-cache-filter.pod b/filters/cache/nbdkit-cache-filter.pod
|
2021-08-05 08:13:39 +00:00
|
|
|
index 6cbd1c08..df9c1f99 100644
|
2021-07-26 18:44:01 +00:00
|
|
|
--- a/filters/cache/nbdkit-cache-filter.pod
|
|
|
|
+++ b/filters/cache/nbdkit-cache-filter.pod
|
|
|
|
@@ -65,8 +65,8 @@ or can cheaply reconstruct.
|
|
|
|
Set the minimum block size used by the cache. This must be a power of
|
|
|
|
2 and E<ge> 4096.
|
|
|
|
|
|
|
|
-The default is 4096, or the block size of the filesystem which
|
|
|
|
-contains the temporary file storing the cache (whichever is larger).
|
|
|
|
+The default is 64K, or the block size of the filesystem which contains
|
|
|
|
+the temporary file storing the cache (whichever is larger).
|
|
|
|
|
|
|
|
=item B<cache-max-size=>SIZE
|
|
|
|
|
|
|
|
diff --git a/filters/cow/blk.h b/filters/cow/blk.h
|
|
|
|
index b066c602..1bc85283 100644
|
|
|
|
--- a/filters/cow/blk.h
|
|
|
|
+++ b/filters/cow/blk.h
|
|
|
|
@@ -36,7 +36,7 @@
|
|
|
|
/* Size of a block in the overlay. A 4K block size means that we need
|
|
|
|
* 64 MB of memory to store the bitmap for a 1 TB underlying image.
|
|
|
|
*/
|
|
|
|
-#define BLKSIZE 4096
|
|
|
|
+#define BLKSIZE 65536
|
|
|
|
|
|
|
|
/* Initialize the overlay and bitmap. */
|
|
|
|
extern int blk_init (void);
|
|
|
|
diff --git a/tests/test-cache-block-size.sh b/tests/test-cache-block-size.sh
|
|
|
|
index a2a27407..d20cc940 100755
|
|
|
|
--- a/tests/test-cache-block-size.sh
|
|
|
|
+++ b/tests/test-cache-block-size.sh
|
|
|
|
@@ -47,7 +47,7 @@ truncate -s 128K cache-block-size.img
|
|
|
|
|
|
|
|
# Run nbdkit with the caching filter.
|
|
|
|
start_nbdkit -P cache-block-size.pid -U $sock --filter=cache \
|
|
|
|
- file cache-block-size.img cache-min-block-size=64K
|
|
|
|
+ file cache-block-size.img cache-min-block-size=4K
|
|
|
|
|
|
|
|
nbdsh --connect "nbd+unix://?socket=$sock" \
|
|
|
|
-c '
|
|
|
|
diff --git a/tests/test-cow-extents1.sh b/tests/test-cow-extents1.sh
|
|
|
|
index 8e0e0383..ebfd83f6 100755
|
|
|
|
--- a/tests/test-cow-extents1.sh
|
|
|
|
+++ b/tests/test-cow-extents1.sh
|
|
|
|
@@ -65,7 +65,7 @@ cleanup_fn rm -f $files
|
|
|
|
|
|
|
|
# Create a base file which is half allocated, half sparse.
|
|
|
|
dd if=/dev/urandom of=$base count=128 bs=1K
|
|
|
|
-truncate -s 256K $base
|
|
|
|
+truncate -s 4M $base
|
|
|
|
lastmod="$(stat -c "%y" $base)"
|
|
|
|
|
|
|
|
# Run nbdkit with a COW overlay.
|
|
|
|
@@ -76,30 +76,33 @@ uri="nbd+unix:///?socket=$sock"
|
|
|
|
nbdinfo --map "$uri" > $out
|
|
|
|
cat $out
|
|
|
|
if [ "$(tr -s ' ' < $out | cut -d' ' -f 1-4)" != " 0 131072 0
|
|
|
|
- 131072 131072 3" ]; then
|
|
|
|
+ 131072 4063232 3" ]; then
|
|
|
|
echo "$0: unexpected initial file map"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Punch some holes.
|
|
|
|
nbdsh -u "$uri" \
|
|
|
|
- -c 'h.trim(4096, 4096)' \
|
|
|
|
- -c 'h.trim(4098, 16383)' \
|
|
|
|
- -c 'h.pwrite(b"1"*4096, 65536)' \
|
|
|
|
- -c 'h.trim(8192, 131072)' \
|
|
|
|
- -c 'h.pwrite(b"2"*8192, 196608)'
|
|
|
|
+ -c 'bs = 65536' \
|
|
|
|
+ -c 'h.trim(bs, bs)' \
|
|
|
|
+ -c 'h.trim(bs+2, 4*bs-1)' \
|
|
|
|
+ -c 'h.pwrite(b"1"*bs, 16*bs)' \
|
|
|
|
+ -c 'h.trim(2*bs, 32*bs)' \
|
|
|
|
+ -c 'h.pwrite(b"2"*(2*bs), 48*bs)'
|
|
|
|
|
|
|
|
# The extents map should be fully allocated.
|
|
|
|
nbdinfo --map "$uri" > $out
|
|
|
|
cat $out
|
|
|
|
-if [ "$(tr -s ' ' < $out | cut -d' ' -f 1-4)" != " 0 4096 0
|
|
|
|
- 4096 4096 3
|
|
|
|
- 8192 8192 0
|
|
|
|
- 16384 4096 3
|
|
|
|
- 20480 110592 0
|
|
|
|
- 131072 65536 3
|
|
|
|
- 196608 8192 0
|
|
|
|
- 204800 57344 3" ]; then
|
|
|
|
+if [ "$(tr -s ' ' < $out | cut -d' ' -f 1-4)" != " 0 65536 0
|
|
|
|
+ 65536 131072 3
|
|
|
|
+ 196608 65536 0
|
|
|
|
+ 262144 65536 3
|
|
|
|
+ 327680 65536 0
|
|
|
|
+ 393216 655360 3
|
|
|
|
+ 1048576 65536 0
|
|
|
|
+ 1114112 2031616 3
|
|
|
|
+ 3145728 131072 0
|
|
|
|
+ 3276800 917504 3" ]; then
|
|
|
|
echo "$0: unexpected trimmed file map"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
--
|
|
|
|
2.31.1
|
|
|
|
|