diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2020-02-01 19:56:18 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2020-02-01 19:56:18 +0200 |
commit | 353970510895f6a80adfe60cf71b70a95adfa8bc (patch) | |
tree | 112c8b4601bb0a90243cc7c7d4a6ad3433751e30 /lib/getopt1.c | |
parent | xz: Set the --flush-timeout deadline when the first input byte arrives. (diff) | |
download | xz-353970510895f6a80adfe60cf71b70a95adfa8bc.tar.xz |
xz: Limit --memlimit-compress to at most 4020 MiB for 32-bit xz.
See the code comment for reasoning. It's far from perfect but
hopefully good enough for certain cases while hopefully doing
nothing bad in other situations.
At presets -5 ... -9, 4020 MiB vs. 4096 MiB makes no difference
on how xz scales down the number of threads.
The limit has to be a few MiB below 4096 MiB because otherwise
things like "xz --lzma2=dict=500MiB" won't scale down the dict
size enough and xz cannot allocate enough memory. With
"ulimit -v $((4096 * 1024))" on x86-64, the limit in xz had
to be no more than 4085 MiB. Some safety margin is good though.
This is hack but it should be useful when running 32-bit xz on
a 64-bit kernel that gives full 4 GiB address space to xz.
Hopefully this is enough to solve this:
https://bugzilla.redhat.com/show_bug.cgi?id=1196786
FreeBSD has a patch that limits the result in tuklib_physmem()
to SIZE_MAX on 32-bit systems. While I think it's not the way
to do it, the results on --memlimit-compress have been good. This
commit should achieve practically identical results for compression
while leaving decompression and tuklib_physmem() and thus
lzma_physmem() unaffected.
Diffstat (limited to 'lib/getopt1.c')
0 files changed, 0 insertions, 0 deletions