Re: devel/llvm13 failed to reclaim memory on 8 GB Pi4 running -current
- In reply to: Marcin Cieslak : "Re: devel/llvm13 failed to reclaim memory on 8 GB Pi4 running -current"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 05 Jun 2022 00:28:07 UTC
On 2022-Jun-4, at 14:49, Marcin Cieslak <saper@saper.info> wrote:
> On Fri, 28 Jan 2022, Mark Millard wrote:
>
> [ Reviving old thread ]
>
>> After that I intend runs with 30 GiBytes of swap (so RAM+SWAP 38 GiBytes).
>> Hopefully that will complete and I'll be able to report how much swap was
>> observed to have been used.
>
> I thought I will get LLVM14 + OpenJDK built quickly so I fired up
> a c6g.4xlarge AWS instance (16 vCPUs, 32 GB RAM),
> or even c6g.8xlarge (32 vCPUs, 64 GB RAM) and even these
> are unable to build llvm14 under FreeBSD 13.1-RELEASE
> with poudrière enabling MAKE_JOBS for llvm build.
It depends on the build options. Do you need fortran,
a.k.a. flang ?
Building flang requires building MLIR because building
flang uses MLIR. Without needing flang, both can normally
be turned off.
flang does not build for armv7 and other 32-bit environments,
so recently the /usr/ports/devel/llvm14/Makefile was modified
to not have flang as a default for armv7 (or armv6). My
understanding, the intent is to later also turn off MLIR
for these.
I have built devel/llvm14 with FLANG and MLIR disabled on
a 8 GiByte RPi4B in an armv7 poudriere jail. This was
as part of an ongoing "bulk -a -c" on the RPi4B. (I will
not be able to let it run to completion but am testing
how things go until I stop it.) The below notes are
somewhat biased by my also having used BE_NATIVE for the
devel/llvm14 build:
---Begin OPTIONS List---
===> The following configuration options are available for llvm14-14.0.2:
BE_AMDGPU=on: AMD GPU backend (required by mesa)
BE_WASM=on: WebAssembly backend (required by firefox via wasi)
CLANG=on: Build clang
DOCS=on: Build and/or install documentation
EXTRAS=on: Extra clang tools
LIT=on: Install lit and FileCheck test tools
LLD=on: Install lld, the LLVM linker
LLDB=on: Install lldb, the LLVM debugger
MLIR=off: Multi-Level Intermediate Representation
PYCLANG=on: Install python bindings to libclang
====> Options available for the single BACKENDS: you have to select exactly one of them
BE_FREEBSD=off: Backends for FreeBSD architectures
BE_NATIVE=on: Backend(s) for this architecture (ARM)
BE_STANDARD=off: All non-experimental backends
===> Use 'make config' to modify these settings
---End OPTIONS List---
The RPi4B has 4 cores and I had poudriere using 4 builders
and ALLOW_MAKE_JOBS= with no explicit constraint on the make
jobs per builder, so implicitly 4. Thus it can have periods
with load averages around 16 when when things do as I said
to do. (Some ports do not limit themselves to the HWthread
count.) Result:
[54:41:45] [01] [13:40:48] Finished devel/llvm14 | llvm14-14.0.2: Success
Note that that is with 2 GiBytes of RAM per core, the
same ratio that your report indicates.
I will also report that I used a UFS context, not ZFS,
and that my patched top indicated little swap usage
during any of my "bulk -a -c" atttempt so far. (The
top tracks and reports various MaxObs???? figures,
i.e., "Maximum Observed" figures.)
My environments do have /boot/loader.conf ,
/etc/sysctl.conf , and /usr/local/etc/poudriere.conf
settings appropriate to avoiding OOM kills for long
running [but bounded duration] build activity for the
hardware that I have access to --and that is also
part of why I prefer UFS for 2 GiBytes/HWthread for
doing builds.
(I do have access to 3 systems with 4 GiBytes
per HWthread and on 2 of them I normally use
ZFS, including for build activity.)
> The build proceeds on 1 CPU only now
Such was not true of my build reported above.
Using one core at a time, the RPi4B would have
taken much longer to do the build.
> - and casual observation
> with top confirms that compilation of certain C++ files
> requires 7..8 GB of RAM.
My understanding is that such has a known status for
flang/MLIR being in use.
> If 16 of them are built concurrently,
> no wonder that there is not enough memory.
>
> Files tha crashed my compiliation:
>
> /wrkdirs/usr/ports/devel/llvm14/work/llvm-project-14.0.4.src/flang/lib/Evaluate/tools.cpp
> /wrkdirs/usr/ports/devel/llvm14/work/llvm-project-14.0.4.src/clang/lib/Sema/SemaOpenMP.cpp
> /wrkdirs/usr/ports/devel/llvm14/work/llvm-project-14.0.4.src/flang/lib/Semantics/check-omp-structure.cpp
> /wrkdirs/usr/ports/devel/llvm14/work/llvm-project-14.0.4.src/flang/lib/Evaluate/fold-integer.cpp
You do not report the related console messages related (or
dmsg -a output or /var/log/messages content). I can think
of multiple distinct possibilities for the reports that
would have different implications. (But such need not be
of any importance for you.)
I see 3 /flang/ paths in the list of 4 paths, not surprising.
(Your /usr/ports/ context is more recent than mine.)
> Sure, poudrière could get Kubernetes-like capabilities to control
> resources during the build one day, but aren't amounts of memory
> needed to build the compiler excessive a bit?
"the compiler" ignores a fair mount of what is built.
Part of what I'm suggesting above is to configure
the devel/llvm14 build to build fewer compilers/toolchains
(no flang, no MLIR). You might not want, say, EXTRAS, or
some other things I have "on". BE_NATIVE may not fit
your usage context well but BE_FREEBSD could be considered.
And so on.
Hopefully my notes above are of some use unless
you are required to use the default OPTIONS.
Side note:
The RPi4B bulk actually built llvm13 and rust with
a vast part of the time frames overlapping and other
things going through the other 2 builders.
It later worked on llvm12, ghc, and suitesparse-graphblas
with the vast part of the time being overlapped. Again:
all 4 builders doing something. (suitesparse-graphblas
does not last as many hours as the other 2.)
No kernel OOM process kills. Under 300 MiByte swap used
at any point.
(ghc's haddock runs out of 32-bit process memory in
a normal core-dump way, towards the end the ghc build,
so ghc failed. But the build had been going for most
of 24 hours before that point, as had llvm12.)
===
Mark Millard
marklmi at yahoo.com