Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Aug 2024 14:35:12 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        mmel@freebsd.org
Cc:        FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, FreeBSD ARM List <freebsd-arm@freebsd.org>
Subject:   Re: Any known way to build devel/llvm* ( such as devel/llvm19 ) with --threads=1 for its linker activity during the build?
Message-ID:  <EF58D898-1188-4F74-AE7F-DC100E074D50@yahoo.com>
In-Reply-To: <4b5a6fa1-3b08-4b8b-8577-c548116d2115@freebsd.org>
References:  <4FFD603F-E67C-4B62-B91B-8BE365EAA050@yahoo.com> <82E78798-C376-45C4-80FE-96AD14229419@yahoo.com> <dcfa36c0-8ba6-4e8f-937d-17a99d8b23cf@freebsd.org> <F65EFFEF-FD93-49AB-B0E0-7BF880760EA8@yahoo.com> <E8E2166F-06DD-42FF-B54E-215BC507B3C3@yahoo.com> <0b3b532c-ae94-439c-81aa-9e80a08af43f@freebsd.org> <EFEE572A-B34D-4A02-AA15-D7E15F12A826@yahoo.com> <4b5a6fa1-3b08-4b8b-8577-c548116d2115@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 5, 2024, at 08:57, meloun.michal@gmail.com wrote:

> On 05.08.2024 11:09, Mark Millard wrote:
>> On Aug 5, 2024, at 00:44, meloun.michal@gmail.com wrote:
>>>> . . .
>>> Tegra has 4 Cortex-A15 cores and 2 GB of RAM.
>> OrangePi+ 2ed: Cortex-A7 with 4 cores and 2 GiBytes of RAM.
>> I wonder if the 2483 MiBytes would end up being about the
>> same on the Tegra variation indicated.
>=20
> Yep, it must be +/-same. The 2/2 GB for userland/kernel is defined by =
HW.  Only size of shared libraries may affect (lower) usable user space =
for given program.
>>> All ports are built with default options. The only non-standard item =
is the swap size -> I have 16GB of swap on a swap partition on the SSD.
>> Wow, 16 GiBYtes of swap space for 2 GiBytes of RAM. I guess
>> when the swap is added that you get a notice-pair of the
>> structure:
>> QUOTE
>> warning: total configured swap (. . . pages) exceeds maximum =
recommended amount (. . . pages).
>> warning: increase kern.maxswzone or reduce amount of swap.
>> END QUOTE
>> with a rather large difference between the two ". . ." figures.
>> Do you make other adjustments to deal with the otherwise-reported
>> potential mistuning? It appears to make tradeoffs in the kernel
>> internal memory handling, if I understand right.
> The above message should be interpreted as: warning, the kernel may in =
word, rear case need to allocate additional
> memory when swapping some object(memory) out. This may leads to =
deadlock/panic. But again, event is this warning valid,
> resulting deadlock/panic is very rare. I newer see it in past many =
years...

Interesting.

>>> But I guess that's not important in this case.
>> At least for my context, it appears that memory allocations
>> are failing to find a big enough free area inside the
>> process's address space --without running out of system
>> RAM+SWAP space overall.
>> For the OrangePi+ 2ed ( and devel/llvm18 18.1.7 ) it was
>> during the earlier linker run for:
>> FAILED: bin/lli-child-target
>> . . .
>> LLVM ERROR: out of memory
>> Allocation failed
>> That much finished just fine on the Windows DevKit
>> 2023 used via a armv7 jail ( devel/llvm18 18.1.8_1 ).
>> The failure point was in a later link ( matching what
>> I saw via devel/llvm19 ).
>>> I just started build of llvm19 - but it takes few hours to =
complete..
>> Probably fewer hours than on the OrangePi+ 2ed but
>> more than on the Windows DevKit 2023 (if they were
>> completing, anyway).
>=20
> The native build is still running (60% in fact), arm32 jail build has =
been stopped on my Honeycomb (killed by OOM).Unfortunately this is an =
old problem and is common on all platforms. The current LLVM cannot be =
built without additional tricks on machines that have less than 2GB (RAM =
+ swap) per core.....

FYI: A small RAM+SWAP test for amd64-as-amd64 for devel/llvm18 18.1.7 . =
. .

USE_TMPFS=3Dno

