From nobody Tue Nov 8 03:28:54 2022 X-Original-To: freebsd-current@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4N5tqn1P1Yz4hBcq for ; Tue, 8 Nov 2022 03:29:09 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4N5tql4Rrhz3kVw for ; Tue, 8 Nov 2022 03:29:07 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20210112.gappssmtp.com header.s=20210112 header.b=O7x2X0uB; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2a00:1450:4864:20::62e) smtp.mailfrom=wlosh@bsdimp.com; dmarc=none Received: by mail-ej1-x62e.google.com with SMTP id f27so35291282eje.1 for ; Mon, 07 Nov 2022 19:29:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20210112.gappssmtp.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WQ/qWoz8VPFACCYLrk+hT7QYhlgUObqVtYYQC7QuXfo=; b=O7x2X0uB+ui8TB0msTOuuAe/pL2ctW65h4PfXnt/f/RZ/0GGkMbgvDg5eYf1LBiNld VJkKzkW2Htk9HNFocMApYaYZYWZeq4rLBSdGFyJkGXfEUqFLXbf2RbE0AJCqUuubBbM1 Jupo9ErFkGGrZHujYiNUsS04l1equGO75eWu3NJRLlFW6IkaYiFi4SKWCGHMCMPRY33Q cX7B1bFLZwG9LtrkoveFyNDR2oG9PF/0Wo8JCFUSKvORfj3wfXCUIyW9uJikQGlztSAW 8/pLev4KbrO8MGzyewT5ovO0aW2Le90j3YPpfWW+TB3TZDXqV0z2pRmQeOpa38x3ZdzF byaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WQ/qWoz8VPFACCYLrk+hT7QYhlgUObqVtYYQC7QuXfo=; b=zgNik8QJ+psJRffskjWHEtpH7CLacLywDeuo2eEsRrdGP7HW1NOuDXOUaP4vgE4RuI tAgZsOe4M4qs+OMg042IbIKMn0biVvPG8Ls+uOd13PJbXBHLr4demSkv8GajghxdKea4 d4+Z0/NM4jK/2z78/BxCDqrfQSf0yiASCzd15txYwQf+7b1cLxqCj9tWkmsoonPhUFMf xk5O6FgoZE+Rf0+pMS7LwX9DBWSjPKG4tD6+XoOtCV1pESeBpe+R6tbsZnCZy1T0HIOJ 2WJk50r5Iy9E49Iw6rJm0kvwWyvw9SHkTNOdlLtWyZ6uOnC0bRN3CBg/uIG4Um81kJeS scMw== X-Gm-Message-State: ACrzQf0ZBYCQxsVg7kR6RncaEFpTpZNvEuPoyspv/BDzprINDGS5cEo4 sczinu10n1oB1BN63OrVYomtiWN4JB8Hfxpe30fR7Exv56k= X-Google-Smtp-Source: AMsMyM6Q6S/A3rQy6Uc1cV6+oXgb14nNSj7o15yy39/5T0rk96lCmKp29IJTJLtz4220JydIJzdv2snbJ/RF6knoN+Q= X-Received: by 2002:a17:906:3b17:b0:7ad:b645:9e3e with SMTP id g23-20020a1709063b1700b007adb6459e3emr47072928ejf.140.1667878145971; Mon, 07 Nov 2022 19:29:05 -0800 (PST) List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@freebsd.org MIME-Version: 1.0 References: <84376CC9-B991-4BF3-AF5F-0AA09CB28339.ref@yahoo.com> <84376CC9-B991-4BF3-AF5F-0AA09CB28339@yahoo.com> In-Reply-To: From: Warner Losh Date: Mon, 7 Nov 2022 20:28:54 -0700 Message-ID: Subject: Re: 14.0-CURRENT failed to reclaim memory error in RPi 3B build To: Archimedes Gaviola Cc: Mark Millard , freebsd-current Content-Type: multipart/alternative; boundary="0000000000006b79ac05eced24f7" X-Rspamd-Queue-Id: 4N5tql4Rrhz3kVw X-Spamd-Bar: -- X-Spamd-Result: default: False [-3.00 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20210112.gappssmtp.com:s=20210112]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; FREEMAIL_TO(0.00)[gmail.com]; MLMMJ_DEST(0.00)[freebsd-current@freebsd.org]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; RCVD_TLS_LAST(0.00)[]; R_SPF_NA(0.00)[no SPF record]; FREEMAIL_CC(0.00)[yahoo.com,freebsd.org]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::62e:from]; DKIM_TRACE(0.00)[bsdimp-com.20210112.gappssmtp.com:+]; TO_DN_ALL(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; FROM_HAS_DN(0.00)[]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; TAGGED_RCPT(0.00)[]; DMARC_NA(0.00)[bsdimp.com]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2] X-ThisMailContainsUnwantedMimeParts: N --0000000000006b79ac05eced24f7 Content-Type: text/plain; charset="UTF-8" On Mon, Nov 7, 2022 at 7:40 PM Archimedes Gaviola < archimedes.gaviola@gmail.com> wrote: > > > On Sat, Nov 5, 2022 at 5:28 PM Archimedes Gaviola < > archimedes.gaviola@gmail.com> wrote: > >> >> >> >> On Thu, Nov 3, 2022 at 7:52 AM Mark Millard wrote: >> >>> On 2022-Nov-2, at 14:09, Archimedes Gaviola < >>> archimedes.gaviola@gmail.com> wrote: >>> >>> > On Mon, Oct 31, 2022 at 1:47 PM Archimedes Gaviola < >>> archimedes.gaviola@gmail.com> wrote: >>> > >>> > . . . >>> > >>> > . . . >>> > >>> > >>> > Hi Mark, >>> > >>> > Just an update, as kernel and world compilation is ongoing with my >>> RPi3B system (with swap partition) is doing so far, so good. It already >>> surpassed the tough part that breaks the compilation process here. >>> > ... >>> > >>> > llvm-tblgen -gen-asm-matcher -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenAsmMatcher.inc.d -o RISCVGenAsmMatcher.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-asm-writer -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenAsmWriter.inc.d -o RISCVGenAsmWriter.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-callingconv -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenCallingConv.inc.d -o RISCVGenCallingConv.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-compress-inst-emitter -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenCompressInstEmitter.inc.d -o RISCVGenCompressInstEmitter.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-dag-isel -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenDAGISel.inc.d -o RISCVGenDAGISel.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-disassembler -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenDisassemblerTables.inc.d -o RISCVGenDisassemblerTables.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-global-isel -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenGlobalISel.inc.d -o RISCVGenGlobalISel.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-instr-info -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenInstrInfo.inc.d -o RISCVGenInstrInfo.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-emitter -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenMCCodeEmitter.inc.d -o RISCVGenMCCodeEmitter.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-pseudo-lowering -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenMCPseudoLowering.inc.d -o RISCVGenMCPseudoLowering.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-register-bank -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenRegisterBank.inc.d -o RISCVGenRegisterBank.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-register-info -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenRegisterInfo.inc.d -o RISCVGenRegisterInfo.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-searchable-tables -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenSearchableTables.inc.d -o RISCVGenSearchableTables.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-subtarget -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenSubtargetInfo.inc.d -o RISCVGenSubtargetInfo.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > llvm-tblgen -gen-searchable-tables -I >>> /usr/src/contrib/llvm-project/llvm/include -I >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV -d >>> RISCVGenSystemOperands.inc.d -o RISCVGenSystemOperands.inc >>> /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td >>> > >>> > Any thoughts why this part is quite a challenge when it comes to >>> memory usage? The other architectures do not possess such behavior... just >>> curious. >>> >> >> Hi Mark, >> >> Sorry for the late response, I got fully occupied at work for the past >> few days due to deliverables. Thanks for your feedback and further inputs! >> >> >>> I've not done any monitoring of buildworld buildkernel build >>> activity (RAM use, memory space use, swap partition use over >>> time) on RPi3B class hardware in a very long time. >>> >> >> It's alright, it so happened that I just observed that behavior on that >> particular part as it requires more memory than other architectures while >> compiling. The additional 3.5G swap partition really helps on that part >> that's why I was so happy that the compilation continued and never broke. >> Your input of having 3.5G swap allocation is very effective. >> >> Even on systems that I have monitored in more recent times, >>> what I usually monitor tends to be builds with -jN (such as >>> -j4 fora 4-hardware-thread system). (I once did have an >>> example of -j3 taking less time than -j4 on a RPi4B. >>> >> >> Wow, this is interesting this -jN. Let me explore this as well. I usually >> build kernel the old way but recently since I have to include building the >> world then I need to use the new way. >> >> >>> Basically, the memory subsystem can be saturated without all >>> the cores being in use. The extra interference made things >>> take longer.) >>> >> >> Oh I see so it's the reason. >> >> >>> You had listed that you were using the likes of: >>> >>> # cd /usr/src ; make KERNCONF=ARM TARGET_ARCH=aarch64 \ >>> buildkernel buildworld installkernel installworld distribution \ >>> DESTDIR=/home/freebsd/rpi3b >>> >>> I'll note that the standard order of the first 2 is: >>> >>> buildworld buildkernel >>> >>> This is because buildworld builds some software that >>> buildkernel does not build for itself but does use. >>> >> >> Okay this is noted, thanks for clarifying and correcting me, I really >> appreciate it. I'll reflect on the proper build sequence for much >> efficiency. >> >> >>> There is a kernel-toolchain target for avoiding the >>> need to do a full buildworld just to buildkernel , so: >>> >>> kernel-toolchain buildkernel >>> >>> is an expected sequence. >>> >> >> Okay I'll take note of this too. >> >> >>> I do not know how long a from-scratch buildworld >>> buildkernel without a -jN takes on a RPi3B these >>> days. If I remember right, for -jN with 1>> saw claims about such they were somewhere in the >>> range 36hr..48hr. >> >> >> There's an ongoing build at the moment, it's already taking 41 hours >> since I started it. I took another build when I came back home from the >> office. >> >> >>> But I'm unsure of the specific N >>> that was in use. Nor do I know the storage media >>> type(s) involved, for example. I do not remember >>> any reports for -j1. >>> >> >> I'll try this with RPi 3B. The current build that I have will be my >> baseline. >> >> Use of the likes of: vm.pageout_oom_seq=120 >>> was essential to such -jN usage on a RPi3B as N >>> gets larger. Of course, swap partition use for >>> paging was also essential. >>> >> >> Wow, that's great! I have this vm.pageout_oom_seq=120 configured in my >> system now based on your previous inputs. >> >> Likewise use of: >>> >>> vm.swap_enabled=0 >>> vm.swap_idle_enabled=0 >>> >>> can be important to not losing communication >>> with the RPi3B. Those last 2 are not tunable >>> but are writable: >>> >>> # sysctl -aT | grep swap_ >>> # sysctl -aW | grep swap_ >>> vm.swap_enabled: 0 >>> . . . >>> vm.swap_idle_enabled: 0 >>> . . . >>> >>> (This means that they have fewer places where >>> assignments can be made. For example, the >>> loader can not make the assignments.) >>> >>> By contrast, vm.pageout_oom_seq is both >>> writable and tunable: >>> >>> # sysctl -aW | grep oom >>> . . . >>> vm.pageout_oom_seq: 120 >>> . . . >>> >>> # sysctl -aT | grep oom >>> . . . >>> vm.pageout_oom_seq: 120 >>> . . . >>> >>> (So even the loader can make such assignments.) >>> >> >> Yes, I have these two sysctl parameters configured in the system. Thanks >> for the details and further inputs. >> >> >>> I'll note that I've no interest in using arm hardware >>> to build for other types of hardware. So I normally >>> have the targeting of support for building for other >>> architectures disabled when I build on aarch64 or >>> armv7. (Basically, a less complete clang/clang++ >>> related toolchain ends up being built.) >>> >> >> Ah okay, so you mean to say that you disable these other architectures by >> declaring and accomplishing it in the /etc/src.conf? >> >> I'll provide an update here once the build is done knowing how long it >> takes to finish. >> > > Hi Mark, > > With this set of build commands now, > > # cd /usr/src; make -j3 KERNCONF=ARM TARGET_ARCH=aarch64 buildworld > kernel-toolchain buildkernel installworld installkernel distribution > DESTDIR=/home/freebsd/rpi3b > > in RPi 3B, I encountered the other OOM error which is the 'thread waited > too long to allocate a page'. This occurred from every build I conducted. > Though the first error on 'failed to reclaim memory' was never experienced > again. Below are the error logs. > ... > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 256929, size: 4096 > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 3628, size: 4096 > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255839, size: 40960 > pid 46153 (c++), jid 0, uid 0, was killed: a thread waited too long to > allocate a page > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255857, size: 28672 > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 3634, size: 8192 > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 256037, size: 4096 > swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255320, size: 8192 > This means that paging to the swap partition and/or swap file took too long (> 30 seconds... that's all that indefinite means). It also means that it can't write to backing store dirty pages to give to another process... Typical reason is that the disk / flash is not responsive to writes for some reason. You'll need to find why... I'd look at trims. Or.... if you can't change the disk... you need to put less memory pressure on it.. Warner Perhaps some further tweaks are needed in the system so I set aside my RPi > 3B temporarily and switched over to my RPi 4B using the same microSD card > and USB flash drive (3.5 GB swap partition device) and the build completed > successfully. It took around 30 hours to complete. This RPi 4B has 2GB RAM > capacity while the RPi 3B has 1GB. From here, I'll continue looking further > for system tunables in RPi 3B which has lesser RAM capacity. > > Thanks and best regards, > Archimedes > > > > --0000000000006b79ac05eced24f7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Mon, Nov 7, 2022 at 7:40 PM Archim= edes Gaviola <archimedes= .gaviola@gmail.com> wrote:


