Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jan 2021 18:33:58 -0800
From:      bob prohaska <fbsd@www.zefox.net>
To:        Mark Millard <marklmi@yahoo.com>
Cc:        Current FreeBSD <freebsd-current@freebsd.org>, freebsd-arm@freebsd.org
Subject:   Re: Silent hang in buildworld, was Re: Invoking -v for clang during buildworld
Message-ID:  <20210121023358.GA58854@www.zefox.net>
In-Reply-To: <A6150F56-062F-4582-853A-319C1EE4DDCB@yahoo.com>
References:  <C75D3D9C-4284-4BE3-B2CD-5DC6BBB60843@yahoo.com> <20210117174006.GA30728@www.zefox.net> <85889EAE-F579-4220-9185-944D9AA5075A@yahoo.com> <20210118015009.GA31353@www.zefox.net> <60CCCDE8-E3D3-4920-9FC0-A945330F6830@yahoo.com> <A0427375-5515-4D3C-AF2A-915E60A836A7@yahoo.com> <00104FAD-E32B-4DDE-80DD-FCEF14CEC06B@yahoo.com> <D9878BB6-2693-4A04-9E1C-126E0D378F7B@yahoo.com> <056845FE-7131-4951-96AF-805D07F7BE0D@yahoo.com> <A6150F56-062F-4582-853A-319C1EE4DDCB@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jan 20, 2021 at 09:51:33AM -0800, Mark Millard wrote:
> On 2021-Jan-19, at 17:42, Mark Millard <marklmi at yahoo.com> wrote:
> 
> > On 2021-Jan-18, at 21:12, Mark Millard <marklmi at yahoo.com> wrote:
> > 
> >> On 2021-Jan-18, at 19:19, Mark Millard <marklmi at yahoo.com> wrote:
> >> 
> >>> . . .
> >>>> FYI: I re-established my access to a RPi2B V1.1 and made
> >>>> it report: "maximum recommended amount (468832 pages)"
> >>>> 
> >>>> (The figure can vary some from release to release.)
> >>>> 
> >>>> 468832*4096 == 1920335872 or a little over 1831 MiBytes
> >>>> 
> >>>> For the 4096 Byte pages, that means that the following from
> >>>> gpart fits without complaint (size is in blocks, not pages):
> >>>> 
> >>>> 413140992    3686400  da0p2  freebsd-swap  (1.8G)
> >>>> 
> >>>> 3686400*512 is a little over 1.75 GiByte or 1800 MiByte. So
> >>>> I've left some room below 1831 MiBytes, but not a lot.
> >>>> 
> >>>> FYI about my build experiment that is running:
> >>>> 
> >>>> # sysctl hw.physmem
> >>>> hw.physmem: 979042304
> >>>> 
> >>>> which, in recent times for armv7, I can (and did) set in
> >>>> /boot/loader.conf on a faster cortex-A7 SBC (that can boot
> >>>> the same media but has more RAM).
> >>>> 
> >>>> So I tried a -j4 build, but with LDFLAGS.lld+= -Wl,--threads=1
> >>>> in use and my other particular src.conf/make.conf like content
> >>>> (so the builds do likely differ from yours in various ways).
> >>>> My build is producing a non-debug build (but with -g symbols).
> >>>> Somewhat after where your buildworld.log stops, my odd variant
> >>>> of top was reporting:
> >>>> 
> >>>> Mem:  . . . , 753672Ki MaxObsActive, 200412Ki MaxObsWired, 892732Ki MaxObs(Act+Wir)
> >>>> Swap: . . . , 145832Ki MaxObsUsed
> >>>> 
> >>>> and top was also showing lots of processes as having "0B" RES
> >>>> in STATE "wait" or "nanslp" (so, apparently swapped out, not paging).
> >>>> ("MaxObs" is short for "maximum observed".)
> >>>> 
> >>>> For comparison, your swapscript.log reported a maximum total of
> >>>> 346192 KiBytes "Used" for swap, about 98% into the log file.
> >>>> 
> >>>> (Time goes by . . .)
> >>>> 
> >>>> It finished with building libllvm and is part way into building
> >>>> libclang. This is probably well past where your hangup happened,
> >>>> given that your published buildworldlog file stopped with
> >>>> libllvm's Target/ARM/ARMMCInstLower.o . My odd top now shows:
> >>>> 
> >>>> Mem:  . . . , 753672Ki MaxObsActive, 200412Ki MaxObsWired, 892732Ki MaxObs(Act+Wir)
> >>>> Swap: . . . , 392328Ki MaxObsUsed
> >>>> 
> >>>> The build continues to run. I'll let you know how it goes.
> >>>> . . .
> >>> 
> >>> Just after libclang finished my odd top showed:
> >>> 
> >>> Mem:  . . . , 753672Ki MaxObsActive, 200412Ki MaxObsWired, 892736Ki MaxObs(Act+Wir)
> >>> Swap: . . . , 537588Ki MaxObsUsed
> >>> 
> >>> After liblldb:
> >>> 
> >>> Mem:  . . . , 753672Ki MaxObsActive, 200412Ki MaxObsWired, 899276Ki MaxObs(Act+Wir)
> >>> Swap: . . . , 537588Ki MaxObsUsed
> >>> 
> >>> Much later, after the lldb program had been built:
> >>> 
> >>> Mem:  . . . , 765700Ki MaxObsActive, 200412Ki MaxObsWired, 954116Ki MaxObs(Act+Wir)
> >>> Swap: . . . , 537588Ki MaxObsUsed
> >>> 
> >>>>>> World build completed on Mon Jan 18 19:10:08 PST 2021
> >>>>>> World built in 72960 seconds, ncpu: 4, make -j4
> >>> 
> >>> This was building from scratch what was already installed:
> >>> 
> >>> # ~/fbsd-based-on-what-freebsd-main.sh 
> >>> merge-base: 818390ce0ca539300dd15d7a817784f1e3f7a9b8
> >>> merge-base: CommitDate: 2021-01-13 21:27:44 +0000
> >>> 4180404713ec (HEAD -> mm-src) mm-src snapshot for mm's patched build in git context.
> >>> 818390ce0ca5 (freebsd/main, freebsd/HEAD, pure-src, main) arm64: fix early devmap assertion
> >>> FreeBSD OPiP2E_RPi2v11 13.0-CURRENT FreeBSD 13.0-CURRENT mm-src-c255938-g4180404713ec GENERIC-NODBG  arm armv7 1300135 1300135
> >>> 
> >>> This suggests that you should be able to build on the RPi2B v1.1,
> >>> using -j4, with appropriate configuration for what and how to build.
> >>> 
> >>> 
> >>> It is now building the matching kernel, my GENERIC-NODBG style.
> >> 
> >> Done:
> >> 
> >>>>> Kernel build for GENERIC-NODBG completed on Mon Jan 18 20:33:26 PST 2021
> >>>>> Kernel(s)  GENERIC-NODBG built in 4998 seconds, ncpu: 4, make -j4
> >> 
> >> So, World+Kernel in somewhat under 22 hours.
> >> 
> >> The "MaxObs*" figures were unchanged, so:
> >> 
> >> Mem:  . . . , 765700Ki MaxObsActive, 200412Ki MaxObsWired, 954116Ki MaxObs(Act+Wir)
> >> Swap: . . . , 537588Ki MaxObsUsed
> >> 
> >> This suggests that, for now, 800 MiByte of swap would be something
> >> more than 1.5 times what it actually used and 1050 MiBytes would
> >> be something like 2.0 times what it actually used, so leaving some
> >> notable margin for variations in peek usage, at least when linker
> >> threading is avoided.
> >> 
> >> 
> >> 
> >> As for what I used to control "what and how to build" . . .
> >> 
> >> # more ~/sys_build_scripts.armv7-host/make_armv7_nodebug_clang_bootstrap-armv7-host.sh 
> >> kldload -n filemon && \
> >> script ~/sys_typescripts/typescript_make_armv7_nodebug_clang_bootstrap-armv7-host-$(date +%Y-%m-%d:%H:%M:%S) \
> >> env __MAKE_CONF="/root/src.configs/make.conf" SRCCONF="/dev/null" SRC_ENV_CONF="/root/src.configs/src.conf.armv7-clang-bootstrap.armv7-host" \
> >> WITH_META_MODE=yes \
> >> WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x42000000" \
> >> MAKEOBJDIRPREFIX="/usr/obj/armv7_clang/arm.armv7" \
> >> make $*
> >> 
> >> (In my context, UBLDR_LOADADDR is ignored by anything that
> >> can not use the figure given. So I've no bothered to be
> >> more selective about having it in the armv7 builds.)
> >> 
> >> # more ~/src.configs/make.conf
> >> LDFLAGS.lld+= -Wl,--threads=1
> >> 
> >> # more ~/src.configs/src.conf.armv7-clang-bootstrap.armv7-host
> >> TO_TYPE=armv7
> >> #
> >> KERNCONF=GENERIC-NODBG
> >> TARGET=arm
> >> .if ${.MAKE.LEVEL} == 0
> >> TARGET_ARCH=${TO_TYPE}
> >> .export TARGET_ARCH
> >> .endif
> >> #
> >> #WITH_CROSS_COMPILER=
> >> WITH_SYSTEM_COMPILER=
> >> WITH_SYSTEM_LINKER=
> >> #
> >> WITH_LIBCPLUSPLUS=
> >> WITHOUT_BINUTILS_BOOTSTRAP=
> >> WITH_ELFTOOLCHAIN_BOOTSTRAP=
> >> #Disables avoiding bootstrap: WITHOUT_LLVM_TARGET_ALL=
> >> WITHOUT_LLVM_TARGET_AARCH64=
> >> WITH_LLVM_TARGET_ARM=
> >> WITHOUT_LLVM_TARGET_MIPS=
> >> WITHOUT_LLVM_TARGET_POWERPC=
> >> WITHOUT_LLVM_TARGET_RISCV=
> >> WITHOUT_LLVM_TARGET_X86=
> >> WITH_CLANG=
> >> WITH_CLANG_IS_CC=
> >> WITH_CLANG_FULL=
> >> WITH_CLANG_EXTRAS=
> >> WITH_LLD=
> >> WITH_LLD_IS_LD=
> >> WITHOUT_BINUTILS=
> >> #
> >> WITH_LLDB=
> >> #
> >> WITH_BOOT=
> >> WITHOUT_LIB32=
> >> #
> >> #
> >> WITHOUT_WERROR=
> >> #WERROR=
> >> MALLOC_PRODUCTION=
> >> WITH_MALLOC_PRODUCTION=
> >> WITHOUT_ASSERT_DEBUG=
> >> WITHOUT_LLVM_ASSERTIONS=
> >> #
> >> # Avoid stripping but do not control host -g status as well:
> >> DEBUG_FLAGS+=
> >> #
> >> WITH_REPRODUCIBLE_BUILD=
> >> WITH_DEBUG_FILES=
> >> #
> >> # Use of the .clang 's here avoids
> >> # interfering with other C<?>FLAGS
> >> # usage, such as ?= usage.
> >> CFLAGS.clang+= -mcpu=cortex-a7
> >> CXXFLAGS.clang+= -mcpu=cortex-a7
> >> CPPFLAGS.clang+= -mcpu=cortex-a7
> >> 
> >> (I do not claim that you would want WITH_REPRODUCIBLE_BUILD .
> >> I just happen to have been experimenting with it. You might
> >> not want to be explicit about the cpu to target. You might
> >> not want WITH_CLANG_EXTRAS .)
> >> 
> >> # more /usr/fbsd/mm-src/sys/arm/conf/GENERIC-NODBG
> >> include "GENERIC"
> >> 
> >> ident   GENERIC-NODBG
> >> 
> >> makeoptions     DEBUG=-g                # Build kernel with gdb(1) debug symbols
> >> 
> >> options         AUDIT                   # Not enabled by default in armv7/v6 kernels
> >>                                       # Enabled here to allow kyua test runs to
> >>                                       # possibly report auditing works.
> >> 
> >> options         ALT_BREAK_TO_DEBUGGER
> >> 
> >> options         KDB                     # Enable kernel debugger support
> >> 
> >> # For minimum debugger support (stable branch) use:
> >> options         KDB_TRACE               # Print a stack trace for a panic
> >> options         DDB                     # Enable the kernel debugger
> >> 
> >> # Extra stuff:
> >> #options        VERBOSE_SYSINIT=0       # Enable verbose sysinit messages
> >> #options        BOOTVERBOSE=1
> >> #options        BOOTHOWTO=RB_VERBOSE
> >> options         ALT_BREAK_TO_DEBUGGER   # Enter debugger on keyboard escape sequence
> >> options         KLD_DEBUG
> >> #options        KTR
> >> #options        KTR_MASK=KTR_TRAP
> >> ##options       KTR_CPUMASK=0xF
> >> #options        KTR_VERBOSE
> >> 
> >> # Disable any extra checking for. . .
> >> nooptions       INVARIANTS              # Enable calls of extra sanity checking
> >> nooptions       INVARIANT_SUPPORT       # Extra sanity checks of internal structures, required by INVARIANTS
> >> nooptions       WITNESS                 # Enable checks to detect deadlocks and cycles
> >> nooptions       WITNESS_SKIPSPIN        # Don't run witness on spinlocks for speed
> >> nooptions       DEADLKRES               # Enable the deadlock resolver
> >> nooptions       MALLOC_DEBUG_MAXZONES   # Separate malloc(9) zones
> >> nooptions       DIAGNOSTIC
> >> nooptions       BUF_TRACKING
> >> nooptions       FULL_BUF_TRACKING
> >> nooptions       USB_DEBUG
> >> nooptions       USB_REQ_DEBUG
> >> nooptions       USB_VERBOSE
> >> 
> >> The /boot/loader.conf file and the /etc/sysctl.conf files
> >> both contained:
> >> 
> >> vm.pageout_oom_seq=120
> >> vm.pfault_oom_attempts=-1
> >> 
> >> (The hw.physmem=979042304 in /boot/loader.conf was very-special,
> >> to better approximate your environment. I also controlled the
> >> cpu frequency used via a line in /etc/sysctl.conf . I do not
> >> bother with such non-default frequency usage [or related settings]
> >> for RPi*'s with the pre-RPi4B style power connections but do
> >> control the frequency for the OPi+2E.)
> > 
> > The following had been left implicit about my context and
> > how it manages memory space use.
> > 
> > I'll note that I do not use tmpfs or other such memory based
> > file system techniques that could compete for RAM/swap. What
> > is in use for the only file system involved is just the
> > root file system:
> > 
> > # df -m
> > Filesystem            1M-blocks  Used  Avail Capacity  Mounted on
> > /dev/gpt/BPIM3root       195378 63940 115808    36%    /
> > devfs                         0     0      0   100%    /dev
> > 
> > It is a USB SSD. The swap partition is also on that same
> > media. (The BPIM3 based name dates back to before the
> > BPI-M3 power connection failed and I switched to the
> > OPi+2E.)
> > 
> > I'll note that I've started a new from-scratch build without
> > LDFLAGS.lld+= -Wl,--threads=1 . So at some point I'll have
> > information about how much of a difference (+/-) in swap
> > usage it actually made for with vs. without, if any.
> 
> Looks like, for such 4-core contexts, that bothering
> with LDFLAGS.lld+= -Wl,--threads=1 is typically a
> waste of effort for both swap usage and time . . .
> 
> With LDFLAGS.lld+= -Wl,--threads=1 :
> 
> Mem:  . . . , 765700Ki MaxObsActive, 200412Ki MaxObsWired, 954116Ki MaxObs(Act+Wir)
> Swap: . . . , 537588Ki MaxObsUsed
> 
> without:
> 
> Mem:  . . ., 715756Ki MaxObsActive, 194816Ki MaxObsWired, 903132Ki MaxObs(Act+Wir)
> Swap: . . ., 557208Ki MaxObsUsed
> 
> 
> With LDFLAGS.lld+= -Wl,--threads=1 :
> 
> World built in 72960 seconds, ncpu: 4, make -j4
> Kernel(s)  GENERIC-NODBG built in 4998 seconds, ncpu: 4, make -j4
> 
> without:
> 
> World built in 72804 seconds, ncpu: 4, make -j4
> Kernel(s)  GENERIC-NODBG built in 4824 seconds, ncpu: 4, make -j4
> 
> 
> So, just not that much of a difference compared to the overall
> sizes or times involved.
> 
A first OS build/install cycle on armv7 (RPI2) using meta mode 
finished without trouble.  Sources were a day or two newer than 
the kernel, -j4 buildworld took 157121 seconds. Peak swap use 
was half again as much at 732932. No constraints on ld.lld 
beyond defaults. I'm a little surprised at the extreme slowness,
but this was a fully-debug'd-current kernel and sources were
slightly newer than existing world.

In case there's interest I've put what log files I could gather at
http://www.zefox.net/~fbsd/rpi2/buildworld/main-c950-gff1a307801/

Thanks for your attention and help!!

bob prohaska

 
> ===
> Mark Millard
> marklmi at yahoo.com
> ( dsl-only.net went
> away in early 2018-Mar)
> 
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20210121023358.GA58854>