Merge "Adjust the size limit for splitting large files" into mnc-dr-dev am: 7d55185
am: 2c355a1
* commit '2c355a15bed912df7c77e9738d03d84f5a200194':
Adjust the size limit for splitting large files
This commit is contained in:
@@ -966,29 +966,36 @@ class BlockImageDiff(object):
|
|||||||
too many blocks (greater than MAX_BLOCKS_PER_DIFF_TRANSFER), we split it
|
too many blocks (greater than MAX_BLOCKS_PER_DIFF_TRANSFER), we split it
|
||||||
into smaller pieces by getting multiple Transfer()s.
|
into smaller pieces by getting multiple Transfer()s.
|
||||||
|
|
||||||
The downside is that after splitting, we can no longer use imgdiff but
|
The downside is that after splitting, we may increase the package size
|
||||||
only bsdiff."""
|
since the split pieces don't align well. According to our experiments,
|
||||||
|
1/8 of the cache size as the per-piece limit appears to be optimal.
|
||||||
MAX_BLOCKS_PER_DIFF_TRANSFER = 1024
|
Compared to the fixed 1024-block limit, it reduces the overall package
|
||||||
|
size by 30% volantis, and 20% for angler and bullhead."""
|
||||||
|
|
||||||
# We care about diff transfers only.
|
# We care about diff transfers only.
|
||||||
if style != "diff" or not split:
|
if style != "diff" or not split:
|
||||||
Transfer(tgt_name, src_name, tgt_ranges, src_ranges, style, by_id)
|
Transfer(tgt_name, src_name, tgt_ranges, src_ranges, style, by_id)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
pieces = 0
|
||||||
|
cache_size = common.OPTIONS.cache_size
|
||||||
|
split_threshold = 0.125
|
||||||
|
max_blocks_per_transfer = int(cache_size * split_threshold /
|
||||||
|
self.tgt.blocksize)
|
||||||
|
|
||||||
# Change nothing for small files.
|
# Change nothing for small files.
|
||||||
if (tgt_ranges.size() <= MAX_BLOCKS_PER_DIFF_TRANSFER and
|
if (tgt_ranges.size() <= max_blocks_per_transfer and
|
||||||
src_ranges.size() <= MAX_BLOCKS_PER_DIFF_TRANSFER):
|
src_ranges.size() <= max_blocks_per_transfer):
|
||||||
Transfer(tgt_name, src_name, tgt_ranges, src_ranges, style, by_id)
|
Transfer(tgt_name, src_name, tgt_ranges, src_ranges, style, by_id)
|
||||||
return
|
return
|
||||||
|
|
||||||
pieces = 0
|
while (tgt_ranges.size() > max_blocks_per_transfer and
|
||||||
while (tgt_ranges.size() > MAX_BLOCKS_PER_DIFF_TRANSFER and
|
src_ranges.size() > max_blocks_per_transfer):
|
||||||
src_ranges.size() > MAX_BLOCKS_PER_DIFF_TRANSFER):
|
|
||||||
tgt_split_name = "%s-%d" % (tgt_name, pieces)
|
tgt_split_name = "%s-%d" % (tgt_name, pieces)
|
||||||
src_split_name = "%s-%d" % (src_name, pieces)
|
src_split_name = "%s-%d" % (src_name, pieces)
|
||||||
tgt_first = tgt_ranges.first(MAX_BLOCKS_PER_DIFF_TRANSFER)
|
tgt_first = tgt_ranges.first(max_blocks_per_transfer)
|
||||||
src_first = src_ranges.first(MAX_BLOCKS_PER_DIFF_TRANSFER)
|
src_first = src_ranges.first(max_blocks_per_transfer)
|
||||||
|
|
||||||
Transfer(tgt_split_name, src_split_name, tgt_first, src_first, style,
|
Transfer(tgt_split_name, src_split_name, tgt_first, src_first, style,
|
||||||
by_id)
|
by_id)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user