Skip to content

TCG Performance on PPC64

mferst edited this page May 19, 2022 · 3 revisions

Test setup

The following results were obtained in the following hosts

Arch CPU
PPC64 POWER9
x86_64 E5-2687W
aarch64 Apple M1 (10 cores)

With PPC64, aarch64, and s390x guests with 2 cores and 2G of RAM, booting Fedora Cloud Base 35-1.2.

QEMU version

All tests were at commit f7f40b8198ad, with QEMU configured with:

./configure --target-list=ppc64-softmmu,aarch64-softmmu,s390x-softmmu --disable-debug-tcg --disable-tsan --disable-sanitizers --enable-lto

The following command lines were used for each architecture:

Arch QEMU Command Line
PPC64 ./qemu-system-ppc64 -name Fedora-Cloud-Base-35-1.2.ppc64le -smp 2 -m 2G -vga none -nographic -serial pipe:Fedora-Cloud-Base-35-1.2.ppc64le -monitor unix:Fedora-Cloud-Base-35-1.2.ppc64le.mon,server,nowait -device virtio-net,netdev=vmnic -netdev user,id=vmnic -cdrom fedora-cloud-init.iso -cpu POWER10 -accel tcg -device virtio-scsi-pci -drive file=Fedora-Cloud-Base-35-1.2.ppc64le.temp.qcow2,if=none,format=qcow2,id=hd0 -device scsi-hd,drive=hd0 -boot c
aarch64 ./qemu-system-aarch64 -name Fedora-Cloud-Base-35-1.2.aarch64 -smp 2 -m 2G -vga none -nographic -serial pipe:Fedora-Cloud-Base-35-1.2.aarch64 -monitor unix:Fedora-Cloud-Base-35-1.2.aarch64.mon,server,nowait -device virtio-net,netdev=vmnic -netdev user,id=vmnic -cdrom fedora-cloud-init.iso -machine virt -cpu max -accel tcg -device virtio-scsi-pci -drive file=Fedora-Cloud-Base-35-1.2.aarch64.temp.qcow2,if=none,format=qcow2,id=hd0 -device scsi-hd,drive=hd0 -boot c -bios ./pc-bios/edk2-aarch64-code.fd
s390x ./qemu-system-s390x -name Fedora-Cloud-Base-35-1.2.s390x -smp 2 -m 2G -vga none -nographic -serial pipe:Fedora-Cloud-Base-35-1.2.s390x -monitor unix:Fedora-Cloud-Base-35-1.2.s390x.mon,server,nowait -device virtio-net,netdev=vmnic -netdev user,id=vmnic -cdrom fedora-cloud-init.iso -machine s390-ccw-virtio -cpu max -accel tcg -hda Fedora-Cloud-Base-35-1.2.s390x.temp.qcow2 -boot c

Boot test

A simple bash script reads the ".out" pipe until the "fedora login:" string is found and then issues a "system_powerdown" through QEMU monitor.

Execution time

User, system and real time, reported by /usr/bin/time -v.

Elapsed (wall clock) time

Guest PPC64 x86_64
PPC64 194.72 ± 7.28 162.75 ± 8.75
aarch64 501.89 ± 9.98 586.08 ± 10.55
s390x 294.10 ± 21.62 223.71 ± 85.30

User time

Guest PPC64 x86_64
PPC64 233.98 ± 7.63 191.91 ± 11.55
aarch64 690.05 ± 14.60 846.87 ± 18.12
s390x 268.96 ± 14.10 280.97 ± 90.82

System time

Guest PPC64 x86_64
PPC64 4.57 ± 0.27 3.20 ± 1.52
aarch64 11.86 ± 0.44 9.64 ± 6.93
s390x 3.64 ± 1.23 4.30 ± 3.32

Flame graphs

Captured with perf at 251 Hz. More about flame graphs: https://github.com/brendangregg/FlameGraph

Click a box to zoom the Flame Graph to this stack frame only. To search and highlight all stack frames matching a regular expression, click the search button in the upper right corner or press Ctrl-F.

aarch64-on-ppc64-boot aarch64-on-x86-boot ppc64-on-ppc64-boot ppc64-on-x86-boot s390x-on-ppc64-boot s390x-on-x86-boot

Build test

The original Fedora Cloud image is modified to disable Cloud-Init, create an unlocked user account and have (bc-1.07)[https://ftp.gnu.org/gnu/bc/bc-1.07.tar.gz] sources downloaded and build dependencies installed. A bash script interacts with ".in" and ".out" pipes to login, extract, configure and build bc sources, and then shutdown the VM.

Execution time

User, system and real time, reported by /usr/bin/time -v on Linux or /usr/bin/time -l on MacOS.

Elapsed (wall clock) time

Guest PPC64 x86_64 aarch64
PPC64 429.82 ± 11.57 352.34 ± 8.51 180.78 ± 42.02
aarch64 1029.78 ± 46.01 1207.98 ± 80.49 487.50 ± 7.54
s390x 589.97 ± 86.67 411.83 ± 41.88 221.86 ± 79.85

User time

Guest PPC64 x86_64 aarch64
PPC64 572.19 ± 13.18 469.71 ± 10.46 217.43 ± 36.30
aarch64 1496.23 ± 103.24 1856.03 ± 173.53 683.98 ± 10.57
s390x 578.65 ± 85.98 554.00 ± 58.31 196.65 ± 51.86

System time

Guest PPC64 x86_64 aarch64
PPC64 9.39 ± 0.44 6.44 ± 2.68 0.99 ± 0.10
aarch64 25.00 ± 1.29 22.11 ± 11.44 3.31 ± 2.23
s390x 7.31 ± 0.97 6.81 ± 3.10 1.03 ± 0.43

Flame graphs

Captured with perf at 251 Hz. More about flame graphs: https://github.com/brendangregg/FlameGraph

Click a box to zoom the Flame Graph to this stack frame only. To search and highlight all stack frames matching a regular expression, click the search button in the upper right corner or press Ctrl-F.

aarch64-on-ppc64-build aarch64-on-x86-build ppc64-on-ppc64-build ppc64-on-x86-build s390x-on-ppc64-build s390x-on-x86-build