mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
Fix the sliding mmap buffer not working on 2nd pass onwards which was causing a slowdon of death.
This commit is contained in:
parent
13ca377279
commit
6929492874
|
|
@ -6,6 +6,7 @@ NOVEMBER 2010, version 0.542 Con Kolivas
|
||||||
* Minor tweaks to output.
|
* Minor tweaks to output.
|
||||||
* Round up the size of the high buffer in sliding mmap to one page.
|
* Round up the size of the high buffer in sliding mmap to one page.
|
||||||
* Squeeze a little more out of 32 bit compression windows.
|
* Squeeze a little more out of 32 bit compression windows.
|
||||||
|
* Fix sliding mmap from not working on 2nd pass onwards.
|
||||||
|
|
||||||
NOVEMBER 2010, version 0.541 Con Kolivas
|
NOVEMBER 2010, version 0.541 Con Kolivas
|
||||||
* Fix wrong number of passes reported.
|
* Fix wrong number of passes reported.
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ buffer for better performance.
|
||||||
The progress output is more informative in max verbose mode, and will no longer
|
The progress output is more informative in max verbose mode, and will no longer
|
||||||
do more passes than it estimates.
|
do more passes than it estimates.
|
||||||
32 bit machines should be able to use slightly larger windows.
|
32 bit machines should be able to use slightly larger windows.
|
||||||
|
The sliding mmap not working on 2nd pass onwards has been fixed which should
|
||||||
|
speed up the slowdown of death.
|
||||||
|
|
||||||
lrzip-0.540
|
lrzip-0.540
|
||||||
|
|
||||||
|
|
|
||||||
10
rzip.c
10
rzip.c
|
|
@ -99,6 +99,7 @@ struct sliding_buffer {
|
||||||
i64 size_high; /* "" high "" */
|
i64 size_high; /* "" high "" */
|
||||||
i64 high_length;/* How big the high buffer should be */
|
i64 high_length;/* How big the high buffer should be */
|
||||||
int fd; /* The fd of the mmap */
|
int fd; /* The fd of the mmap */
|
||||||
|
int low_top; /* The low buffer has hit the top */
|
||||||
} sb; /* Sliding buffer */
|
} sb; /* Sliding buffer */
|
||||||
|
|
||||||
static void round_to_page(i64 *size)
|
static void round_to_page(i64 *size)
|
||||||
|
|
@ -108,15 +109,14 @@ static void round_to_page(i64 *size)
|
||||||
|
|
||||||
static void remap_low_sb(void)
|
static void remap_low_sb(void)
|
||||||
{
|
{
|
||||||
static int top = 0;
|
|
||||||
i64 new_offset;
|
i64 new_offset;
|
||||||
|
|
||||||
if (top)
|
if (sb.low_top)
|
||||||
return;
|
return;
|
||||||
new_offset = sb.offset_search;
|
new_offset = sb.offset_search;
|
||||||
if (new_offset + sb.size_low > sb.orig_size) {
|
if (new_offset + sb.size_low > sb.orig_size) {
|
||||||
new_offset = sb.orig_size - sb.size_low;
|
new_offset = sb.orig_size - sb.size_low;
|
||||||
top = 1;
|
sb.low_top = 1;
|
||||||
}
|
}
|
||||||
round_to_page(&new_offset);
|
round_to_page(&new_offset);
|
||||||
print_maxverbose("Sliding main buffer to offset %lld\n", new_offset);
|
print_maxverbose("Sliding main buffer to offset %lld\n", new_offset);
|
||||||
|
|
@ -684,6 +684,7 @@ static void init_sliding_mmap(struct rzip_state *st, int fd_in, i64 offset)
|
||||||
sb.size_high = sb.high_length;
|
sb.size_high = sb.high_length;
|
||||||
sb.offset_high = 0;
|
sb.offset_high = 0;
|
||||||
}
|
}
|
||||||
|
sb.low_top = 0;
|
||||||
sb.offset_low = 0;
|
sb.offset_low = 0;
|
||||||
sb.offset_search = 0;
|
sb.offset_search = 0;
|
||||||
sb.size_low = st->mmap_size;
|
sb.size_low = st->mmap_size;
|
||||||
|
|
@ -765,8 +766,9 @@ void rzip_fd(int fd_in, int fd_out)
|
||||||
control.max_mmap = MIN(control.max_mmap, two_gig / 3);
|
control.max_mmap = MIN(control.max_mmap, two_gig / 3);
|
||||||
round_to_page(&control.max_mmap);
|
round_to_page(&control.max_mmap);
|
||||||
|
|
||||||
|
/* Set maximum chunk size to ram size. */
|
||||||
if (MAXRAM && !STDIN)
|
if (MAXRAM && !STDIN)
|
||||||
control.max_chunk = control.max_mmap / 2 * 3;
|
control.max_chunk = control.ramsize;
|
||||||
else
|
else
|
||||||
control.max_chunk = control.max_mmap;
|
control.max_chunk = control.max_mmap;
|
||||||
if (UNLIMITED)
|
if (UNLIMITED)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue