Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Nov 2022 13:15:06 +0100 (CET)
From:      Ronald Klop <ronald-lists@klop.ws>
To:        Archimedes Gaviola <archimedes.gaviola@gmail.com>, Warner Losh <imp@bsdimp.com>
Cc:        Mark Millard <marklmi@yahoo.com>, freebsd-current <freebsd-current@freebsd.org>
Subject:   Re: 14.0-CURRENT failed to reclaim memory error in RPi 3B build
Message-ID:  <1722758786.127406.1667909706281@localhost>
In-Reply-To: <CANCZdfruoDPQE%2ByqebDomg8w7YKCkbFPvrPweJQUqoaOMN3rwA@mail.gmail.com>
References:  <84376CC9-B991-4BF3-AF5F-0AA09CB28339.ref@yahoo.com> <84376CC9-B991-4BF3-AF5F-0AA09CB28339@yahoo.com> <CAJFbk7FfYPSe3eF00HgDdebW70HKp5zKR0JaChTVniUDPG2qxQ@mail.gmail.com> <CA350C16-3604-4D88-9C14-040A45F6F125@yahoo.com> <CAJFbk7Hxvr9gs7GnniWtJ-QEH4yjYbB9S-vKVLjipa8v5VHa%2Bw@mail.gmail.com> <CAJFbk7GQhvgQS-23jFfFf=ershgGNKByHR8ug08Df8merwkh6Q@mail.gmail.com> <A11AA52B-BDB0-43C7-BF85-3C252B276F17@yahoo.com> <CAJFbk7HnFTdzANtdERqvgX30hcHmufAZmrNvbfEWORkUJJ7_3w@mail.gmail.com> <CAJFbk7HJ1WA5Qc0LNEZpKgv78yiM0w7ex=gjgpjjTf3chhHhiQ@mail.gmail.com> <CANCZdfruoDPQE%2ByqebDomg8w7YKCkbFPvrPweJQUqoaOMN3rwA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_127405_1504264931.1667909706277
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

 
Van: Warner Losh <imp@bsdimp.com>
Datum: dinsdag, 8 november 2022 04:28
Aan: Archimedes Gaviola <archimedes.gaviola@gmail.com>
CC: Mark Millard <marklmi@yahoo.com>, freebsd-current <freebsd-current@freebsd.org>
Onderwerp: Re: 14.0-CURRENT failed to reclaim memory error in RPi 3B build
> 
>  
>  
> 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 <marklmi@yahoo.com> 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<N, I last
>>>> 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
>  



NB: a way to put less memory pressure on it is not using -j3, but -j2 or -j1 in your make command.

Regards,
Ronald.

 
------=_Part_127405_1504264931.1667909706277
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<html><head></head><body>&nbsp;
<p><strong>Van:</strong> Warner Losh &lt;imp@bsdimp.com&gt;<br>
<strong>Datum:</strong> dinsdag, 8 november 2022 04:28<br>
<strong>Aan:</strong> Archimedes Gaviola &lt;archimedes.gaviola@gmail.com&gt;<br>
<strong>CC:</strong> Mark Millard &lt;marklmi@yahoo.com&gt;, freebsd-current &lt;freebsd-current@freebsd.org&gt;<br>
<strong>Onderwerp:</strong> Re: 14.0-CURRENT failed to reclaim memory error in RPi 3B build</p>

<blockquote style="padding-right: 0px; padding-left: 5px; margin-left: 5px; border-left: #000000 2px solid; margin-right: 0px">
<div class="MessageRFC822Viewer" id="P">
<div class="MultipartAlternativeViewer">
<div class="TextHTMLViewer" id="P.P.P">
<div>
<div>&nbsp;</div>
&nbsp;

<div class="gmail_quote">
<div class="gmail_attr">On Mon, Nov 7, 2022 at 7:40 PM Archimedes Gaviola &lt;<a href="mailto:archimedes.gaviola@gmail.com">archimedes.gaviola@gmail.com</a>&gt; wrote:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div>&nbsp;</div>
&nbsp;

<div class="gmail_quote">
<div class="gmail_attr">On Sat, Nov 5, 2022 at 5:28 PM Archimedes Gaviola &lt;<a href="mailto:archimedes.gaviola@gmail.com" target="_blank">archimedes.gaviola@gmail.com</a>&gt; wrote:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div>&nbsp;</div>

