KVM on PowerPC This time its the server, baby Donnerstag, 23. - - PowerPoint PPT Presentation

kvm on powerpc
SMART_READER_LITE
LIVE PREVIEW

KVM on PowerPC This time its the server, baby Donnerstag, 23. - - PowerPoint PPT Presentation

KVM on PowerPC This time its the server, baby Donnerstag, 23. September 2010 About Me Alexander Graf SUSE Studio team KVM and Qemu developer Server class PowerPC KVM port S390x Qemu guest support x86 Mac OS X in KVM


slide-1
SLIDE 1

KVM on PowerPC

This time it’s the server, baby

Donnerstag, 23. September 2010

slide-2
SLIDE 2

About Me

  • Alexander Graf
  • SUSE Studio team
  • KVM and Qemu developer
  • Server class PowerPC KVM port
  • S390x Qemu guest support
  • x86 Mac OS X in KVM
  • Nested SVM
  • ...

Donnerstag, 23. September 2010

slide-3
SLIDE 3

BookE

Donnerstag, 23. September 2010

slide-4
SLIDE 4

Book3S

Donnerstag, 23. September 2010

slide-5
SLIDE 5

Book3S

Donnerstag, 23. September 2010

slide-6
SLIDE 6

Book3S

Donnerstag, 23. September 2010

slide-7
SLIDE 7

PowerPC

  • BookE alive in embedded market
  • Book3S alive in server market & game

consoles

  • Desktop is dead

Donnerstag, 23. September 2010

slide-8
SLIDE 8

Book3S vs BookE

  • Server market / Embedded market
  • HTAB MMU / Soft TLB
  • Instruction set compatible in user mode
  • Different kernel mode instructions

Donnerstag, 23. September 2010

slide-9
SLIDE 9

What is KVM?

Kernel Hardware Programs

Donnerstag, 23. September 2010

slide-10
SLIDE 10

What is KVM?

Kernel Hardware kvm Kernel Programs

Guest

Programs

Host

Donnerstag, 23. September 2010

slide-11
SLIDE 11

Virtualization on x86

Kernel Programs

Donnerstag, 23. September 2010

slide-12
SLIDE 12

Virtualization on x86

Kernel Programs

Donnerstag, 23. September 2010

slide-13
SLIDE 13

Virtualization on x86

Kernel Programs Kernel Programs

Host Guest

VMRUN

Donnerstag, 23. September 2010

slide-14
SLIDE 14

Virtualization on x86

  • New instructions for world switch
  • Defined conditions to get back to host

Donnerstag, 23. September 2010

slide-15
SLIDE 15

KVM on PowerPC

Donnerstag, 23. September 2010

slide-16
SLIDE 16

The PR=1 Trick

Kernel Programs

Host PR=1 PR=0

Programs

Guest

Kernel

Donnerstag, 23. September 2010

slide-17
SLIDE 17

The PR=1 Trick

Kernel Programs

Host PR=1 PR=0

Programs

Guest

Kernel

Donnerstag, 23. September 2010

slide-18
SLIDE 18

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

Donnerstag, 23. September 2010

slide-19
SLIDE 19

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

Donnerstag, 23. September 2010

slide-20
SLIDE 20

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-21
SLIDE 21

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-22
SLIDE 22

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-23
SLIDE 23

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-24
SLIDE 24

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-25
SLIDE 25

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-26
SLIDE 26

The PR=1 Trick

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Example Linux Kernel Code

kvm

Donnerstag, 23. September 2010

slide-27
SLIDE 27

The PR=1Trick

  • All privileged instructions trap
  • KVM can emulate them
  • Runs all kernel code in user mode

Donnerstag, 23. September 2010

slide-28
SLIDE 28

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Donnerstag, 23. September 2010

slide-29
SLIDE 29

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Donnerstag, 23. September 2010

slide-30
SLIDE 30

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Donnerstag, 23. September 2010

slide-31
SLIDE 31

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

Donnerstag, 23. September 2010

slide-32
SLIDE 32

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

std r13, -SPRG1(0)

Donnerstag, 23. September 2010

slide-33
SLIDE 33

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

std r13, -SPRG1(0) ld r13, -SPRG3(0)

Donnerstag, 23. September 2010

slide-34
SLIDE 34

PV Framework

c000000000000380: 7c 42 13 78 mr r2,r2 c000000000000384: 7d b1 43 a6 mtsprg 1,r13 c000000000000388: 7d b3 42 a6 mfsprg r13,3 c00000000000038c: f8 6d 01 60 std r3,352(r13) c000000000000390: 7c 73 02 a6 mfdar r3 c000000000000394: f9 2d 01 20 std r9,288(r13) c000000000000398: 7d 20 00 26 mfcr r9

std r13, -SPRG1(0) ld r13, -SPRG3(0) ld r3, -DAR(0)

Donnerstag, 23. September 2010

slide-35
SLIDE 35

PV Framework

Shared Page KVM Guest

Donnerstag, 23. September 2010

slide-36
SLIDE 36

Virtual Memory

Virtual Memory Physical Memory

Donnerstag, 23. September 2010

slide-37
SLIDE 37

Virtual Memory

Virtual Memory Physical Memory

Donnerstag, 23. September 2010

slide-38
SLIDE 38

Virtual Memory

Virtual Memory Physical Memory

Donnerstag, 23. September 2010

slide-39
SLIDE 39

Virtual Memory

Effective Address

c000000012000380

Virtual Address Real Address

Donnerstag, 23. September 2010

slide-40
SLIDE 40

Virtual Memory

Effective Address

c000000012000380

SLB