On Sat, Nov 5, 2022= at 5:28 PM Archimedes Gaviola <archimedes.gaviola@gmail.com> wrote:



On Thu, Nov 3,= 2022 at 7:52 AM Mark Millard <marklmi@yahoo.com> wrote:
On 2022-Nov-2, at 14:09, Archimedes Gaviol= a <arc= himedes.gaviola@gmail.com> wrote:

> On Mon, Oct 31, 2022 at 1:47 PM Archimedes Gaviola <archimedes.gaviola@gmail= .com> wrote:
>
> . . .
>
> . . .
>
>
> Hi Mark,
>
> Just an update, as kernel and world compilation is ongoing with my RPi= 3B system (with swap partition) is doing so far, so good. It already surpas= sed the tough part that breaks the compilation process here.
> ...
>
> llvm-tblgen -gen-asm-matcher=C2=A0 -I /usr/src/contrib/llvm-project/ll= vm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d = RISCVGenAsmMatcher.inc.d -o RISCVGenAsmMatcher.inc=C2=A0 /usr/src/contrib/l= lvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-asm-writer=C2=A0 -I /usr/src/contrib/llvm-project/llv= m/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d R= ISCVGenAsmWriter.inc.d -o RISCVGenAsmWriter.inc=C2=A0 /usr/src/contrib/llvm= -project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-callingconv=C2=A0 -I /usr/src/contrib/llvm-project/ll= vm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d = RISCVGenCallingConv.inc.d -o RISCVGenCallingConv.inc=C2=A0 /usr/src/contrib= /llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-compress-inst-emitter=C2=A0 -I /usr/src/contrib/llvm-= project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV= =C2=A0 -d RISCVGenCompressInstEmitter.inc.d -o RISCVGenCompressInstEmitter.= inc=C2=A0 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-dag-isel=C2=A0 -I /usr/src/contrib/llvm-project/llvm/= include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d RIS= CVGenDAGISel.inc.d -o RISCVGenDAGISel.inc=C2=A0 /usr/src/contrib/llvm-proje= ct/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-disassembler=C2=A0 -I /usr/src/contrib/llvm-project/l= lvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d= RISCVGenDisassemblerTables.inc.d -o RISCVGenDisassemblerTables.inc=C2=A0 /= usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-global-isel=C2=A0 -I /usr/src/contrib/llvm-project/ll= vm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d = RISCVGenGlobalISel.inc.d -o RISCVGenGlobalISel.inc=C2=A0 /usr/src/contrib/l= lvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-instr-info=C2=A0 -I /usr/src/contrib/llvm-project/llv= m/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d R= ISCVGenInstrInfo.inc.d -o RISCVGenInstrInfo.inc=C2=A0 /usr/src/contrib/llvm= -project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-emitter=C2=A0 -I /usr/src/contrib/llvm-project/llvm/i= nclude -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d RISC= VGenMCCodeEmitter.inc.d -o RISCVGenMCCodeEmitter.inc=C2=A0 /usr/src/contrib= /llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-pseudo-lowering=C2=A0 -I /usr/src/contrib/llvm-projec= t/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0= -d RISCVGenMCPseudoLowering.inc.d -o RISCVGenMCPseudoLowering.inc=C2=A0 /u= sr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-register-bank=C2=A0 -I /usr/src/contrib/llvm-project/= llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -= d RISCVGenRegisterBank.inc.d -o RISCVGenRegisterBank.inc=C2=A0 /usr/src/con= trib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-register-info=C2=A0 -I /usr/src/contrib/llvm-project/= llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -= d RISCVGenRegisterInfo.inc.d -o RISCVGenRegisterInfo.inc=C2=A0 /usr/src/con= trib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-searchable-tables=C2=A0 -I /usr/src/contrib/llvm-proj= ect/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2= =A0 -d RISCVGenSearchableTables.inc.d -o RISCVGenSearchableTables.inc=C2=A0= /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-subtarget=C2=A0 -I /usr/src/contrib/llvm-project/llvm= /include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2=A0 -d RI= SCVGenSubtargetInfo.inc.d -o RISCVGenSubtargetInfo.inc=C2=A0 /usr/src/contr= ib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
> llvm-tblgen -gen-searchable-tables=C2=A0 -I /usr/src/contrib/llvm-proj= ect/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV=C2= =A0 -d RISCVGenSystemOperands.inc.d -o RISCVGenSystemOperands.inc=C2=A0 /us= r/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
>
> Any thoughts why this part is quite a challenge when it comes to memor= y usage? The other architectures do not possess such behavior... just curio= us.