<div>
<div>&nbsp;</div>
&nbsp;

<div class="gmail_quote">
<div class="gmail_attr">On Thu, Nov 3, 2022 at 7:52 AM Mark Millard &lt;<a href="mailto:marklmi@yahoo.com" target="_blank">marklmi@yahoo.com</a>&gt; wrote:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2022-Nov-2, at 14:09, Archimedes Gaviola &lt;<a href="mailto:archimedes.gaviola@gmail.com" target="_blank">archimedes.gaviola@gmail.com</a>&gt; wrote:<br>
<br>
&gt; On Mon, Oct 31, 2022 at 1:47 PM Archimedes Gaviola &lt;<a href="mailto:archimedes.gaviola@gmail.com" target="_blank">archimedes.gaviola@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; . . .<br>
&gt;<br>
&gt; . . .<br>
&gt;<br>
&gt;<br>
&gt; Hi Mark,<br>
&gt;<br>
&gt; 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.<br>
&gt; ...<br>
&gt;<br>
&gt; llvm-tblgen -gen-asm-matcher&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenAsmMatcher.inc.d -o RISCVGenAsmMatcher.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-asm-writer&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenAsmWriter.inc.d -o RISCVGenAsmWriter.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-callingconv&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenCallingConv.inc.d -o RISCVGenCallingConv.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-compress-inst-emitter&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenCompressInstEmitter.inc.d -o RISCVGenCompressInstEmitter.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-dag-isel&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenDAGISel.inc.d -o RISCVGenDAGISel.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-disassembler&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenDisassemblerTables.inc.d -o RISCVGenDisassemblerTables.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-global-isel&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenGlobalISel.inc.d -o RISCVGenGlobalISel.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-instr-info&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenInstrInfo.inc.d -o RISCVGenInstrInfo.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-emitter&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenMCCodeEmitter.inc.d -o RISCVGenMCCodeEmitter.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-pseudo-lowering&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenMCPseudoLowering.inc.d -o RISCVGenMCPseudoLowering.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-register-bank&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenRegisterBank.inc.d -o RISCVGenRegisterBank.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-register-info&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenRegisterInfo.inc.d -o RISCVGenRegisterInfo.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-searchable-tables&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenSearchableTables.inc.d -o RISCVGenSearchableTables.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-subtarget&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenSubtargetInfo.inc.d -o RISCVGenSubtargetInfo.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt; llvm-tblgen -gen-searchable-tables&nbsp; -I /usr/src/contrib/llvm-project/llvm/include -I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV&nbsp; -d RISCVGenSystemOperands.inc.d -o RISCVGenSystemOperands.inc&nbsp; /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td<br>
&gt;<br>
&gt; 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.</blockquote>

<div>&nbsp;</div>

<div>Hi Mark,</div>

<div>&nbsp;</div>

<div>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!</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I've not done any monitoring of buildworld buildkernel build<br>
activity (RAM use, memory space use, swap partition use over<br>
time) on RPi3B class hardware in a very long time.</blockquote>

<div>&nbsp;</div>

<div>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.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Even on systems that I have monitored in more recent times,<br>
what I usually monitor tends to be builds with -jN (such as<br>
-j4 fora 4-hardware-thread system). (I once did have an<br>
example of -j3 taking less time than -j4 on a RPi4B.</blockquote>

<div>&nbsp;</div>

<div>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.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Basically, the memory subsystem can be saturated without all<br>
the cores being in use. The extra interference made things<br>
take longer.)</blockquote>

<div>&nbsp;</div>

<div>Oh I see so it's the reason.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You had listed that you were using the likes of:<br>
<br>
# cd /usr/src ; make KERNCONF=ARM TARGET_ARCH=aarch64 \<br>
buildkernel buildworld installkernel installworld distribution \<br>
DESTDIR=/home/freebsd/rpi3b<br>
<br>
I'll note that the standard order of the first 2 is:<br>
<br>
buildworld buildkernel<br>
<br>
This is because buildworld builds some software that<br>
buildkernel does not build for itself but does use.</blockquote>

<div>&nbsp;</div>

<div>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.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">There is a kernel-toolchain target for avoiding the<br>
need to do a full buildworld just to buildkernel , so:<br>
<br>
kernel-toolchain buildkernel<br>
<br>
is an expected sequence.</blockquote>

<div>&nbsp;</div>

