36
Xen on ARM Stefano Stabellini and Ian Campbell

Linaro connect : Introduction to Xen on ARM

Embed Size (px)

DESCRIPTION

With the introduction of virtualization extensions on ARM processors, the Xen community has taken steps to add ARM support for ARM CPUs to the Xen Hypervisor. This port is executed as part of of the Hypervisor project, with no separate codebase. Xen engineers will describe the key challenges they have overcome, current technical status and discuss about the next steps.

Citation preview

Page 1: Linaro connect : Introduction to Xen on ARM

Xen on ARM

Stefano Stabellini and Ian Campbell

Page 2: Linaro connect : Introduction to Xen on ARM

Virtualization:why it matters

Page 3: Linaro connect : Introduction to Xen on ARM

Xen: the gears of the cloud● large user base

more than 10 million individuals users

● power the largest clouds inproduction

● not just for servers

Page 4: Linaro connect : Introduction to Xen on ARM

Xen: Open SourceGPLv2 with DCO (like Linux)Diverse contributor community

Page 5: Linaro connect : Introduction to Xen on ARM

Xen: Open Sourcesource:Mike Dayhttp://code.ncultra.org

Page 6: Linaro connect : Introduction to Xen on ARM

Xen Architecture

Hardware

Xen

Dom0 DomU

HW drivers

PV backends PV Frontends

DomU

PV Frontends

DomU

PV Frontends

Page 7: Linaro connect : Introduction to Xen on ARM

PV ProtocolsRequest Producer

Request Consumer

Response Producer

Response Consumer

Backend Frontend

Page 8: Linaro connect : Introduction to Xen on ARM

Xen Architecture:driver domains

Hardware

Xen

Dom0 DomU

NetFront

Disk Driver Domain

Toolstack Disk Driver

BlockBack

Network Driver Domain

Network Driver

NetBack BlockFront

Page 9: Linaro connect : Introduction to Xen on ARM

Xen: advantages● small surface of attack

● isolation

● resilience

● specialized algorithms (scheduler)

Page 10: Linaro connect : Introduction to Xen on ARM

Xen Architecture:HVM guests

Hardware

Xen

Dom0 stubdom

HW drivers

PV backends

HVM DomU

PV Frontends

HVM DomU

QEMU IO emulation IO emulation

Page 11: Linaro connect : Introduction to Xen on ARM

Xen upstream status● Xen (Dom0 and DomU support, PV

frontends and backends) fully upstream in Linux since v3.0A single 3.0.0 Linux kernel image boots on native, on Xen as domU, as dom0 and PV on HVM guest

● Xen upstream in QEMU since v1.3

● Xen supported by SuSE, Debian, Ubuntu, Fedora, CentOS, NetBSD and more

Page 12: Linaro connect : Introduction to Xen on ARM

ARM Serverscoming to market

4GB RAM, 4 cores per node3 x 6 x 4 x 4 = 288 cores

single node virtualization -manageability -

Page 13: Linaro connect : Introduction to Xen on ARM

● exploit the hardware as much as possible

● one type of guest○ no PVOPs○ use PV interfaces for IO

● Rearchitected for the modern age:○ no QEMU○ no compat code○ no shadow pagetables

Design goals

Page 14: Linaro connect : Introduction to Xen on ARM

Xen on ARM architecture

Page 15: Linaro connect : Introduction to Xen on ARM

Xen on ARM architecture

Page 16: Linaro connect : Introduction to Xen on ARM

Exploit the hardwareExploit the hardware virtualization extensions support as much as possible:

● hypervisor mode● MMU: second stage translation

○ no PV MMU calls: no need for PVOPs○ no shadow pagetables: -10721 lines of code!!

● hypercall: HVC● generic timers

Page 17: Linaro connect : Introduction to Xen on ARM

General Interrupt Controlleran interrupt controller with virtualization support

● use the GIC to inject hardware interrupts into dom0

● use the GIC to inject event notifications into any guest domains with Xen support○ use PPI 31○ advertise the IRQ via Device Tree

Page 18: Linaro connect : Introduction to Xen on ARM

One type of guest to rule them all

Page 19: Linaro connect : Introduction to Xen on ARM

One type of guestLike PV guests do it:● support booting from a supplied kernel● no emulated devices● use PV interfaces for IO

no need for QEMU

Page 20: Linaro connect : Introduction to Xen on ARM

Like HVM guests do it:● no PV MMU calls: exploit HW nested paging● same entry point on native and on Xen● use Device Tree to discover Xen presence● no unnecessary devices in the Device Tree● simple device emulation can be done in Xen

