1 / 22

Using a Processor Emulator on a Microkernel-based Operating System

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).

mariel
Download Presentation

Using a Processor Emulator on a Microkernel-based Operating System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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上同時執行,

  3. 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

  4. 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系統存取硬體效能更加快速與直接。

  5. 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。

  6. Design and Implementation(1/7) • Figure 1 說明整個系統的架構。 Figure 1. Overview of system architecture

  7. 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。

  8. 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)

  9. 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做輸入;

  10. 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。

  11. Design and Implementation(6/7) b. Device input process Figure 2. Device I/O with device server

  12. Design and Implementation(7/7) a. Device output process Figure 2. Device I/O with device server

  13. 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。

  14. 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。

  15. Effort for Performance Improvement(3/9) Figure 3. Instruction-level Dynamic Translation

  16. 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。

  17. Effort for Performance Improvement(5/9) Figure 4. Execution flow of fast guest write function with function-level dynamic translation

  18. 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。

  19. Effort for Performance Improvement(7/9) Figure 5. Dynamic memory address modification with software MMU

  20. 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。

  21. Effort for Performance Improvement(9/9) Figure 6. L4 memory map function

  22. 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。

More Related