Hi Mark,

S= orry for the late response, I got fully occupied at work for the past few d= ays due to deliverables. Thanks for your feedback and further inputs!
=
=C2=A0
I've not done any monitoring of buildworld buildkernel build
activity (RAM use, memory space use, swap partition use over
time) on RPi3B class hardware in a very long time.
It's alright, it so happened that I just observed that beha= vior on that particular part as it requires more memory than other architec= tures while compiling. The additional 3.5G swap partition really helps on t= hat part that's why I was so happy that the compilation continued and n= ever broke. Your input of having 3.5G swap allocation is very effective.

Even on systems that I have monitored in more recent times,
what I usually monitor tends to be builds with -jN (such as
-j4 fora 4-hardware-thread system). (I once did have an
example of -j3 taking less time than -j4 on a RPi4B.
<= br>
Wow, this is interesting this -jN. Let me explore this as wel= l. I usually build kernel the old way but recently since I have to include = building the world then I need to use the new way.
=C2=A0
Basically, the memory subsystem can be saturated without all
the cores being in use. The extra interference made things
take longer.)

Oh I see so it's the = reason.
=C2=A0
You had listed that you were using the likes of:

# cd /usr/src ; make KERNCONF=3DARM TARGET_ARCH=3Daarch64 \
buildkernel buildworld installkernel installworld distribution \
DESTDIR=3D/home/freebsd/rpi3b