<div>Okay I'll take note of this too.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I do not know how long a from-scratch buildworld<br>
buildkernel without a -jN takes on a RPi3B these<br>
days. If I remember right, for -jN with 1&lt;N, I last<br>
saw claims about such they were somewhere in the<br>
range 36hr..48hr.</blockquote>

<div>&nbsp;</div>

<div>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.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But I'm unsure of the specific N<br>
that was in use. Nor do I know the storage media<br>
type(s) involved, for example. I do not remember<br>
any reports for -j1.</blockquote>

<div>&nbsp;</div>

<div>I'll try this with RPi 3B. The current build that I have will be my baseline.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Use of the likes of: vm.pageout_oom_seq=120<br>
was essential to such -jN usage on a RPi3B as N<br>
gets larger. Of course, swap partition use for<br>
paging was also essential.</blockquote>

<div>&nbsp;</div>

<div>Wow, that's great! I have this vm.pageout_oom_seq=120 configured in my system now based on your previous inputs.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Likewise use of:<br>
<br>
vm.swap_enabled=0<br>
vm.swap_idle_enabled=0<br>
<br>
can be important to not losing communication<br>
with the RPi3B. Those last 2 are not tunable<br>
but are writable:<br>
<br>
# sysctl -aT | grep swap_<br>
# sysctl -aW | grep swap_<br>
vm.swap_enabled: 0<br>
. . .<br>
vm.swap_idle_enabled: 0<br>
. . .<br>
<br>
(This means that they have fewer places where<br>
assignments can be made. For example, the<br>
loader can not make the assignments.)<br>
<br>
By contrast, vm.pageout_oom_seq is both<br>
writable and tunable:<br>
<br>
# sysctl -aW | grep oom<br>
. . .<br>
vm.pageout_oom_seq: 120<br>
. . .<br>
<br>
# sysctl -aT | grep oom<br>
. . .<br>
vm.pageout_oom_seq: 120<br>
. . .<br>
<br>
(So even the loader can make such assignments.)</blockquote>

<div>&nbsp;</div>

<div>Yes, I have these two sysctl parameters configured in the system. Thanks for the details and further inputs.</div>

<div>&nbsp;</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I'll note that I've no interest in using arm hardware<br>
to build for other types of hardware. So I normally<br>
have the targeting of support for building for other<br>
architectures disabled when I build on aarch64 or<br>
armv7. (Basically, a less complete clang/clang++<br>
related toolchain ends up being built.)</blockquote>

<div>&nbsp;</div>

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

<div>&nbsp;</div>

<div>I'll provide an update here once the build is done knowing how long it takes to finish.</div>
</div>
</div>
</div>
</blockquote>

<div>&nbsp;</div>
</div>

<div class="gmail_quote">Hi Mark,</div>

<div class="gmail_quote">&nbsp;</div>

<div class="gmail_quote">With this set of build commands now,</div>

<div class="gmail_quote">&nbsp;</div>

<div class="gmail_quote"># cd /usr/src; make -j3 KERNCONF=ARM TARGET_ARCH=aarch64 buildworld kernel-toolchain buildkernel installworld installkernel distribution DESTDIR=/home/freebsd/rpi3b</div>

<div class="gmail_quote">&nbsp;</div>

<div class="gmail_quote">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.</div>

<div class="gmail_quote">...</div>

<div class="gmail_quote">swap_pager: indefinite wait buffer: bufobj: 0, blkno: 256929, size: 4096<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 3628, size: 4096<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255839, size: 40960<br>
pid 46153 (c++), jid 0, uid 0, was killed: a thread waited too long to allocate a page<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255857, size: 28672<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 3634, size: 8192<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 256037, size: 4096<br>
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 255320, size: 8192</div>
</div>
</blockquote>

<div>&nbsp;</div>

<div>This means that paging to the swap partition and/or swap file took too long (&gt; 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...</div>

<div>&nbsp;</div>

<div>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.</div>

<div>&nbsp;</div>

<div>Or.... if you can't change the disk... you need to put less memory pressure on it..</div>

<div>&nbsp;</div>

<div>Warner</div>

<div>&nbsp;</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
<br>
<br>
NB: a way to put less memory pressure on it is not using -j3, but -j2 or -j1 in your make command.<br>
<br>
Regards,<br>
Ronald.<br>
<br>
&nbsp;</body></html>
------=_Part_127405_1504264931.1667909706277--



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