Hi,

Lasse Collin wrote:

> With compression, -T0 in 5.1.1alpha sets the number of threads to match
> the number of CPU cores. If no memory usage limit has been set, it may
> end up using more memory than there is RAM. Pushing the system to swap
> with threading is silly, because the point of threading in xz is to
> make it faster. So it might make sense to have some kind of default
> soft limit that is used to limit the number of threads when automatic
> number of threads is requested.

How about something like this patch, to start?  With it applied, I am
happy using

        XZ_DEFAULTS='--no-adjust --threads=0 --memlimit=1080MiB

(As the FIXME comment in coder_set_compression_settings() explains, it
is a little silly to waste so much space bookkeeping in those cases
where memory constraints are tight enough to only allow using one
thread, but that's a story for another day.)
---
 src/xz/coder.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/xz/coder.c b/src/xz/coder.c
index 41193a7..5382689 100644
--- a/src/xz/coder.c
+++ b/src/xz/coder.c
@@ -229,12 +229,6 @@ coder_set_compression_settings(void)
        if (memory_usage <= memory_limit)
                return;
 
-       // If --no-auto-adjust was used or we didn't find LZMA1 or
-       // LZMA2 as the last filter, give an error immediately.
-       // --format=raw implies --no-auto-adjust.
-       if (!opt_auto_adjust || opt_format == FORMAT_RAW)
-               memlimit_too_small(memory_usage);
-
        assert(opt_mode == MODE_COMPRESS);
 
 #ifdef HAVE_PTHREAD
@@ -269,6 +263,12 @@ coder_set_compression_settings(void)
        if (memory_usage <= memory_limit)
                return;
 
+       // If --no-auto-adjust was used or we didn't find LZMA1 or
+       // LZMA2 as the last filter, give an error immediately.
+       // --format=raw implies --no-auto-adjust.
+       if (!opt_auto_adjust || opt_format == FORMAT_RAW)
+               memlimit_too_small(memory_usage);
+
        // Look for the last filter if it is LZMA2 or LZMA1, so we can make
        // it use less RAM. With other filters we don't know what to do.
        size_t i = 0;
-- 
1.7.8.rc3


Reply via email to