no need for QEMU

One type of guest

Page 21: Linaro connect : Introduction to Xen on ARM

Device TreeUse Device Tree to describe the virtual platform

hypervisor {compatible = "xen,xen", "xen,xen-4.2";reg = <0xb0000000 0x20000>;interrupts = <1 15 0xf08>;

};

Page 22: Linaro connect : Introduction to Xen on ARM

Device TreeUse Device Tree to describe the virtual platform

hypervisor {compatible = "xen,xen", "xen,xen-4.2";reg = <0xb0000000 0x20000>;interrupts = <1 15 0xf08>;

};

event notifications IRQ

Grant tablememory area

version of the Xen ABI

Page 23: Linaro connect : Introduction to Xen on ARM

The hypercall calling conventionthe hypercall interface:● hvc instruction● hypervisor specific imm 0xEA1● hypercall arguments passed in registers

Page 24: Linaro connect : Introduction to Xen on ARM

a 64 bit "ready" ABI● a single hypercall ABI for 32 bit guests and

64 bit guests

no compat code in Xen○ 2600 lines of code lighter

Page 25: Linaro connect : Introduction to Xen on ARM

ARMv8● Builds on foundations laid by ARMv7

○ xen/arch/arm mostly common code

● Initially 32 bit dom0+domU on 64○ Kernels already ready○ 64-bit guest support in progress

● Running on AEMv8 model○ Foundation Model soon

Page 26: Linaro connect : Introduction to Xen on ARM

Code sizesometimes smaller is better

● Entire hypervisor ~200,000LOC○ X86 (64-bit only) ~100,000LOC (~4,000 ASM)

■ ~22,000: HVM. ~14,000 MMU

Common ARMv7 ARMv8 Total

xen/arch/arm 5,122 1,969 821 7,912

C 5,023 406 344 5,773

ASM 99 1,563 477 2,139

xen/include/asm-arm 2,315 563 666 3,544

TOTAL 7,437 2,532 1,487 11,456

Page 27: Linaro connect : Introduction to Xen on ARM

Common Codemrc p15, 0, r0, c0, c0, 5 => WTF?

xen/include/asm-arm/cpregs.h:#define __CP32(r, coproc, opc1, crn, crm, opc2) \

coproc, opc1, r, crn, crm, opc2#define CP32(r, name...) __CP32(r, name)

#define MPIDR p15,0,c0,c0,5

mrc CP32(r0, MPIDR)

Page 28: Linaro connect : Introduction to Xen on ARM

ChallengesFrom the emulator to real hardware:

Page 29: Linaro connect : Introduction to Xen on ARM

War Stories ChallengesFrom the emulator to real hardware:● barriers and flushes● cache coherency● GIC and race conditions● virt_timer documentation bugs

Page 30: Linaro connect : Introduction to Xen on ARM

Status of the Project: ARMv7● Xen and Dom0 booting on Versatile Express

Cortex A15 and Arndale

● XL (Xen toolstack) ported to ARM

● PV console, disk and network working

● basic VM lifecycle operations functional

● Xen and Linux ARM patches fully upstream

Page 31: Linaro connect : Introduction to Xen on ARM

Status of the Project: ARMv8● Xen booting 64 bit

● Dom0 32 bit boots on Xen 64 bit

● 32 bit guest creation and destruction

● Shared code means most features developed on ARMv7 Just Work

Page 32: Linaro connect : Introduction to Xen on ARM

Xen 4.3○ full ARMv7 support○ ARMv8 64-bit port of the hypervisor

Xen 4.4○ increase HCL○ automated testing○ ARMv8 64-bit virtual machines and tools○ PCI passthrough

Linux 3.10/3.11○ full ARMv8 64-bit Xen guest support

Roadmap

Page 33: Linaro connect : Introduction to Xen on ARM

Open Questions● Boot Protocols

○ Multiboot?

● Bootloaders○ U-boot○ UEFI (runtime services?)

● ACPI

● SysMMU

Page 34: Linaro connect : Introduction to Xen on ARM

Demo

Page 35: Linaro connect : Introduction to Xen on ARM

Xen and LinaroOpportunities:

○ testing

○ platform support

○ boot protocols

○ hardwarefeatures

Page 36: Linaro connect : Introduction to Xen on ARM

● Talk to us, we are here all week:○ Xen.org Keynote: Tuesday @ 08:30, Grand Ballroom○ Xen at Demo Friday

● http://www.xen.org

● Xen on ARM @wiki.xen.org: goo.gl/FKNXe

● http://lists.xen.org/mailman/listinfo/xen-devel

More Information