220 likes | 372 Views
Using a Processor Emulator on a Microkernel-based Operating System. 徐 子 傑 Hsu,Zi J ei. Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C. Introduction(1/2).
E N D
Using a Processor Emulator on a Microkernel-based Operating System 徐子傑 Hsu,ZiJei Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C
Introduction(1/2) • 現在有很多系統可以藉由virtual machine monitor或microkernel-based operating system去實現同時執行多個guest operating system(EX : Xen), • 然而這些系統大部分都必須遵守以下兩個規則 : • Guest operatingsystem的CPUarchitecture和Host operating system的CPUarchitecture必須一樣; • Guest operating system必須被修正。 • 因此我們提出藉由Processor Emulator的幫助讓不同的guest operating可以不用修改的在microkernel上執行, • 我們提出的prototype system可以讓Linux、FreeBSD等OS在x86 、ARM、PowerPC和SPARC上同時執行,
Introduction(2/2) • 我們採用L4 microkernel當做最底層的OperatingSystem, • L4microkernel提供最精簡且基本的kernel功能 • 例如 :memory management, task management and inter-process communication. • 我們使用QEMU當做Processor Emulator, • 我們ported QEMU,讓原本在linux或windows下執行的QEMU可以在L4microkernel上執行(利用POSIX Middleware), • QEMU能夠模擬多種不同的CPUarchitecture, • 因此我們利用QEMU模擬多個不同的CPU並且在上面架設OS • 因為使用processor emulator會造成大量的overhead, • 因此我們提出兩種方法去提高效能 • 使用function-level dynamic translation去改善QEMU效能 • 使用L4memory map functionality去降低對記憶體存取的overhead
Xen • 相較於其他的虛擬機器Xen最大優勢在於High Performance, • 因為 Xen採用 Para-virtualization 而不是使用Emulation、full system simulation方式, • 所以能夠使得 Xen系統效能優於其他虛擬機器軟體。 • Xen缺點應該是不能執行 Windows 作業系統, • 原因還是在於講求效能的 Xen採用 Para-virtualization 虛擬技術必須更改 Windows Kernel 才能執行 Windows Guest 系統, • 當然 Windows 並沒有提供我們來更改。 • 不過Intel現在提供Virtualization Technology, • 使得虛擬機器(Xen、Vmware)可以使用full system simulation在不修改Windows核心下也可以跑Windows Guest, • 在以往沒有Intel VT技術使用fullsystemsimulation效能非常糟糕 • 現在使用IntelVT技術可以使Guest系統存取硬體效能更加快速與直接。
VMware Workstation • VMware Workstation使用full system simulation技術, • 因此可以不用改變operating system,但是效能就沒有使用Para-virtualization來的好。 • 在VMware同時執行window或linux感覺就跟執行兩個application一樣。 • VMware直接使用了X86的保護模式(使用I/O必須切換到privileged mode), • 使得在一台X86電腦上同時運作多個不同的作業系統, • 例如像Linux、Windows等, • 並且在多個作業系統同時運行的情況下,各作業系統完全是獨立運作的,不會互相影響。 • VMware在Guest OS與Host OS之間加了一層VMware Virtual Platform, • 所有的Guest OS都運行在虛擬操作平臺之上,使得VMware支援同時運行多個Guest OS。
Design and Implementation(1/7) • Figure 1 說明整個系統的架構。 Figure 1. Overview of system architecture
Design and Implementation(2/7) • L4 Microkernel • L4microkernel提供最精簡且基本的kernel功能 • 例如 :memory management, task management and inter-process communication. • L4 microkernel提供fast synchronous IPC利於thread之間的communication。 • 我們的系統裡只有L4 microkernel在privilegedCPUmode執行; • 其他的程式都是在non-privileged CPU mode執行。 • 我們使用L4裡面的L4Ka::Pistachio版本當做kernel • POSIXMiddleware • 我們開發POSIX middleware用於porting QEMU在L4 microkernel上, • QEMU使用POSIXfunction在LINUX上, • 因此為了讓QEMU可以在L4microkernel上執行POSIXfunction,我們必須開發POSIXmiddleware。
Design and Implementation(3/7) • QEMU • QEMU是個processor emulator提供兩種模式的模擬: • User mode emulation 和 full system emulation • 我們使用full system emulation • Full system emulation模擬包括CPU、MMU、和interrupt process。 • QEMU使用dynamic translation在hostoperating system上執行沒有修改過的guest operating system, • Dynamic translation會將guest operating system轉換成host operating system可以執行的程式(Binary translation)。 • 使用dynamic translation會造成巨大的overhead, • QEMU會將轉換過後的generatedcode分成translated block • 並且有設計translated cache包含最常使用的translated block藉此減少dynamic translation所造成的overhead。(利用軟體實現cache)
Design and Implementation(4/7) • Device Access • Device Server • 對於每個不同的Device driver我們都設計Device server(User thread)去做處理 • L4microkernel的User thread擁有permission去對硬體直接做存取。 • 每個Device server對於系統或其他的component都是獨立的, • 因此Device driver fault並不會影響整個系統。 • GuestOS可以透過device driver分享hardwaredevice, • 每一device driver會在multi guest OS中mediatedevice I/O。 • EX: 當有兩個或更多linux同時執行時,使用者可以透過鍵盤隨意對任意的linux做輸入;
Design and Implementation(5/7) • Figure 2-a顯示如何從guest operating system控制device output • 當guest OS 執行 device output指令時(EX : outb in x86), • QEMU會covert指令成POSIX middleware所對應的function call, • 之後POSIXmiddleware藉由synchronous IPC傳送data output到device server, • 最後device server會對I/O存取data output。 • Figure 2-b顯示當deviceinput如何通知guest operating system, • 當device server 接受一個interrupt並且從hardware讀取值, • 之後device server將值寫入POSIXmiddleware內的circular buffer, • QEMU會polling此circular buffer, • 若此circular buffer一有更新QEMU則會讀取circular buffer並且傳遞到target guest OS。
Design and Implementation(6/7) b. Device input process Figure 2. Device I/O with device server
Design and Implementation(7/7) a. Device output process Figure 2. Device I/O with device server
Effort for Performance Improvement(1/9) • 使用processor emulator去執行guest operating systems即可以得到不用修改guest operating system這個優點, • 但是和Xen和L4Linux相比下使用processor emulator造成太大的overhead。 • 因此在我們提兩個方法去降低此overhead: • 使用Function-level Dynamic Translation; • 使用L4 Memory Map Function。
Effort for Performance Improvement(2/9) • Function-level Dynamic Translation • Figure 3 舉一個例子說明當Guest OS在QEMU上執行的流程, • QEMU會轉換guest OS的code為Host OS可以執行的code,我們稱這個為instruction-level dynamic translation。 • Guest OS和Host OS有類似的功能的functions: • guest_write和host_write都是對hard device做寫入的工作。 • 當guest OS藉由guest_write內的outb指令輸出資料, • QEMU會將其轉換為function_callcup_outb, • 而最後cup_outb在host端就是執行host_write。
Effort for Performance Improvement(3/9) Figure 3. Instruction-level Dynamic Translation
Effort for Performance Improvement(4/9) • Figure 4說明使用function-level dynamic translation, • 我們使用fast_guest_write function內僅僅包含hypercall指令, • Hypercall是我們在QEMU上額外設計的虛擬指令, • QEMU就會直接轉換hypercall指令到對應到function call即去執行host的host_write。 • 相比function-leveldynamictranslation和instruction-level dynamic translation; • function-leveldynamictranslation只需要轉換一個指令即可做對應到的host_write; • 而instruction-level dynamic translation卻需要轉換多個指令才可以達到同樣的效果。 • 因此function-leveldynamictranslation會大大降低dynamictranslation 的overhead。
Effort for Performance Improvement(5/9) Figure 4. Execution flow of fast guest write function with function-level dynamic translation
Effort for Performance Improvement(6/9) • Using L4 Memory Map Function • 現在的processors都有MMU,因此virtual machine和processor emulator必須提出MMU的functionality。 • 通常有兩種實現的方式: • 直接用software轉換guest OS 的memory address到hostOS的memory address(EX : QEMU and Bochs) • 使用特別的device driver去讓guest OS可以控制host OS的pagetable(EX: VMwareWorkstation) • Figure5說明QEMU提供純software MMU功能 • 當guest OS想要讀取一memoryaddress, • MMU會在guestOS所創立的page table尋找並且計算出其實際對應到host memoryaddress。 • 利用此方法當guest OS想要讀取一個memory的位置必須經過一連串的address轉換因此會造成巨大的overhead。
Effort for Performance Improvement(7/9) Figure 5. Dynamic memory address modification with software MMU
Effort for Performance Improvement(8/9) • L4microkernel有提供APIs去管理address space, • 因此使用者可以利用L4microkernel去創立一個新的記憶體空間並且mapmemory section到新的記憶體空間。 • Figure 6 說明QEMU如何使用L4microkernel的memorymanageAPIs。 • QEMU創造external address space, • 並且根據原本guest kernel所創立的pagetable map到新創造的external address space。 • 利用L4microkernel有提供的memorymanageAPIs就可以讓address不用透過QEMU的softMMU, • 進而減少address轉換所造成的overhead。
Effort for Performance Improvement(9/9) Figure 6. L4 memory map function
Conclusion • 利用processor emulator可以讓不同的operating system在microkernel-basedoperatingsystem上同時執行。 • 我們所建立的prototypesystem可以讓不同operating system搭配不同的CUParchitecture在L4microkernel上同時執行, • 並且讓這些operatingsystem透過device driver共同分享hardwaredevice。 • 並且提出改善使用processor emulator所造成的巨大overhead • 使用function-level dynamic translation; • 使用L4microkernel memory manage APIs。