From 8bf60c3114031894bbf8e14a2d903e968e160003 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 24 Feb 2011 11:38:31 +1100 Subject: [PATCH] Don't round to page size if the entire buffer will fit, otherwise this generates one extra pass of a tiny chunk. --- rzip.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rzip.c b/rzip.c index 0ee8c61..e0b2b03 100644 --- a/rzip.c +++ b/rzip.c @@ -773,14 +773,18 @@ void rzip_fd(int fd_in, int fd_out) control.max_mmap = MIN(control.max_mmap, two_gig); round_to_page(&control.max_mmap); - /* Set maximum chunk size to 2/3 of ram */ - control.max_chunk = control.ramsize / 3 * 2; + /* Set maximum chunk size to 2/3 of ram if not unlimited or specified + * by a control window. When it's smaller than the file size, round it + * to page size for efficiency. */ if (UNLIMITED) control.max_chunk = control.st_size; - if (control.window) + else if (control.window) control.max_chunk = MIN(control.max_chunk, control.window * CHUNK_MULTIPLE); - round_to_page(&control.max_chunk); + else + control.max_chunk = control.ramsize / 3 * 2; control.max_mmap = MIN(control.max_mmap, control.max_chunk); + if (control.max_mmap < control.st_size) + round_to_page(&control.max_chunk); if (!STDIN) st->chunk_size = MIN(control.max_chunk, len);