KVM/ARM
Linux Symposium 2010
Christoffer Dall and Jason Nieh {cdall,nieh}@cs.columbia.edu
Slides: http://www.cs.columbia.edu/~cdall/ols2010-presentation.pdf
Friday, July 16, 2010
KVM/ARM Linux Symposium 2010 Christoffer Dall and Jason Nieh - - PowerPoint PPT Presentation
KVM/ARM Linux Symposium 2010 Christoffer Dall and Jason Nieh {cdall,nieh}@cs.columbia.edu Slides: http://www.cs.columbia.edu/~cdall/ols2010-presentation.pdf Friday, July 16, 2010 We like KVM Its Fast, Free, Open, and Simple!
Linux Symposium 2010
Christoffer Dall and Jason Nieh {cdall,nieh}@cs.columbia.edu
Slides: http://www.cs.columbia.edu/~cdall/ols2010-presentation.pdf
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Google Nexus One Specifications
Processor Qualcomm Snapdragon QSD8250 CPU Core Qualcomm Scorpion Architecture ARM v7 Clock speed 1000 MHz Technology 65 nm Memory 512 MB
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
mode where all sensitive instructions trap
Friday, July 16, 2010
Friday, July 16, 2010
CPS LDRT STC RSBS MRS STRBT ADCS RSCS MSR STRT ADDS SBCS RFE CDP ANDS SUBS SRS LDC BICS LDM (2) MCR EORS LDM (3) MCRR MOVS STM (2) MRC MVNS LDRBT MRRC ORRS
Friday, July 16, 2010
CPS LDRT STC RSBS MRS STRBT ADCS RSCS MSR STRT ADDS SBCS RFE CDP ANDS SUBS SRS LDC BICS LDM (2) MCR EORS LDM (3) MCRR MOVS STM (2) MRC MVNS LDRBT MRRC ORRS
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Hardware Linux Kernel KVM Processes VM Guest kernel QEMU
Friday, July 16, 2010
Friday, July 16, 2010
Start QEMU
Friday, July 16, 2010
Start QEMU Alloc memory
Friday, July 16, 2010
Start QEMU Alloc memory
Friday, July 16, 2010
Start QEMU Alloc memory Create VM
Friday, July 16, 2010
Start QEMU Alloc memory Create VM
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space World switch Kernel Guest
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch Handle exit
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch Handle exit
Handle I/O?
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch Handle exit
Handle I/O?
Emulation
Friday, July 16, 2010
Start QEMU Alloc memory Create VM Register memory Create VCPU KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch Handle exit
Handle I/O?
Emulation
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Status register access function
23 20 19 16 15 14 12 0 +--------------+-------------------+--+-------------+-----------------------------+ | 0 | Rd | R| 2 | OIF | +--------------+-------------------+--+-------------+-----------------------------+
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
4 GB
Devices Physical Addresses RAM Kernel
4 GB
User space application Virtual Addresses MMU Page Tables
Friday, July 16, 2010
4 GB
Devices Host physical (Machine) Addresses RAM Guest Kernel
4 GB
Guest user space application Guest virtual Addresses MMU
4 GB
Devices Guest physical Addresses RAM
Friday, July 16, 2010
4 GB
Devices Host physical (Machine) Addresses RAM Guest Kernel
4 GB
Guest user space application Guest virtual Addresses MMU Shadow page tables
4 GB
Devices Guest physical Addresses RAM
Friday, July 16, 2010
Friday, July 16, 2010
KVM process Virtual Memory Guest physical Guest virtual Host kernel Guest memory Machine memory
Friday, July 16, 2010
KVM process Virtual Memory Guest physical Guest virtual Host kernel Guest memory Machine memory
Walk guest page tables in software: gva_to_gfn(...);
Friday, July 16, 2010
KVM process Virtual Memory Guest physical Guest virtual Host kernel Guest memory Machine memory
Built-in KVM functionality: gfn_to_hva(...); Walk guest page tables in software: gva_to_gfn(...);
Friday, July 16, 2010
KVM process Virtual Memory Guest physical Guest virtual Host kernel Guest memory Machine memory
Kernel functionality: page = virt_to_page(...); pfn = page_to_pfn(page); Built-in KVM functionality: gfn_to_hva(...); Walk guest page tables in software: gva_to_gfn(...);
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
AP Privileged User 00 None None 01 R/W None 10 R/W R/O 11 R/W R/W
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
KVM RUN User space Kernel World switch
Native guest execution
Guest Interrupt World switch Handle exit
Handle I/O?
Emulation
Friday, July 16, 2010
To guest From guest
Friday, July 16, 2010
To guest From guest
Friday, July 16, 2010
To guest From guest
Friday, July 16, 2010
To guest From guest
Friday, July 16, 2010
Friday, July 16, 2010
Machine memory Guest Kernel
4 GB
User space application Guest Virtual Addresses Host Kernel
4 GB
QEMU virtual memory Host Virtual Addresses
0xFFFF1000 0xFFFF1000
Friday, July 16, 2010
Machine memory Guest Kernel
4 GB
User space application Guest Virtual Addresses Host Kernel
4 GB
QEMU virtual memory Host Virtual Addresses
0xFFFF1000 0xFFFF1000
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Friday, July 16, 2010
Guest Kernel
4 GB
User space application Guest Virtual Addresses
0xFFFF0000
Hardware exception vector page
0x0
Guest exception vector page
Friday, July 16, 2010
Friday, July 16, 2010
Guest Kernel
4 GB
User space application Guest Virtual Addresses
0xFFFF0000
Hardware exception vector page
0x0
Guest exception vector page
Friday, July 16, 2010
Guest Kernel
4 GB
User space application Guest Virtual Addresses
0x0
Hardware exception vector page
0xffff0000
Guest exception vector page
Friday, July 16, 2010
Guest Kernel
4 GB
User space application Guest Virtual Addresses
0xFFFF0000
Hardware exception vector page
Friday, July 16, 2010