Hi,
On Wed, Oct 25, 2023 at 08:38:54AM +0200, Xavier Humbert wrote:
Hi,
When building rust, all memory is eaten, leading to OOM killing almost
everything, eventually failing, and leading to an unstable system.
Is there a way to tell the compiler to avoid this behaviour ?
Are you building just from the ports tree or are you using poudriere?
if the former, try unsetting LTO in /etc/make.conf and if you have a
MAKE_JOBS statement in there, comment it out.
Try installing devel/sccache before your build. Ensure that
ccache is installed too. pay attention to the pkg-message after
install.
If you're using poudriere, the following settings are relevant:
1. make sure you have ports-mgmt/sccache-overlay installed.
2. in the make.conf for the poudriere jail, have these set:
SCCACHE_DIR=/var/cache/ccache/sccache
OVERLAYS+=/usr/local/share/sccache/overlay
WITH_CCACHE_BUILD=
CCACHE_DIR=/var/cache/ccache
3. also make sure devel/ccache-static (it *has* to be the -static variant)
is installed.
To use the sscache overlay, invoke the poudriere build with -O sccache
after installing as per the instructions.
On a rpi4b/8GB (therefore relatively resource constrained) running 14-stable
and poudriere-devel, it has the following settings (relevant to this discussion)
in poudriere.conf
USE_TMPFS=all
TMPFS_BLACKLIST="rust* llvm* libreo* firef* tex* ungoogled-ch* chromi* gcc* openjdk*
electron* iridium"
MAX_FILES=4096
PARALLEL_JOBS=1
PREPARE_PARALLEL_JOBS=2
The following tunables are set in /etc/sysctl.conf
# filesystem
vm.pageout_oom_seq=120
vm.pfault_oom_attempts=-1
vm.pageout_update_period=0
vfs.zfs.arc.min=536870912
vfs.zfs.arc.max=1073741824
The rpi is clocked to 2.1GHz. It took 9hrs 3 mins to build rust-1.73.0
good luck,
--