I'll note that the standard order of the first 2 is:

buildworld buildkernel

This is because buildworld builds some software that
buildkernel does not build for itself but does use.
Okay this is noted, thanks for clarifying and correcting me, I= really appreciate it. I'll reflect on the proper build sequence for mu= ch efficiency.
=C2=A0
There is a kernel-toolchain target for avoiding the
need to do a full buildworld just to buildkernel , so:

kernel-toolchain buildkernel

is an expected sequence.

Okay I'll = take note of this too.
=C2=A0
I do not know how long a from-scratch buildworld
buildkernel without a -jN takes on a RPi3B these
days. If I remember right, for -jN with 1<N, I last
saw claims about such they were somewhere in the
range 36hr..48hr.

There's an ongoing bu= ild at the moment, it's already taking 41 hours since I started it. I t= ook another build when I came back home from the office.
=C2= =A0
But I'm = unsure of the specific N
that was in use. Nor do I know the storage media
type(s) involved, for example. I do not remember
any reports for -j1.

I'll try this = with RPi 3B. The current build that I have will be my baseline.
<= br>
Use of the likes of: vm.pageout_oom_seq=3D120
was essential to such -jN usage on a RPi3B as N
gets larger. Of course, swap partition use for
paging was also essential.

Wow, that= 9;s great! I have this=20 vm.pageout_oom_seq=3D120 configured in my system now based on your previous= inputs.

