On Thu, Nov 3, 2022 at 7:52 AM Mark Millard <mark...@yahoo.com> wrote:
> On 2022-Nov-2, at 14:09, Archimedes Gaviola <archimedes.gavi...@gmail.com> > wrote: > > > On Mon, Oct 31, 2022 at 1:47 PM Archimedes Gaviola < > archimedes.gavi...@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. Thanks and best regards, Archimedes