The first place to start is identifying the hardware.
Both the Raspberry Pi 4 and the Arm cloud server are running a 64-bit Linux OS.
The first command to try is uname
.
The output is similar on both machines. Your output may be slightly different depending on the version of the Linux kernel.
On each machine run the uname
command.
uname -a
For the Raspberry Pi 4, the output is:
Linux raspberrypi 5.15.30-v8+ #1536 SMP PREEMPT Mon Mar 28 13:53:14 BST 2022 aarch64 GNU/Linux
For an Oracle Cloud Ampere A1 instance, the output is:
Linux instance-20220413-2250 5.15.0-1027-oracle #33~20.04.1-Ubuntu SMP Tue Jan 10 11:17:00 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
For an AWS Graviton2 instance, the output is:
Linux ip-10-0-0-162 5.15.0-1028-aws #32-Ubuntu SMP Mon Jan 9 12:29:05 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
On each machine run the lscpu
command to list more information about the processors.
lscpu
The Raspberry Pi 4 output is below. The processor name is Cortex-A72 and there are only few flags. Also inspect the cache sizes.
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A72
Stepping: r0p3
CPU max MHz: 1800.0000
CPU min MHz: 600.0000
BogoMIPS: 108.00
L1d cache: 128 KiB
L1i cache: 192 KiB
L2 cache: 1 MiB
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Vulnerable
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm crc32 cpuid
For the AWS Graviton2 instance the processor name is Neoverse-N1. There are numerous additional flags printed which are not present on the Raspberry Pi 4, and the cache sizes are different.
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Vendor ID: ARM
Model name: Neoverse-N1
Model: 1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Stepping: r3p1
BogoMIPS: 243.75
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpui
d asimdrdm lrcpc dcpop asimddp ssbs
Caches (sum of all):
L1d: 64 KiB (1 instance)
L1i: 64 KiB (1 instance)
L2: 1 MiB (1 instance)
L3: 32 MiB (1 instance)
NUMA:
NUMA node(s): 1
NUMA node0 CPU(s): 0
Vulnerabilities:
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Retbleed: Not affected
Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Spectre v1: Mitigation; __user pointer sanitization
Spectre v2: Mitigation; CSV2, BHB
Srbds: Not affected
Tsx async abort: Not affected
Use the lshw
command to check other hardware.
If lshw
is not available on either machine install it using apt.
sudo apt-get install lshw
Run the lshw
command with sudo to get the most output.
sudo lshw
The output is long and not shown here.
The key differences are the additional hardware on the Raspberry Pi 4 for wireless and USB which are not present on Arm servers, but there are many interesting details available to study.
The next sections present some software examples to use on the Raspberry Pi 4 and the Arm cloud server.