Re: RPi4B buildworld buildkernel times for already installed system being -mcpu=cortex-a72 vs. -mcpu=cortex-a53 based

Mark Millard via freebsd-arm <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On 2020-Sep-20, at 18:40, Mark Millard <[email protected]> wrote:

> On 2020-Sep-20, at 18:32, Mark Millard <marklmi at yahoo.com> wrote:
> 
>> The following are from scratch buildworld buildkernel rebuilds
>> on a RPi4B (head -r363590 context).
>> 
>> ENVIRONMENT: -mcpu=cortex-a72 based world and kernel running already, RPi4B @ 2G Hz,
>> Restricted to 3 GiByte RAM, -j3:
>> 
>> World built in 37469 seconds, ncpu: 4, make -j3
>> Kernel(s)  GENERIC-NODBG built in 2474 seconds, ncpu: 4, make -j3
>> 
>> ENVIRONMENT: -mcpu=cortex-a53 based kernel running, RPi4B @ 2G Hz,
>> Restricted to 3 GiByte RAM, -j3:
>> 
>> World built in 44034 seconds, ncpu: 4, make -j3
>> Kernel(s)  GENERIC-NODBG built in 2895 seconds, ncpu: 4, make -j3
>> 
>> So a little under 11.1 hr total vs. a little over 13.0 hr total,
>> a somewhat over 50 min improvement.
> 
> "a somewhat over 1hr 50 min improvement" is what I should have
> managed to type.
> 
>> (A xhci patch finally allowed me to boot -mcpu=cortex-a72
>> based kernel builds on the RPi4B: The xhci event ring
>> initialization code was missing a usb_bus_mem_flush_all
>> call previously.)
>> 
>> 
>> Supporting details:
>> 
>> (e-mail based spacing changes expected below)
>> 
>> # diff -u ~/src.configs/src.conf.cortexA72-clang-bootstrap.aarch64-host ~/src.configs/src.conf.cortexA53-clang-bootstrap.aarch64-host
>> --- /root/src.configs/src.conf.cortexA72-clang-bootstrap.aarch64-host	2020-03-13 22:29:25.470155000 -0700
>> +++ /root/src.configs/src.conf.cortexA53-clang-bootstrap.aarch64-host	2020-03-13 22:29:25.469455000 -0700
>> @@ -49,9 +49,9 @@
>> # Use of the .clang 's here avoids
>> # interfering with other C<?>FLAGS
>> # usage, such as ?= usage.
>> -CFLAGS.clang+= -mcpu=cortex-a72
>> -CXXFLAGS.clang+= -mcpu=cortex-a72
>> -CPPFLAGS.clang+= -mcpu=cortex-a72
>> -ACFLAGS.arm64cpuid.S+=  -mcpu=cortex-a72+crypto
>> -ACFLAGS.aesv8-armx.S+=  -mcpu=cortex-a72+crypto
>> -ACFLAGS.ghashv8-armx.S+=        -mcpu=cortex-a72+crypto
>> +CFLAGS.clang+= -mcpu=cortex-a53
>> +CXXFLAGS.clang+= -mcpu=cortex-a53
>> +CPPFLAGS.clang+= -mcpu=cortex-a53
>> +ACFLAGS.arm64cpuid.S+=  -mcpu=cortex-a53+crypto
>> +ACFLAGS.aesv8-armx.S+=  -mcpu=cortex-a53+crypto
>> +ACFLAGS.ghashv8-armx.S+=        -mcpu=cortex-a53+crypto
>> 
>> 
>> The .amd64-host files are similar for doing cross builds.
>> 
>> I also use += in secure/lib/libcrypto/Makefile :
>> 
>> # svnlite diff /usr/src/secure/lib/libcrypto/Makefile
>> Index: /usr/src/secure/lib/libcrypto/Makefile
>> ===================================================================
>> --- /usr/src/secure/lib/libcrypto/Makefile	(revision 365919)
>> +++ /usr/src/secure/lib/libcrypto/Makefile	(working copy)
>> @@ -20,7 +20,7 @@
>> SRCS+=	o_str.c o_time.c threads_pthread.c uid.c
>> .if defined(ASM_aarch64)
>> SRCS+=	arm64cpuid.S armcap.c
>> -ACFLAGS.arm64cpuid.S=	-march=armv8-a+crypto
>> +ACFLAGS.arm64cpuid.S+=	-march=armv8-a+crypto
>> .elif defined(ASM_amd64)
>> SRCS+=	x86_64cpuid.S
>> .elif defined(ASM_arm)
>> @@ -35,7 +35,7 @@
>> SRCS+=	aes_cbc.c aes_cfb.c aes_ecb.c aes_ige.c aes_misc.c aes_ofb.c aes_wrap.c
>> .if defined(ASM_aarch64)
>> SRCS+=	aes_core.c aesv8-armx.S vpaes-armv8.S
>> -ACFLAGS.aesv8-armx.S=	-march=armv8-a+crypto
>> +ACFLAGS.aesv8-armx.S+=	-march=armv8-a+crypto
>> .elif defined(ASM_amd64)
>> SRCS+=	aes_core.c aesni-mb-x86_64.S aesni-sha1-x86_64.S aesni-sha256-x86_64.S
>> SRCS+=	aesni-x86_64.S vpaes-x86_64.S
>> @@ -242,7 +242,7 @@
>> SRCS+=	ofb128.c wrap128.c xts128.c
>> .if defined(ASM_aarch64)
>> SRCS+=	ghashv8-armx.S
>> -ACFLAGS.ghashv8-armx.S=	-march=armv8-a+crypto
>> +ACFLAGS.ghashv8-armx.S+=	-march=armv8-a+crypto
>> .elif defined(ASM_amd64)
>> SRCS+=	aesni-gcm-x86_64.S ghash-x86_64.S
>> .elif defined(ASM_arm)
>> 
>> The RPi4B is using:
>> 
>> over_voltage=6
>> arm_freq=2000
>> 
>> and was booted via uefi/ACPI.
>> 
>> I have not repeated the -j4 or other -jN comparisons that
>> I reported in the past. The -mcpu=cortex-a53 figures are
>> from the past.

