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