Set default bitmap-chunksize for internal bitmaps to at least 64Meg

A small bitmap-chunksize hurts performance without helping
resync speed much - particularly on internal bitmaps.

So set the default to at least 64Meg.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2009-11-17 13:15:34 +11:00
parent ff94fb86fd
commit b8ab2a50ab
13 changed files with 27 additions and 17 deletions

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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'`

View File

@ -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'`

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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