Targetting BE_NATIVE without BE_AMDGPU and without MLIR. Avoiding being =
stripped.
(MLIR is resource and time expensive to build but I make no use of it.)
(I also make no use of BE_AMDGPU materials.)
(I've not been doing any cross builds in a very long time.)
(Not stripping can make for better failure reporting.)

(Leading whitespace might notn b e preserved in the copy of the diff:)
# git -C /usr/ports/ diff devel/llvm18
diff --git a/devel/llvm18/Makefile b/devel/llvm18/Makefile
index 1b1f759ba50e..779ddf3bea7e 100644
--- a/devel/llvm18/Makefile
+++ b/devel/llvm18/Makefile
@@ -87,7 +87,7 @@ CMAKE_ARGS+=3D  -DLLVM_ENABLE_TERMINFO=3DOFF
 CMAKE_ARGS+=3D   -DLLVM_VERSION_SUFFIX=3D
   OPTIONS_DEFINE=3D        BE_AMDGPU BE_WASM CLANG COMPILER_RT DOCS LLD =
STATIC_LIBS
-OPTIONS_DEFAULT=3D       BE_AMDGPU BE_WASM CLANG LLD
+OPTIONS_DEFAULT=3D       BE_WASM CLANG LLD
 OPTIONS_SINGLE=3D                BACKENDS
 OPTIONS_SINGLE_BACKENDS=3DBE_FREEBSD BE_NATIVE BE_STANDARD
 OPTIONS_EXCLUDE_armv6=3D COMPILER_RT
@@ -103,7 +103,7 @@ OPTIONS_DEFINE_powerpc=3D     GOLD
 OPTIONS_DEFINE_powerpc64=3D      GOLD
 OPTIONS_DEFINE_powerpc64le=3D    GOLD
  -OPTIONS_DEFAULT+=3D      BE_STANDARD COMPILER_RT EXTRAS LIT LLDB MLIR =
OPENMP \
+OPTIONS_DEFAULT+=3D      BE_NATIVE COMPILER_RT EXTRAS LIT LLDB OPENMP \
                        PYCLANG POLLY STATIC_LIBS
 OPTIONS_DEFAULT_amd64=3D GOLD
 OPTIONS_DEFAULT_powerpc=3D       GOLD
@@ -211,8 +211,8 @@ CONFLICTS_INSTALL=3D  ${PORTNAME}${LLVM_SUFFIX} =
${PORTNAME}${LLVM_SUFFIX}-lite
   .if defined(WITH_DEBUG)
 CMAKE_BUILD_TYPE=3D      RelWithDebInfo
-STRIP=3D
 .endif
+STRIP=3D
   PLIST_SUB+=3D    LLVM_MAJOR_MINOR=3D${LLVM_MAJOR_MINOR} \
                LLVM_MAJOR=3D${LLVM_MAJOR} \
@@ -224,10 +224,10 @@ FIRST_COMMAND=3D    =
${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
   MAN1SRCS+=3D     ${LLVM_MAN1SRCS}
  -STRIP_LIBS=3D    BugpointPasses.so \
-               LLVMHello.so \
-               ${LIBNAME}.0 \
-               libLTO.so
+#STRIP_LIBS=3D   BugpointPasses.so \
+#              LLVMHello.so \
+#              ${LIBNAME}.0 \
+#              libLTO.so
   EXTRAS_LIBS=3D   \
                libclangApplyReplacements \

Note: This amd64 testing is not using --threads=3D1 for linking.

A Hyper-V context for amd64-as-amd64 set up for small memory testing =
with 4 Hyper-V cores:

real memory  =3D 2147483648 (2048 MB)
avail memory =3D 2029309952 (1935 MB)

Swap: 3584Mi Total

So: AVAIL_RAM+SWAP =3D=3D 5519 MiBytes

Building just llvm18-18.1.7 :

[00:00:22] [01] [00:00:00] Building   devel/llvm18@default | =
llvm18-18.1.7
[00:55:27] [01] [00:55:05] Finished   devel/llvm18@default | =
llvm18-18.1.7: Success ending TMPFS: 0.00 GiB

(My poudriere-devel is patched to report the ending TMPFS figures.)

=46rom  my patched-up top's output from monitoring during the build:

Mem:  . . .                , 1462Mi MaxObsActive, 582432Ki MaxObsWired, =
1940Mi MaxObs(Act+Wir+Lndry)

Swap: 3584Mi Total , . . . , 1090Mi MaxObsUsed, 2455Mi =
MaxObs(Act+Lndry+SwapUsed), 2995Mi MaxObs(A+Wir+L+SU),
                             2996Mi (A+W+L+SU+InAct)

So, slightly under 3 GiBytes RAM+SWAP observed as used, well under 8 =
GiBytes.

3GiByte[RAM+SWAP]/4Core =3D=3D 0.75 GiByte[RAM+SWAP]/Core, well under 2 =
GiByte[RAM+SWAP]/Core.

=46rom this and the like of your OOM reporting, I get an idea how much =
MLIR, BE_AMDGPU, and BE_STANDARD contribute to the RAM+SWAP use. (I've =
not tested such directly in a long time.)


For reference:

# uname -apKU
FreeBSD 7950X3D-UFS 15.0-CURRENT FreeBSD 15.0-CURRENT #144 =
main-n271413-1f7df7570174-dirty: Sat Jul 27 16:01:52 UTC 2024     =
root@7950X3D-ZFS:/usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64=
.amd64/sys/GENERIC-NODBG amd64 amd64 1500021 1500021

# ~/fbsd-based-on-what-commit.sh -C /usr/main-src
1f7df7570174 (HEAD -> main, freebsd/main, freebsd/HEAD) LinuxKPI: move =
__kmalloc from slab.h to slab.c
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2024-07-26 11:51:04 +0000
branch: main
merge-base: 1f7df757017404011732196e65981d9325f7a89f
merge-base: CommitDate: 2024-07-26 11:51:04 +0000
n271413 (--first-parent --count for merge-base)

# ~/fbsd-based-on-what-commit.sh -C /usr/ports
4e0616a2066d (HEAD -> main, freebsd/main, freebsd/HEAD) =
graphics/libavif: drop maintainership
Author:     Jan Beich <jbeich@FreeBSD.org>
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2024-07-13 01:31:18 +0000
branch: main
merge-base: 4e0616a2066dc9e45cef47de812efdea4e09709c
merge-base: CommitDate: 2024-07-13 01:31:18 +0000
n671165 (--first-parent --count for merge-base)

Note: This /usr/ports/ is from before devel/llvm19 or =
/devel/freebsd-gcc14 . I've not synchronized this UFS environment with =
my experimention with a more recent ports vintage. devel/llvm18 is at =
18.1.7 still here.

Hyper-V is actually using the same UFS boot media as the native UFS =
FreeBSD boot does --but is using a smaller swap partition.



=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EF58D898-1188-4F74-AE7F-DC100E074D50>