Hey everyone,
I recently came across a very insightful post by @MasterKeyxda discussing some performance hiccups with the Ugoos AM6B, related to how the Linux scheduler handles CPU process switching and cache detection. You should check out the original post for more details.
Following his work, I ran tests on my S905x4 CPU using his script, and I’d like to share my results here and get more feedback from others.
Anectodal: Browsing around menues feel faster, youtube addon loads subscriptions and recommendations faster.
CoreELEC:~ # lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: ARM
Model name: Cortex-A55
Model: 0
Thread(s) per core: 1
Core(s) per cluster: 4
Socket(s): -
Cluster(s): 1
Stepping: r2p0
CPU(s) scaling MHz: 100%
CPU max MHz: 2004.0000
CPU min MHz: 100.0000
BogoMIPS: 48.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asim
ddp
Caches (sum of all):
L1d: 128 KiB (4 instances)
L1i: 128 KiB (4 instances)
L2: 256 KiB (4 instances)
L3: 512 KiB (1 instance)
Vulnerabilities:
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Spec store bypass: Not affected
Spectre v1: Mitigation; __user pointer sanitization
Spectre v2: Not affected
Srbds: Not affected
Tsx async abort: Not affected
CoreELEC:~ # lscpu --caches
NAME ONE-SIZE ALL-SIZE WAYS TYPE LEVEL SETS PHY-LINE COHERENCY-SIZE
L1d 32K 128K 16 Data 1 32 64
L1i 32K 128K 16 Instruction 1 32 64
L2 64K 256K 2 Unified 2 512 64
L3 512K 512K 16 Unified 3 512 64
CoreELEC:~ # lscpu --output-all -e
BOGOMIPS CPU CORE SOCKET CLUSTER NODE BOOK DRAWER L1d:L1i:L2:L3 POLARIZATION ADDRESS CONFIGURED ONLINE MHZ SCALMHZ% MAXMHZ MINMHZ MODELNAME
48.00 0 0 0 0 - - - 0:0:0:0 - - - yes 2004.0000 100% 2004.0000 100.0000 Cortex-A55
48.00 1 1 0 0 - - - 1:1:1:0 - - - yes 2004.0000 100% 2004.0000 100.0000 Cortex-A55
48.00 2 2 0 0 - - - 2:2:2:0 - - - yes 2004.0000 100% 2004.0000 100.0000 Cortex-A55
48.00 3 3 0 0 - - - 3:3:3:0 - - - yes 2004.0000 100% 2004.0000 100.0000 Cortex-A55
I’m interested in seeing if others are experiencing similar results or different results.
Script:
#!/bin/sh
(
/bin/mount -o rw,remount /flash
fdtput -p /flash/dtb.img /cpus/l3-cache0 compatible cache -t s
fdtput -p /flash/dtb.img /cpus/l3-cache0 cache-level 3 -t i
fdtput -p /flash/dtb.img /cpus/l3-cache0 cache-unified
fdtput -p /flash/dtb.img /cpus/l3-cache0 cache-size 0x80000 -t x
fdtput -p /flash/dtb.img /cpus/l3-cache0 cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/l3-cache0 cache-sets 512 -t i
fdtput -p /flash/dtb.img /cpus/l3-cache0 phandle 1113 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache0 compatible cache -t s
fdtput -p /flash/dtb.img /cpus/l2-cache0 cache-level 2 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache0 cache-size 0x10000 -t x
fdtput -p /flash/dtb.img /cpus/l2-cache0 cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache0 cache-sets 512 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache0 next-level-cache 1113 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache0 phandle 1114 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache1 compatible cache -t s
fdtput -p /flash/dtb.img /cpus/l2-cache1 cache-level 2 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache1 cache-size 0x10000 -t x
fdtput -p /flash/dtb.img /cpus/l2-cache1 cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache1 cache-sets 512 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache1 next-level-cache 1113 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache1 phandle 1115 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache2 compatible cache -t s
fdtput -p /flash/dtb.img /cpus/l2-cache2 cache-level 2 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache2 cache-size 0x10000 -t x
fdtput -p /flash/dtb.img /cpus/l2-cache2 cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache2 cache-sets 512 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache2 next-level-cache 1113 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache2 phandle 1116 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache3 compatible cache -t s
fdtput -p /flash/dtb.img /cpus/l2-cache3 cache-level 2 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache3 cache-size 0x10000 -t x
fdtput -p /flash/dtb.img /cpus/l2-cache3 cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache3 cache-sets 512 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache3 next-level-cache 1113 -t i
fdtput -p /flash/dtb.img /cpus/l2-cache3 phandle 1117 -t i
fdtput -p /flash/dtb.img /cpus/cpu@0 compatible "arm,cortex-a55" "arm,armv8" -t s
fdtput -p /flash/dtb.img /cpus/cpu@0 d-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@0 d-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@0 d-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@0 i-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@0 i-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@0 i-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@0 next-level-cache 1114 -t i
fdtput -p /flash/dtb.img /cpus/cpu@1 compatible "arm,cortex-a55" "arm,armv8" -t s
fdtput -p /flash/dtb.img /cpus/cpu@1 d-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@1 d-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@1 d-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@1 i-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@1 i-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@1 i-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@1 next-level-cache 1115 -t i
fdtput -p /flash/dtb.img /cpus/cpu@2 compatible "arm,cortex-a55" "arm,armv8" -t s
fdtput -p /flash/dtb.img /cpus/cpu@2 d-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@2 d-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@2 d-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@2 i-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@2 i-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@2 i-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@2 next-level-cache 1116 -t i
fdtput -p /flash/dtb.img /cpus/cpu@3 compatible "arm,cortex-a55" "arm,armv8" -t s
fdtput -p /flash/dtb.img /cpus/cpu@3 d-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@3 d-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@3 d-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@3 i-cache-line-size 64 -t i
fdtput -p /flash/dtb.img /cpus/cpu@3 i-cache-size 0x8000 -t x
fdtput -p /flash/dtb.img /cpus/cpu@3 i-cache-sets 32 -t i
fdtput -p /flash/dtb.img /cpus/cpu@3 next-level-cache 1117 -t i
/bin/sync
/bin/mount -o ro,remount /flash
read -p "Restart now? [Y/N]: " KEYINPUT
if [ "$KEYINPUT" != "${KEYINPUT#[Yy]}" ]; then
/sbin/reboot
fi
)
Thanks again @MasterKeyxda and @doppingkoala for getting values and the script.
Script tested so far for:
- Homatics Box R 4k Plus
- DuneHD Homatics Box R 4k Plus