Likewise use of:

vm.swap_enabled=3D0
vm.swap_idle_enabled=3D0

can be important to not losing communication
with the RPi3B. Those last 2 are not tunable
but are writable:

# sysctl -aT | grep swap_
# sysctl -aW | grep swap_
vm.swap_enabled: 0
. . .
vm.swap_idle_enabled: 0
. . .

(This means that they have fewer places where
assignments can be made. For example, the
loader can not make the assignments.)

By contrast, vm.pageout_oom_seq is both
writable and tunable:

# sysctl -aW | grep oom
. . .
vm.pageout_oom_seq: 120
. . .

# sysctl -aT | grep oom
. . .
vm.pageout_oom_seq: 120
. . .

(So even the loader can make such assignments.)

Yes, I have these two sysctl parameters configured in the system. = Thanks for the details and further inputs.
=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex"> I'll note that I've no interest in using arm hardware
to build for other types of hardware. So I normally
have the targeting of support for building for other
architectures disabled when I build on aarch64 or
armv7. (Basically, a less complete clang/clang++
related toolchain ends up being built.)

Ah okay, so you mean to say that you disable these other architectures by = declaring and accomplishing it in the /etc/src.conf?

I'll provide an update here once the build is done knowing how long = it takes to finish.

=
Hi Mark,
<= br>
With this set of build commands now,

