{{WarningMessage|text=This technical note was validated against specific versions of hardware and software. What is described here may not work with other versions.}}
|}
==Introduction==
Mito8M is the first DAVE Embedded Systems' product based on a core implementing the [https://en.wikipedia.org/wiki/ARM_architecture#64/32-bit_architecture ARMv8-A] architecture. TraditionallySpecifically, ARM cores that are based on 32-bit it is built upon the [https://enwww.wikipedianxp.orgcom/wikiproducts/ARM_architecture#AArch32 ARMv7processors-Aand-microcontrollers/arm-processors/i.mx-applications-processors/i.mx-8-processors/i.mx-8m-family-armcortex-a53-cortex-m4-audio-voice-video:i.MX8M NXP i.MX8M] architecture exhibit a limited RAM bandwidth even if they are coupled with 64system-on-bit witdh SDRAM banks. When dealing with computationally heavy tasks, this factor may turn out to be a severe bottleneck limiting the overall performancechip (SoC).
Beside an intrinsic increased computational power, ARMv8-A-based SoC's are expected to improve significantly RAM bandwidth as well. This technical note Technical Note (TN for short) illustrates several benchmarking tests that were describes how to run on Mito8M SoM, which is built upon [https://www.nxparmbian.com/products/processors-and-microcontrollers/arm-processors/iArmbian Buster] distribution on this platform.mx-applications-processors/i.mx-8-processors/i.mx-8m-family-armcortex-a53-cortex-m4-audio-voice-video:i.MX8M NXP i.MX8M Quad]For the sake of completeness, it is worth remembering that Armbian Buster is based on Debian 10.
==Testbed general configuration==This section illustrates To a good extent, '''Mito8M is electrically and mechanically compatible with [[:Category:AxelLite|Axel Lite]]'''. For this reason, the configuration settings common testbed used for this TN is pretty similar to all the tests performedone described [[SBCX-TN-004:_Running_Armbian_Buster_(Debian_10)|here]]. Even though the SBCX carrier board is designed to host Axel Lite, in fact, '''it supports Mito8M as well'''. [[File:SBCX-Mito8M.jpg|thumb|center|600px|Mito8M SoM on SBCX carrier board]]
====SoC and SDRAM bank organization====
{| class="wikitable"
|+
!
!
!Mito8M
!
|-
| rowspan="2" |SoC
|SoC
|NXP i.MX8M Quad
|
|-
|ARM frequency
[MHz]
|800
|
|-
| rowspan="5" |SDRAM
|Type
|LPDDR4
|
|-
|Frequency
[MHz]
|1600
|
|-
|Bus witdth
[bit]
|32
|
|-
|Theoretical bandiwidth
[Gb/s]
|102.4
|
|-
|Size
[MB]
|3072
|
|}
====Software configuration====Apart from the SoM, the most relevant difference with SBCX-TN-004 is related to the root file system. In this case, it was built for the <code>aarch64</code> architecture.
* Linux kernel: 4The root file system was stored on a partition of the microSD card inserted in the slot J26.14.98* Architecture: aarch64* GovernorThis partition is associated with the <code>/dev/mmcblk1p2</code> device file: userspace @ 800 MHz
<pre class="board-terminal">
rootarmbian@Mito8M:~# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTmmcblk0 179:0 0 7.3G 0 disk `-mmcblk0p1 179:1 0 7.3G 0 part mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk mmcblk0rpmb 179:96 0 4M 0 disk root@Mito8Mmmcblk1 179:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor128 0 14.6G 0 disk userspace|-mmcblk1p1 179:129 0 42.9M 0 part root@Mito8M`-mmcblk1p2 179:~# cat /sys/devices/system130 0 14.4G 0 part /cpu/cpu0/cpufreq/scaling_cur_freq800000
</pre>
GCC==Bootstrap process==This section shows the complete bootstrap log retrieved from the serial console. To expand the box, please click on the ''Expand'' link on the top right corner.<pre class="board-terminalmw-collapsible mw-collapsed">armbian@Mito8M:~/devel/lmbench$ gcc U-vUsing builtBoot SPL 2018.03-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch6408018-linuxg59e59e6f85-gnu/8/ltodirty (Nov 29 2019 -wrapper12:42:16 +0100)TargetPMIC: aarch64-linux-gnu PFUZE100 ID=0x10Configured withDDRINFO: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=filestart lpddr4 ddr initDRAM PHY training for 3200MTScheck ddr4_pmu_train_imem codecheck ddr4_pmu_train_imem code passcheck ddr4_pmu_train_dmem codecheck ddr4_pmu_train_dmem code passTraining PASSDRAM PHY training for 667MTScheck ddr4_pmu_train_imem codecheck ddr4_pmu_train_imem code passcheck ddr4_pmu_train_dmem codecheck ddr4_pmu_train_dmem code passTraining PASSDRAM PHY training for 3200MTScheck ddr4_pmu_train_imem codecheck ddr4_pmu_train_imem code passcheck ddr4_pmu_train_dmem codecheck ddr4_pmu_train_dmem code passTraining PASSDDRINFO:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --disable-libphobos --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnuddrphy calibration doneThread modelDDRINFO: posixddrmix config doneNormal Bootgcc version 8.3.0 (Debian 8.3.0-6)Trying to boot from MMC1</pre>
CPU: Freescale i.MX8MQ rev2.0 1300 MHz (running at 800 MHz)CPU: Industrial temperature grade (-40C to 105C)CPU Temperature test bypass!!!!CPU Temperature =(23000C), alert =Results=(85000C), critical =(95000C) at 23CReset cause: PORModel: DAVE iMX8MQ MitoDRAM: 3 GiBMMC: FSL_SDHC: 0, FSL_SDHC: 1Loading Environment from MMC... OKNo panel detected: default to HDMIDisplay: HDMI (1280x720)In: serialOut: serialThis section details the results that were achieved by the different benchmarksErr: serial
switch to partitions #0, OKmmc0(part 0) is current deviceflash target is MMC:0Net: eth0: ethernet@30be0000Fastboot: NormalNormal Bootu-boot=> edit mmcrootedit: /dev/mmcblk1p2 rootwait rwu-boot=> run net_mmcswitch to partitions #0, OKmmc1 is current deviceUsing ethernet@30be0000 deviceTFTP from server 192.168.0.23; our IP address is 192.168.0.81Filename 'mito/Image.msil'.Load address: 0x40480000Loading: #################################################################... ################################################# 1.7 MiB/sdoneBytes transferred =Testbed 23542272 (1673a00 hex)Using ethernet@30be0000 deviceTFTP from server 192.168.0.23; our IP address is 192.168.0.81Filename 'mito/imx8mq-mito.dtb'.Load address: 0x43000000Loading: ####### 619.1KiB/sdoneBytes transferred ===34885 (8845 hex)## Flattened Device Tree blob at 43000000 Booting using the fdt blob at 0x43000000 Using Device Tree in place at 0000000043000000, end 000000004300b844
====Building====<pre class="board-terminal">git clone https:Welcome to Debian GNU//github.com/jeffhammond/STREAM.gitmake</pre>Linux 10 (buster)!
[ 4.515276] systemd[1]: Set hostname to <syntaxhighlight langMito8M>.[ 4.798924] systemd[1]: File /lib/systemd/system/systemd-journald.service:12 configures an IP firewall (IPAddressDeny="makefile" lineany), but the local system does not support BPF/cgroup based firewalling.[ 4.816132] systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)[ 5.184210] random: systemd: uninitialized urandom read (16 bytes read)[ 5.198783] random: systemd: uninitialized urandom read (16 bytes read)[ 5.205577] systemd[1]: Reached target Remote File Systems.[ OK ] Reached target Remote File Systems.[ 5.228045] random: systemd: uninitialized urandom read (16 bytes read)[ 5.235082] systemd[1]: Listening on Syslog Socket.[ OK ] Listening on Syslog Socket.[ 5.252714] systemd[1]: Listening on initctl Compatibility Named Pipe.[ OK ] Listening on initctl Compatibility Named Pipe.[ 5.276050] systemd[1]: Reached target System Time Synchronized.[ OK ] Reached target System Time Synchronized.[ 5.300434] systemd[1]: Reached target Swap.[ OK ] Reached target Swap.[ OK ] Created slice system-serial\x2dgetty.slice.[ OK ] Started Forward Password Rcuests to Wall Directory Watch.[ OK ] Listening on Journal Audit Socket.[ OK ] Started Dispatch Password cts to Console Directory Watch.[ OK ] Reached target Local Encrypted Volumes.[ OK ] Listening on Journal Socket. Mounting Kernel Debug File System... Starting Load Kernel Modules... Starting Restore / save the current clock... Starting Set the console keyboard layout... Mounting Huge Pages File System...[ OK ] Reached target Paths.[ OK ] Listening on fsck to fsckd communication Socket.[ OK ] Listening on Journal Socket (/dev/log). Starting Journal Service...[ OK ] Listening on udev Kernel Socket. Mounting POSIX Message Queue File System...[ OK ] Created slice system-getty.slice.[ OK ] Created slice User and Session Slice.[ OK ] Reached target Slices. Starting Remount Root and Kernel File Systems... Starting Nameserver information manager...[ OK ] Listening on udev Control Socket. Starting udev Coldplug all Devices...[ OK ] Mounted Kernel Debug File System.[ OK ] Started Journal Service.[ OK ] Started Load Kernel Modules.[ OK ] Started Restore / save the current clock.[ OK ] Mounted Huge Pages File System.[ OK ] Mounted POSIX Message Queue File System.[ OK ] Started Set the console keyboard layout. Starting Apply Kernel Variables... Mounting Kernel Configuration File System...[ OK ] Mounted Kernel Configuration File System.[ OK ] Started Nameserver information manager.[ OK ] Started Apply Kernel Variables.[FAILED] Failed to start Remount Root and Kernel File Systems.See 'systemctl status systemd-remount-fs.service' for details. Starting Create System Users... Starting Flush Journal to Persistent Storage... Starting Load/Save Random Seed...[ 6.095290] systemd-journald[2035]: Received request to flush runtime journal from PID 1[ OK ] Started udev Coldplug all Devices. Starting Helper to synchronize boot up for ifupdown...[ OK ] Started Create System Users.[ OK ] Started Flush Journal to Persistent Storage.[ OK ] Started Load/Save Random Seed. Starting Create Static Device Nodes in /dev...[ OK ] Started Create Static Device Nodes in /dev. Starting udev Kernel Device Manager...[ OK ] Reached target Local File Systems (Pre). Mounting /tmp...[ OK ] Mounted /tmp.[ OK ] Reached target Local File Systems. Starting Set console font and keymap... Starting Create Volatile Files and Directories... Starting Armbian ZRAM config...[ OK ] Started Set console font and keymap.[ OK ] Started Create Volatile Files and Directories.[ OK ] Started Entropy daemon using the HAVEGE algorithm. Starting Update UTMP about System Boot/Shutdown...[ OK ] Started udev Kernel Device Manager.[ OK ] Started Update UTMP about System Boot/Shutdown.[ OK ] Started Armbian ZRAM config.[ OK ] Found device /dev/ttymxc0. Starting Armbian memory supported logging...[ 6.802574] imx-sdma 30bd0000.sdma: external firmware not found, using ROM firmware[ 6.804322] imx-sdma 302c0000.sdma: external firmware not found, using ROM firmware[ OK ] Found device /dev/ttyS0.[ OK ] Found device /sys/subsystem/net/devices/eth0.[ OK ] Started Helper to synchronize boot up for ifupdown. Starting Raise network interfaces...[ OK ] Started ifup for eth0.[ 7.868653] Micrel KSZ9031 Gigabit PHY 30be0000.ethernet-1:07: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr="line">30be0000.ethernet-1:07, irq=POLL)[ 7.883969] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready[ OK ] Started Raise network interfaces.[ OK ] Started Armbian memory supported logging.[ OK ] Reached target System Initialization. Starting Armbian hardware monitoring...[ 9.921638] fec 30be0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx[ 9.929973] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready[ OK ] Started Daily rotation of log files.[ OK ] Started Daily Cleanup of Temporary Directories.[ OK ] Listening on D-Bus System Message Bus Socket.[ OK ] Reached target Sockets. Starting Armbian hardware optimization...[ OK ] Started Daily man-db regeneration.[ OK ] Started Daily apt download activities.[ OK ] Started Daily apt upgrade and clean activities.[ OK ] Reached target Timers.[ OK ] Started Armbian hardware monitoring.[ OK ] Started Armbian hardware optimization.[ OK ] Reached target Basic System. Starting System Logging Service...[ OK ] Started D-Bus System Message Bus. Starting LSB: Load kernel cd to enable cpufreq scaling... Starting WPA supplicant... Starting Resets System Activity Data Collector... Starting rng-tools.service... Starting Dispatcher daemon for systemd-networkd... Starting Login Service...[ OK ] Started Regular background program processing daemon.[ 13.697766] random: crng init done[ 13.701351] random: 7 urandom warning(s) missed due to ratelimiting[ 19.415996] nr_pdflush_threads exported in /proc is scheduled for removal[ OK ] Started System Logging Service.[ OK ] Started Resets System Activity Data Collector.[ OK ] Started rng-tools.service.[ OK ] Started Login Service.[ OK ] Started WPA supplicant.[ OK ] Reached target Network. Starting chrony, an NTP client/server...[ OK ] Reached target Network is Online. Starting LSB: Advanced IEEE 802.11 management daemon... Starting Permit User Sessions... Starting OpenBSD Secure Shell server... Starting /etc/rc.local Compatibility...[ OK ] Started Unattended Upgrades Shutdown.[ OK ] Started LSB: Load kernel mcded to enable cpufreq scaling.[ OK ] Started LSB: Advanced IEEE 802.11 management daemon.[ OK ] Started Permit User Sessions.[ OK ] Started /etc/rc.local Compatibility.[ OK ] Started Getty on tty1.[ OK ] Started Serial Getty on ttymxc0.[ OK ] Started Serial Getty on ttyS0.[ OK ] Reached target Login Prompts. Starting LSB: set CPUFreq kernel parameters...[ OK ] Started chrony, an NTP client/server.[ OK ] Started LSB: set CPUFreq kernel parameters. Starting LSB: Set sysfs variables from /etc/sysfs.conf...armbian@Mito8M[ OK ] Started LSB:~Set sysfs variables from /develetc/STREAM$ cat Makefile sysfs.conf.CC = gcc[ OK ] Started OpenBSD Secure Shell server.CFLAGS = [ OK ] Started Dispatcher daemon for systemd-O2 networkd.[ OK ] Reached target Multi-fopenmpUser System.[ OK ] Reached target Graphical Interface. Starting Update UTMP about System Runlevel Changes...[ OK ] Started Update UTMP about System Runlevel Changes.
FC = gfortran-4Armbian 19.9FFLAGS = -O2 -fopenmp11.6 Buster ttymxc0
====Running====<pre class="board-terminal">armbianroot@Mito8M:~/devel/STREAM$ ./stream_c.exe # lscpu-------------------------------------------------------------Architecture: aarch64STREAM version $RevisionByte Order: 5.10 $ Little Endian-------------------------------------------------------------CPU(s): 4This system uses 8 bytes per array element.---------------On----------------------------------------------Array size = 10000000 line CPU(elementss), Offset = list: 0 -3Thread(elementss)Memory per array = 76.3 MiB (= 0.core: 1 GiB).Total memory required = 228.9 MiB Core(= 0.2 GiBs).per socket: 4Each kernel will be executed 10 times. The *best* time for each kernel Socket(excluding the first iterations) will be used to compute the reported bandwidth.-------------------------------------------------------------Number of Threads requested = 4Number of Threads counted = 4-------------------------------------------------------------Your clock granularity/precision appears to be : 1 microseconds.Each test below will take on the order of 46427 microseconds.NUMA node(= 46427 clock tickss): 1Increase the size of the arrays if this shows thatVendor ID: ARMyou are not getting at least 20 clock ticks per test.Model: 4Model name: Cortex-------------------------------------------------------------A53Stepping: r0p4WARNING -- The above is only a rough guidelineCPU max MHz: 1300.0000For best results, please be sure you know theprecision of your system timerCPU min MHz: 800.0000-------------------------------------------------------------Function Best Rate MB/s Avg time Min time Max timeCopyBogoMIPS: 677016.5 0.024010 0.023632 0.02511766L1d cache: unknown sizeScaleL1i cache: 6093.2 0.027474 0.026259 0.029142unknown sizeAddL2 cache: 5263.5 0.046008 0.045597 0.046230 unknown sizeTriadNUMA node0 CPU(s): 4820.0 0.050297 0.049793 0.050723-------------------------------------------------------------3Solution ValidatesFlags: avg error less than 1.000000e-13 on all three arrays------------------------------------------------------------- fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
*Joshua Wyatt Smith and Andrew Hamilton, [http://inspirehep.net/record/1424637/files/1719033_626-630.pdf Parallel benchmarks for ARM processors in the highenergy context]
*T Wrigley, G Harmsen and B Mellado, [http://inspirehep.net/record/1424631/files/1719033_275-280.pdf Memory performance of ARM processors and itsrelevance to High Energy Physics]
*G. T. Wrigley, R. G. Reed, B. Mellado, [http://inspirehep.net/record/1424637/files/1719033_626-630.pdf Memory benchmarking characterisation of ARM-based SoCs]