On 2016-04-12 Matt Parlane wrote:
> I have compiled xz from source (rev ac398c3), and I am trying to use
> multithread compression by using -T 0 in the command line.
>
> What I am finding is that when run straight from the command line, it
> uses multiple cores as expected. However, when running via a shell
> script via cron, only one core is utilised.
>
> Any ideas? I'm running exactly the same command on the same file, and
> I would really love to make full use of my system.
Check if the environment variables XZ_DEFAULTS and XZ_OPT differ
between the two situations. I guess it's unlikely, but it's easy to
check, so I mentioned this first.
If the above didn't help: Does it work if you specify the number of
threads explicitly, for example, by using -T4 instead of -T0? If it
does, then the problem must be in the detection of the number of CPU
cores.
Since the detection works outside cron, perhaps there are some
restrictions that prevent it from working under cron. You didn't
mention your operating system or distribution, but I'm guessing
it's GNU/Linux. There xz uses sysconf(_SC_NPROCESSORS_ONLN) which makes
glibc read from /sys/devices/system/cpu/online. (I think it used to
read /proc/cpuinfo in the past.)
If something like SELinux blocks reading such files, then the core
count detection won't work. Compare the strace output in the two
situations:
strace -o /home/foo/strace.txt xz -T0 < /dev/null > /dev/null
If it is a SELinux issue (or similar), it would be good to report it to
the distribution maintainers.
--
Lasse Collin | IRC: Larhzu @ IRCnet & Freenode