0

I'm trying to understand the CPU (and possibly kernel) requirements for a successful live migration of a KVM VM (OpenWRT) on aarch64 in order to decide on which SBC I should get as a second host.

My primary host is an ODROID-N2 (Amlogic S922X, 4 x Cortex-A73 + 2 x Cortex-A53) running Arch Linux on a very recent mainline kernel. The machines are managed by libvirt. Due to the heterogeneous architecture on this host I had to pin two Cortex-A53 vCPUs to the two cores that model, otherwise the VM wouldn't start.

I've also got an ODROID-C2 (Amlogic S905, 4 x Cortex-A53), also running Arch Linux. However, when I bought it I overlooked that its cores don't implement the AES crypto extensions. The cores also have a few more differences:

/proc/cpuinfo on ODROID-N2

processor   : 0
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 1
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 2
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd09
CPU revision    : 2

processor   : 3
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd09
CPU revision    : 2

processor   : 4
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd09
CPU revision    : 2

processor   : 5
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd09
CPU revision    : 2

/proc/cpuinfo on ODROID-C2:

processor   : 0
BogoMIPS    : 48.00
Features    : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 1
BogoMIPS    : 48.00
Features    : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 2
BogoMIPS    : 48.00
Features    : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 3
BogoMIPS    : 48.00
Features    : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

The qemu documentation states that (unlike on x86) the CPU model always has to be passed through from the host. (This is why I had to pin the vCPUs: when I didn't do it, qemu/libvirt/the kernel would try to run vCPUs on random cores and fail most of the time, due to that reason.) There are some features that can be toggled (sve128, etc) but those don't map to the missing flags in cpuinfo.

So I can't just deactivate features on one host or emulate them on another. The cores have to be identical.

My question is, how similar do the cores on the hosts have to be?

Would it be enough if Cortex-Axx model + cpuflags are identical on both hosts?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.