On 2018-06-15 Denys Vlasenko wrote:
> I noticed that one of my build scripts has this:
> 
> find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs xz
> 
> A rather typical usage, right?
> 
> In my case, this takes several minutes to complete,
> as there are 4000+ modules. The quick check confirms that xz
> runs single-threaded.

I hope the following quote from the xz man page is helpful:

   Parallel compression of many files
       On  GNU  and *BSD, find(1) and xargs(1) can be used to paral‐
       lelize compression of many files:

              find . -type f \! -name '*.xz' -print0 \
                  | xargs -0r -P4 -n16 xz -T1

       The -P option to xargs(1) sets the number of parallel xz pro‐
       cesses.  The best value for the -n option depends on how many
       files there are to be compressed.  If there are only a couple
       of  files, the value should probably be 1; with tens of thou‐
       sands of files, 100 or even more may be appropriate to reduce
       the number of xz processes that xargs(1) will eventually cre‐
       ate.

       The option -T1 for xz is there to force it to single-threaded
       mode,  because xargs(1) is used to control the amount of par‐
       allelization.

nproc(1) from GNU coreutils can be used to determine a value for the -P
option. This isn't mentioned on the man page, but perhaps it should
be, although it's GNU-only. Perhaps xz should have --info-threads or
such which would print the value that is internally available for
--threads=0.

-- 
Lasse Collin  |  IRC: Larhzu @ IRCnet & Freenode

Reply via email to