# cd /us= r/src; make -j3 KERNCONF=3DARM TARGET_ARCH=3Daarch64 buildworld kernel-tool= chain buildkernel installworld installkernel distribution DESTDIR=3D/home/f= reebsd/rpi3b

in RPi 3B, I encountered the other OOM error which is the 'threa= d waited too long to allocate a page'. This occurred from every build I= conducted. Though the first error on 'failed to reclaim memory' wa= s never experienced again. Below are the error logs.
...
swap_pager: indefinit= e wait buffer: bufobj: 0, blkno: 256929, size: 4096
swap_pager: indefini= te wait buffer: bufobj: 0, blkno: 3628, size: 4096
swap_pager: indefinit= e wait buffer: bufobj: 0, blkno: 255839, size: 40960
pid 46153 (c++), ji= d 0, uid 0, was killed: a thread waited too long to allocate a page
swap= _pager: indefinite wait buffer: bufobj: 0, blkno: 255857, size: 28672
sw= ap_pager: indefinite wait buffer: bufobj: 0, blkno: 3634, size: 8192
swa= p_pager: indefinite wait buffer: bufobj: 0, blkno: 256037, size: 4096
sw= ap_pager: indefinite wait buffer: bufobj: 0, blkno: 255320, size: 8192

This means that paging to the swap = partition and/or swap file took too long (> 30 seconds... that's all= that indefinite means). It also means that it can't write to backing s= tore dirty pages to give to another process...

Typ= ical reason is that the disk / flash is not responsive to writes for some r= eason. You'll need to find why... I'd look at trims.

=
Or.... if you can't change the disk... you need to put less = memory pressure on it..

Warner

Perhaps some further tweaks are needed in the system so= I set aside my RPi 3B temporarily and switched over to my RPi 4B using the= same microSD card and USB flash drive (3.5 GB swap partition device) and t= he build completed successfully. It took around 30 hours to complete. This = RPi 4B has 2GB RAM capacity while the RPi 3B has 1GB. From here, I'll c= ontinue looking further for system tunables in RPi 3B which has lesser RAM = capacity.

Thanks and best regards,
Archimedes


=

--0000000000006b79ac05eced24f7--