diff options
-rw-r--r-- | mdadm.8 | 4 | ||||
-rw-r--r-- | super0.c | 9 | ||||
-rw-r--r-- | super1.c | 9 | ||||
-rw-r--r-- | tests/05r1-grow-internal | 2 | ||||
-rw-r--r-- | tests/05r1-grow-internal-1 | 2 | ||||
-rw-r--r-- | tests/05r1-internalbitmap | 2 | ||||
-rw-r--r-- | tests/05r1-internalbitmap-v1a | 2 | ||||
-rw-r--r-- | tests/05r1-internalbitmap-v1b | 2 | ||||
-rw-r--r-- | tests/05r1-internalbitmap-v1c | 2 | ||||
-rw-r--r-- | tests/05r1-re-add | 2 | ||||
-rw-r--r-- | tests/05r5-internalbitmap | 2 | ||||
-rw-r--r-- | tests/06update-uuid | 4 | ||||
-rw-r--r-- | tests/06wrmostly | 2 |
13 files changed, 27 insertions, 17 deletions
@@ -614,8 +614,8 @@ When using a file based bitmap, the default is to use the smallest size that is at-least 4 and requires no more than 2^21 chunks. When using an .B internal -bitmap, the chunksize is automatically determined to make best use of -available space. +bitmap, the chunksize defaults to 64Meg, or larger if necessary to +fit the bitmap into the available space. .TP .BR \-W ", " \-\-write\-mostly @@ -970,9 +970,14 @@ static int add_internal_bitmap0(struct supertype *st, int *chunkp, min_chunk *= 2; bits = (bits+1)/2; } - if (chunk == UnSet) + if (chunk == UnSet) { + /* A chunk size less than a few Megabytes gives poor + * performance without increasing resync noticeably + */ chunk = min_chunk; - else if (chunk < min_chunk) + if (chunk < 64*1024*1024) + chunk = 64*1024*1024; + } else if (chunk < min_chunk) return 0; /* chunk size too small */ sb->state |= (1<<MD_SB_BITMAP_PRESENT); @@ -1501,9 +1501,14 @@ add_internal_bitmap1(struct supertype *st, min_chunk *= 2; bits = (bits+1)/2; } - if (chunk == UnSet) + if (chunk == UnSet) { + /* For practical purpose, 64Meg is a good + * default chunk size for internal bitmaps. + */ chunk = min_chunk; - else if (chunk < min_chunk) + if (chunk < 64*1024*1024) + chunk = 64*1024*1024; + } else if (chunk < min_chunk) return 0; /* chunk size too small */ if (chunk == 0) /* rounding problem */ return 0; diff --git a/tests/05r1-grow-internal b/tests/05r1-grow-internal index 6389562..f5c0e5b 100644 --- a/tests/05r1-grow-internal +++ b/tests/05r1-grow-internal @@ -7,7 +7,7 @@ check wait testdev $md0 1 $mdsize1 1 #mdadm -E $dev1 -mdadm --grow $md0 --bitmap=internal --delay=1 || { mdadm -X $dev2 ; exit 1; } +mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 || { mdadm -X $dev2 ; exit 1; } dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` sleep 4 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` diff --git a/tests/05r1-grow-internal-1 b/tests/05r1-grow-internal-1 index 18c5c8b..7539fad 100644 --- a/tests/05r1-grow-internal-1 +++ b/tests/05r1-grow-internal-1 @@ -7,7 +7,7 @@ check wait testdev $md0 1 $mdsize1b 1 #mdadm -E $dev1 -mdadm --grow $md0 --bitmap=internal --delay=1 +mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` sleep 4 dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` diff --git a/tests/05r1-internalbitmap b/tests/05r1-internalbitmap index 0af4a7a..68d65e4 100644 --- a/tests/05r1-internalbitmap +++ b/tests/05r1-internalbitmap @@ -2,7 +2,7 @@ # # create a raid1 with an internal bitmap # -mdadm --create -e0.90 --run $md0 --level=1 -n2 --delay=1 --bitmap internal $dev1 $dev2 +mdadm --create -e0.90 --run $md0 --level=1 -n2 --delay=1 --bitmap internal --bitmap-chunk=4 $dev1 $dev2 check wait testdev $md0 1 $mdsize0 1 mdadm -S $md0 diff --git a/tests/05r1-internalbitmap-v1a b/tests/05r1-internalbitmap-v1a index 2ef5eba..f9b08e8 100644 --- a/tests/05r1-internalbitmap-v1a +++ b/tests/05r1-internalbitmap-v1a @@ -2,7 +2,7 @@ # # create a raid1 with an internal bitmap # -mdadm --create --run $md0 --metadata=1.0 --level=1 -n2 --delay=1 --bitmap internal $dev1 $dev2 +mdadm --create --run $md0 --metadata=1.0 --level=1 -n2 --delay=1 --bitmap internal --bitmap-chunk=4 $dev1 $dev2 check wait check bitmap testdev $md0 1 $mdsize1b 1 diff --git a/tests/05r1-internalbitmap-v1b b/tests/05r1-internalbitmap-v1b index 509fb28..268de57 100644 --- a/tests/05r1-internalbitmap-v1b +++ b/tests/05r1-internalbitmap-v1b @@ -2,7 +2,7 @@ # # create a raid1 with an internal bitmap # -mdadm --create --run $md0 --metadata=1.1 --level=1 -n2 --delay=1 --bitmap internal $dev1 $dev2 +mdadm --create --run $md0 --metadata=1.1 --level=1 -n2 --delay=1 --bitmap internal --bitmap-chunk=4 $dev1 $dev2 check wait check bitmap testdev $md0 1 $mdsize11 1 diff --git a/tests/05r1-internalbitmap-v1c b/tests/05r1-internalbitmap-v1c index 5fea930..9eb9a45 100644 --- a/tests/05r1-internalbitmap-v1c +++ b/tests/05r1-internalbitmap-v1c @@ -2,7 +2,7 @@ # # create a raid1 with an internal bitmap # -mdadm --create --run $md0 --metadata=1.2 --level=1 -n2 --delay=1 --bitmap internal $dev1 $dev2 +mdadm --create --run $md0 --metadata=1.2 --level=1 -n2 --delay=1 --bitmap internal --bitmap-chunk 4 $dev1 $dev2 check wait check bitmap testdev $md0 1 $mdsize12 1 diff --git a/tests/05r1-re-add b/tests/05r1-re-add index 97db6c5..cfa1e6b 100644 --- a/tests/05r1-re-add +++ b/tests/05r1-re-add @@ -5,7 +5,7 @@ # Then do some IO first. Resync should still be very fast # -mdadm -CR $md0 -l1 -n2 -binternal -d1 $dev1 $dev2 +mdadm -CR $md0 -l1 -n2 -binternal --bitmap-chunk=4 -d1 $dev1 $dev2 check resync check wait testdev $md0 1 $mdsize1 1 diff --git a/tests/05r5-internalbitmap b/tests/05r5-internalbitmap index 50dd36e..591c9db 100644 --- a/tests/05r5-internalbitmap +++ b/tests/05r5-internalbitmap @@ -2,7 +2,7 @@ # # create a raid1 with an internal bitmap # -mdadm --create --run $md0 --level=5 -n3 --delay=1 --bitmap internal $dev1 $dev2 $dev3 +mdadm --create --run $md0 --level=5 -n3 --delay=1 --bitmap internal --bitmap-chunk=4 $dev1 $dev2 $dev3 check wait testdev $md0 2 $mdsize1 512 mdadm -S $md0 diff --git a/tests/06update-uuid b/tests/06update-uuid index c23afc9..a4409e7 100644 --- a/tests/06update-uuid +++ b/tests/06update-uuid @@ -57,7 +57,7 @@ fi mdadm -S /dev/md0 # Internal bitmaps too. -mdadm -CR --assume-clean -b internal $md0 -l5 -n3 $dev0 $dev1 $dev2 +mdadm -CR --assume-clean -b internal --bitmap-chunk 4 $md0 -l5 -n3 $dev0 $dev1 $dev2 mdadm -S /dev/md0 mdadm -A /dev/md0 --update=uuid --uuid=0123456789abcdef:fedcba9876543210 $dev0 $dev1 $dev2 no_errors @@ -69,7 +69,7 @@ mdadm -X $dev0 | grep -s > /dev/null 01234567:89abcdef:fedcba98:76543210 || { } mdadm -S /dev/md0 -mdadm -CR --assume-clean -e1.2 -b internal $md0 -l5 -n3 $dev0 $dev1 $dev2 +mdadm -CR --assume-clean -e1.2 -b internal --bitmap-chunk=4 $md0 -l5 -n3 $dev0 $dev1 $dev2 mdadm -S /dev/md0 mdadm -A /dev/md0 --update=uuid --uuid=0123456789abcdef:fedcba9876543210 $dev0 $dev1 $dev2 no_errors diff --git a/tests/06wrmostly b/tests/06wrmostly index a4d730e..2a3fae6 100644 --- a/tests/06wrmostly +++ b/tests/06wrmostly @@ -8,7 +8,7 @@ testdev $md0 1 $mdsize1 1 mdadm -S $md0 -mdadm -CR $md0 -l1 -n3 --write-behind --bitmap=internal $dev0 $dev1 --write-mostly $dev2 +mdadm -CR $md0 -l1 -n3 --write-behind --bitmap=internal --bitmap-chunk=4 $dev0 $dev1 --write-mostly $dev2 testdev $md0 1 $mdsize1 1 mdadm -S $md0 |