The following new timing is based on head -r365932 rebuilding
itself where the 8 GiByte RPi4B config.txt ended with:

over_voltage=6
arm_freq=2000
sdram_freq_min=3200

and the boot was via u-boot, no RAM restriction. (The
sdram_freq_min assignment does not seem to do anything
for rpi4-uefi-devel v1.20 uefi/ACPI based booting.)
/etc/sysctl.conf has: dev.cpu.0.freq=2000 . No use of
powerd or other such.


ENVIRONMENT: -mcpu=cortex-a72 based world and kernel running already,
8 GiBYte RPi4B @ 2G Hz with sdram_freq_min=3200, u-boot style boot, -j3:

World built in 31852 seconds, ncpu: 4, make -j3
Kernel(s)  GENERIC-NODBG built in 2059 seconds, ncpu: 4, make -j3

So somewhat under 9.5 hr overall.


That means somewhat over 3.5 hours faster than a -mcpu=cortex-a53
based system without sdram_freq_min=3200 using 3 GiByte RAM
but still RPi4B @ 2G Hz (uefi/ACPI boot):

World built in 44034 seconds, ncpu: 4, make -j3
Kernel(s)  GENERIC-NODBG built in 2895 seconds, ncpu: 4, make -j3

(Same as reported in prior messages.)

But the prior -r362590 vs. the now -r363932 means there is more varying
than in my previous comparisons. For example, clang 10 vs. clang 11.

I'm probably going to run a -j4 build to see how it compares in
this context.

I've not run a default arm-freq/sdram_freq_min/dev.cpu.0.freq buildworld
buildkernel in a long time and so do not have reasonable comparison
figures relative to that type of context. I do not plan on such an
experiment.


I'll note that I run these tests with a monitor connected that sits
with a static login prompt display after booting. I do not not test
with X11 or other use that might significantly compete for more power.
The serial port console is usually used. I have used ssh sometimes in
the past.

~/src.configs/src.conf.cortexA72-clang-bootstrap.aarch64-host is still
unchanged:

# more ~/src.configs/src.conf.cortexA72-clang-bootstrap.aarch64-host 
TO_TYPE=aarch64
#
KERNCONF=GENERIC-NODBG
TARGET=arm64
.if ${.MAKE.LEVEL} == 0
TARGET_ARCH=${TO_TYPE}
.export TARGET_ARCH
.endif
#
#WITH_CROSS_COMPILER=
WITH_SYSTEM_COMPILER=
WITH_SYSTEM_LINKER=
#
WITH_LIBCPLUSPLUS=
#WITH_LLD_BOOTSTRAP=
WITHOUT_BINUTILS_BOOTSTRAP=
WITH_ELFTOOLCHAIN_BOOTSTRAP=
#Disables avoiding bootstrap: WITHOUT_LLVM_TARGET_ALL=
WITH_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_BOOTSTRAP=
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=
#
#
NO_WERROR=
#WERROR=
MALLOC_PRODUCTION=
#
# 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-a72
CXXFLAGS.clang+= -mcpu=cortex-a72
CPPFLAGS.clang+= -mcpu=cortex-a72
ACFLAGS.arm64cpuid.S+=  -mcpu=cortex-a72+crypto
ACFLAGS.aesv8-armx.S+=  -mcpu=cortex-a72+crypto
ACFLAGS.ghashv8-armx.S+=        -mcpu=cortex-a72+crypto

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

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-arm
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.