Virtual Address Real Address

Donnerstag, 23. September 2010

slide-41
SLIDE 41

Segment Lookaside Buffer

ESID VSID c00000000 408f92c94 d00000000 f09b89af5 c00000007 45cb97751 ef72a166e f faaa19203 c00000001 414f012af ... ...

Donnerstag, 23. September 2010

slide-42
SLIDE 42

Segment Lookaside Buffer

ESID VSID c00000000 408f92c94 d00000000 f09b89af5 c00000007 45cb97751 ef72a166e f faaa19203 c00000001 414f012af ... ...

Donnerstag, 23. September 2010

slide-43
SLIDE 43

Segment Lookaside Buffer

c00000001

414f012af

ESID VSID

ESID VSID c00000000 408f92c94 d00000000 f09b89af5 c00000007 45cb97751 ef72a166e f faaa19203 c00000001 414f012af ... ...

Donnerstag, 23. September 2010

slide-44
SLIDE 44

Virtual Memory

Effective Address Virtual Address

c000000012000380

SLB

Real Address

Donnerstag, 23. September 2010

slide-45
SLIDE 45

Virtual Memory

Effective Address Virtual Address

c000000012000380

SLB

414f012af2000380

Real Address

Donnerstag, 23. September 2010

slide-46
SLIDE 46

Virtual Memory

Effective Address Virtual Address

c000000012000380

SLB

414f012af2000380

HTAB

Real Address

Donnerstag, 23. September 2010

slide-47
SLIDE 47

HTAB

380

Hash

2000

Index into HTAB

HTAB

414f012af

Donnerstag, 23. September 2010

slide-48
SLIDE 48

HTAB

414f012af 2000 380

VSID Real Page

408f92c94 5000 414f012af 12000 ... ...

PTEG

Donnerstag, 23. September 2010

slide-49
SLIDE 49

HTAB

414f012af 2000 380

VSID Real Page

408f92c94 5000 414f012af 12000 ... ...

PTEG

Donnerstag, 23. September 2010

slide-50
SLIDE 50

HTAB

414f012af 2000 380

VSID Real Page

408f92c94 5000 414f012af 12000 ... ...

PTEG

414f012af 2000 12000

Donnerstag, 23. September 2010

slide-51
SLIDE 51

Virtual Memory

Effective Address Virtual Address Real Address

c000000012000380

SLB

414f012af2000380

HTAB

Donnerstag, 23. September 2010

slide-52
SLIDE 52

Virtual Memory

Effective Address Virtual Address Real Address

c000000012000380

SLB

414f012af2000380 0000000012000380

HTAB

Donnerstag, 23. September 2010

slide-53
SLIDE 53

Shadow Paging (Segments)

  • Each process gets 65535

VSIDs allocated

  • Allocate a new process context

12345XXXX

__init_new_context()

SID space

Donnerstag, 23. September 2010

slide-54
SLIDE 54

Guest VSID Host VSID

Shadow Paging (Segments)

  • Then map guest

VSIDs to process VSIDs

414f012af 123450001 123450002 123450003 408f92c94 adc7d4c2d

Donnerstag, 23. September 2010

slide-55
SLIDE 55

Shadow Paging (Pages)

  • Guest accesses an unmapped page
  • Read guest SLB & HTAB
  • Resolve Host Real Address
  • Convert

VSID to Shadow VSID

  • Call Linux MMU helper to add host PTE

Donnerstag, 23. September 2010

slide-56
SLIDE 56

Guest Effective Address Guest Virtual Address Guest Real Address

c000000012000380

SLB

414f012af2000380 0000000012000380

HTAB

Donnerstag, 23. September 2010

slide-57
SLIDE 57

Guest Effective Address Guest Virtual Address Guest Real Address

c000000012000380

SLB

414f012af2000380 0000000012000380

HTAB

Shadow VSID

1234500012000380

Donnerstag, 23. September 2010

slide-58
SLIDE 58

Guest Effective Address Guest Virtual Address Guest Real Address

c000000012000380

SLB

414f012af2000380 0000000012000380

HTAB

Shadow Virtual Address Host Real Address

Shadow VSID KVM Memory Slots

000000a4180e9380 1234500012000380

Donnerstag, 23. September 2010

slide-59
SLIDE 59

Guest Effective Address Guest Virtual Address Guest Real Address

c000000012000380

SLB

414f012af2000380 0000000012000380

HTAB

Shadow Virtual Address Host Real Address

Shadow VSID KVM Memory Slots

000000a4180e9380 1234500012000380

Linux Memory Mapping

Donnerstag, 23. September 2010

slide-60
SLIDE 60

Guest Entry

CPU PACA vCPU struct

Donnerstag, 23. September 2010

slide-61
SLIDE 61

Guest Entry

CPU PACA vCPU struct

Donnerstag, 23. September 2010

slide-62
SLIDE 62

Guest Exit

CPU PACA vCPU struct

Donnerstag, 23. September 2010

slide-63
SLIDE 63

Guest Exit

CPU PACA vCPU struct

Donnerstag, 23. September 2010

slide-64
SLIDE 64

Mac-on-Linux

  • Used to run Mac OS on PPC back in the

day

  • PPC32 hosts only
  • Now has KVM interface

Donnerstag, 23. September 2010

slide-65
SLIDE 65

Why do I do this?

  • Build Service
  • SUSE Studio

Donnerstag, 23. September 2010

slide-66
SLIDE 66

Status

440

e500v2

Book3S 32bit

Book3S 64bit

Donnerstag, 23. September 2010

slide-67
SLIDE 67

Questions

Donnerstag, 23. September 2010