[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC 00/16] Implement Microvm for aarch64 architecture
From: |
Xu Yandong |
Subject: |
[PATCH RFC 00/16] Implement Microvm for aarch64 architecture |
Date: |
Mon, 17 Feb 2020 02:51:12 -0500 |
Implement Microvm for aarch64 architecture
This series attempts to implement microvm for aarch64
architecture.
Just like how Sergio Lopez does for implementing microvm
for x86 architecture. We remove parts of emulate devices which
are not needed in microvm, compared with normal VM,
We only keep PL011 (UART), PL031 (RTC) and virtio-mmio
devices for microvm of aarch64.
We compared the boot time between virt VM and microvm With the
follow command lines:
For microvm:
qemu-system-aarch64 \
-cpu host \
-smp 1,sockets=1,cores=1,threads=1 \
-m 1024M \
-machine microvm,accel=kvm,gic-version=3 \
-kernel vmlinux.bin \
-drive id=test,file=ubuntu-rootfs.img,format=raw,if=none \
-device virtio-blk-device,drive=test \
-netdev tap,id=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=tap0 \
-append "root=/dev/vda rw printk.time=y" \
-nographic
Normal VM???Only changed the machine type to 'virt'
qemu-system-aarch64 \
-cpu host \
-smp 1,sockets=1,cores=1,threads=1 \
-m 1024M \
-machine virt,accel=kvm,gic-version=3 \
-kernel vmlinux.bin \
-drive id=test,file=ubuntu-rootfs.img,format=raw,if=none \
-device virtio-blk-device,drive=test \
-netdev tap,id=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=tap0 \
-append "root=/dev/vda rw printk.time=y" \
-nographic
This is the test results:
1. Boot time
1) boot time after dropped caches(echo 3 > /proc/sys/vm/drop_caches)
normal virt Machine: 204 ms
microvm Machine: 132 ms
2) boot time with caches
normal virt Machine: 168 ms
microvm Machine: 71 ms
2. MMIO regions
normal virt Machine:
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000003ffffff (prio 0, romd): virt.flash0
0000000004000000-0000000007ffffff (prio 0, romd): virt.flash1
0000000008000000-000000000800ffff (prio 0, i/o): gicv3_dist
0000000008080000-000000000809ffff (prio 0, i/o): gicv3_its
0000000008080000-000000000808ffff (prio 0, i/o): control
0000000008090000-000000000809ffff (prio 0, i/o): translation
00000000080a0000-00000000080bffff (prio 0, i/o): gicv3_redist_region[0]
0000000009000000-0000000009000fff (prio 0, i/o): pl011
0000000009010000-0000000009010fff (prio 0, i/o): pl031
0000000009020000-0000000009020007 (prio 0, i/o): fwcfg.data
0000000009020008-0000000009020009 (prio 0, i/o): fwcfg.ctl
0000000009020010-0000000009020017 (prio 0, i/o): fwcfg.dma
0000000009030000-0000000009030fff (prio 0, i/o): pl061
000000000a000000-000000000a0001ff (prio 0, i/o): virtio-mmio
... skipped 30 virtio-mmio region
000000000a003e00-000000000a003fff (prio 0, i/o): virtio-mmio
000000000c000000-000000000dffffff (prio 0, i/o): platform bus
0000000010000000-000000003efeffff (prio 0, i/o): alias pcie-mmio @gpex_mmio
0000000010000000-000000003efeffff
000000003eff0000-000000003effffff (prio 0, i/o): gpex_ioport
000000003eff1000-000000003eff101f (prio 1, i/o): virtio-pci
0000000040000000-000000007fffffff (prio 0, ram): mach-virt.ram
0000004010000000-000000401fffffff (prio 0, i/o): alias pcie-ecam
@pcie-mmcfg-mmio 0000000000000000-000000000fffffff
0000008000000000-000000ffffffffff (prio 0, i/o): alias pcie-mmio-high
@gpex_mmio 0000008000000000-000000ffffffffff
microvm Machine:
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000008000000-000000000800ffff (prio 0, i/o): gicv3_dist
00000000080a0000-00000000080bffff (prio 0, i/o): gicv3_redist_region[0]
0000000009000000-0000000009000fff (prio 0, i/o): pl011
0000000009010000-0000000009010fff (prio 0, i/o): pl031
000000000a000000-000000000a0001ff (prio 0, i/o): virtio-mmio
... skipped 30 virtio-mmio region
000000000a003e00-000000000a003fff (prio 0, i/o): virtio-mmio
0000000040000000-000000007fffffff (prio 0, ram): mach-virt.ram
Please review this series.
Thinks,
Xu Yandong.
Xu Yandong (16):
hw/arm/arm: Introduce ArmMachineState and ArmMachineClass
hw/arm: move shared fdt member to ArmMachine
hw/arm: move shared memmap member to ArmMachine
hw/arm: move shared irqmap member to ArmMachine
hw/arm: move shared smp_cpus member to ArmMachine
hw/arm/virt: split MSI related codes from create_gic
hw/arm/virt: split virt extension related codes from create_gic
hw/arm/virt: split secure extension related codes from create_gic
hw/arm: move shared gic member to ArmMachine
hw/arm: split create_gic function
hw/arm: move shared psci_enable and claim_edge_triggered_timers member
to ArmMachine
hw/arm: move shared devices related functions to arm.c and export them
hw/arm: move shared fdt related functions to arm.c and export them
hw/arm: move shared bootinfo member to ArmMachine
hw/arm: move shared cpu related functions to arm.c and export them
hw/arm: Introduce the microvm machine type
default-configs/aarch64-softmmu.mak | 2 +
hw/arm/Kconfig | 7 +
hw/arm/Makefile.objs | 3 +-
hw/arm/arm.c | 687 +++++++++++++++++
hw/arm/microvm.c | 303 ++++++++
hw/arm/virt-acpi-build.c | 48 +-
hw/arm/virt.c | 1079 +++++++--------------------
include/hw/arm/arm.h | 152 ++++
include/hw/arm/microvm.h | 40 +
include/hw/arm/virt.h | 86 +--
10 files changed, 1505 insertions(+), 902 deletions(-)
create mode 100644 hw/arm/arm.c
create mode 100644 hw/arm/microvm.c
create mode 100644 include/hw/arm/arm.h
create mode 100644 include/hw/arm/microvm.h
--
2.18.1
- [PATCH RFC 00/16] Implement Microvm for aarch64 architecture,
Xu Yandong <=
- Re: [PATCH RFC 00/16] Implement Microvm for aarch64 architecture, no-reply, 2020/02/17
- Re: [PATCH RFC 00/16] Implement Microvm for aarch64 architecture, Peter Maydell, 2020/02/17
- [PATCH RFC 09/16] hw/arm: move shared gic member to ArmMachine, Xu Yandong, 2020/02/17
- [PATCH RFC 14/16] hw/arm: move shared bootinfo member to ArmMachine, Xu Yandong, 2020/02/17
- [PATCH RFC 05/16] hw/arm: move shared smp_cpus member to ArmMachine, Xu Yandong, 2020/02/17
- [PATCH RFC 15/16] hw/arm: move shared cpu related functions to arm.c and export them, Xu Yandong, 2020/02/17
- [PATCH RFC 10/16] hw/arm: split create_gic function, Xu Yandong, 2020/02/17
- [PATCH RFC 04/16] hw/arm: move shared irqmap member to ArmMachine, Xu Yandong, 2020/02/17
- [PATCH RFC 01/16] hw/arm/arm: Introduce ArmMachineState and ArmMachineClass, Xu Yandong, 2020/02/17
- [PATCH RFC 07/16] hw/arm/virt: split virt extension related codes from create_gic, Xu Yandong, 2020/02/17