版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
云計算虛擬化技術(shù)基礎(chǔ)與實踐
QEMU虛擬化原理目錄CONTENT01.QEMU運行模式02.QEMU軟件構(gòu)成03.QEMU內(nèi)存模型04.QEMU的PCI總線與設(shè)備本章重點理解QEMU的運行模式。了解QEMU的軟件構(gòu)成。理解QEMU的內(nèi)存模型。理解QEMU的PCI總線與設(shè)備。QEMU運行模式01QEMU運行模式QEMU作為一個開源的硬件模擬器項目,除了支持x86體系架構(gòu)之外,還支持ARM、MIPS、PowerPC、IA64等多種CPU硬件架構(gòu)。QEMU除了支持KVM之外,還支持全虛擬機和kqemu加速模塊等方式QEMU的三種模塊架構(gòu)QEMU軟件構(gòu)成QEMU源碼架構(gòu)QEMU線程事件模型Libkvm模塊Virtio組件02QEMU軟件構(gòu)成QEMU的軟件架構(gòu)QEMU主要由以下幾個部分組成:Hypervisor控制仿真。TinyCodeGenerator(TCG)在虛擬機器代碼和宿主機代碼之間進行轉(zhuǎn)換。軟件內(nèi)存管理單元(MMU)處理內(nèi)存訪問。磁盤子系統(tǒng)處理不同的磁盤映像格式。設(shè)備子系統(tǒng)處理網(wǎng)卡和其他硬件設(shè)備。1.QEMU源碼架構(gòu)QEMU源碼的獲取可以訪問QEMU的官方網(wǎng)站:/download/。QEMU的源碼總體上分為指令翻譯(位于tcg目錄下的文件)、硬件模擬(位于hw目錄下的文件)、網(wǎng)絡(luò)傳輸(位于slirp目錄下的文件)和文件系統(tǒng)(block前綴文件)四個部分,其主程序涉及的相關(guān)文件有vl.c、cpu-exec.c、exec.c、translate-all.c、thunk.c、disas.c。1.QEMU源碼架構(gòu)代碼結(jié)構(gòu)QEMU中有一個模塊叫做微型代碼生成器(TCG,TinyCodeGenerator),它用來將客戶機代碼翻譯成宿主機代碼。
QEMU指令動態(tài)翻譯過程1.QEMU源碼架構(gòu)QEMU的主要功能就是不斷提取客戶機代碼并且轉(zhuǎn)化成宿主機指定架構(gòu)的代碼。整個翻譯任務(wù)分為兩個部分:第一個部分將客戶機代碼轉(zhuǎn)化成TCG中間代碼,然后再將中間代碼轉(zhuǎn)化成宿主機代碼。開始執(zhí)行:比較重要的C語言文件有:vl.c、cpus.c、exec-all.c、exec.c和cpu-exec.c。硬件模擬:所有的硬件設(shè)備都在/hw/目錄下面,所有的設(shè)備都有獨自的文件,包括總線,串口,網(wǎng)卡,鼠標等等。目標機器:現(xiàn)在QEMU可以模擬的CPU架構(gòu)有:Alpha,ARM,Cris,i386,Mips,MicroBlaze,S390X和SH4等。主機:使用TCG代碼生成主機的代碼,存放在/tcg/目錄中。代碼結(jié)構(gòu)1.QEMU源碼架構(gòu)2.TCG動態(tài)翻譯TCG代碼轉(zhuǎn)換過程1.QEMU源碼架構(gòu)3.TB鏈在QEMU中,從代碼CACHE到靜態(tài)代碼再回到代碼CACHE,這個過程比較耗時,所以在QEMU中涉及了一個TB鏈將所有TB連在一起,可以讓一個TB執(zhí)行完以后直接跳到下一個TB,而不用每次都返回到靜態(tài)代碼部分。TB鏈的執(zhí)行流程1.QEMU源碼架構(gòu)4.QEMU的TCG代碼分析main_loop(...){/vl.c}:函數(shù)main_loop初始化qemu_main_loop_start()然后進入無限循環(huán)cpu_exec_all(),這個是QEMU的一個主要循環(huán)。qemu_main_loop_start(...){/cpus.c}:函數(shù)設(shè)置系統(tǒng)變量qemu_system_ready=1,然后重啟所有的線程并且等待一個條件變量。cpu_exec(...){/cpu-exec.c}:是CPU指令執(zhí)行的主函數(shù)。disas_insn(){/target-arch/translate.c}:真正的實現(xiàn)將客戶機代碼翻譯成TCG代碼。tcg_gen_code(...){/tcg/tcg.c}:將TCG的代碼轉(zhuǎn)化成主機代碼1.QEMU源碼架構(gòu)5.QEMU中的ioctl創(chuàng)建KVM在/vl.c中通過kvm_init()將會創(chuàng)建各種KVM的結(jié)構(gòu)體變量,并且通過ioctl與已經(jīng)初始化好的KVM模塊進行通訊,創(chuàng)建虛擬機,然后創(chuàng)建vCPU等等。KVM_RUN當KVM需要QEMU處理一些指令和I/O時,就會通過這個ioctl退回到QEMU進行處理,否則會一直在KVM中執(zhí)行。KVM_IRQ_LINE當設(shè)備有中斷時,通過ioctl調(diào)用KVM里面的kvm_set_irq將中斷注入到虛擬的中斷控制器。2.QEMU線程事件模型1.QEMU的事件驅(qū)動核心一個事件驅(qū)動的架構(gòu)是以派發(fā)一個事件到處理函數(shù)的循環(huán)為核心的。QEMU的主事件循環(huán)是main_loop_wait(),它主要完成以下工作:1)等待文件描述符變成可讀或可寫。文件描述符是一個關(guān)鍵角色,因為files、sockets、pipes以及其他各種各樣的資源都使用文件描述符(filedescriptors)。文件描述符的增加使用qemu_set_fd_handler()函數(shù)。2)處理到期的定時器(timer)。定時器的添加使用qemu_mod_timer()函數(shù)。3)執(zhí)行bottom-halves(BHs),它和定時器類似會立即過期。BHs用來放置回調(diào)函數(shù)的重入和溢出。2.QEMU線程事件模型2.QEMU的線程分類主線程執(zhí)行循環(huán),主要做三件事情:1)執(zhí)行select操作,查詢文件描述符有無讀寫操作。2)執(zhí)行定時器回調(diào)函數(shù)。3)執(zhí)行下半部(BHs)回調(diào)函數(shù)。采用BHs的原因主要是避免可重入性和調(diào)用棧溢出。執(zhí)行客戶機代碼的線程:只討論KVM執(zhí)行客戶機代碼情況(不考慮TCG,TCG采用動態(tài)翻譯技術(shù)),如果有多個vCPU,就意味著存在多個線程。異步I/O文件操作線程:提交I/O操作請求到隊列中,該線程從隊列取請求,并進行處理。主線程與執(zhí)行客戶機代碼同步線程:主線程與執(zhí)行客戶機代碼線程不能同時運行,要通過一個全局互斥鎖實現(xiàn)。3.Libkvm模塊但是考慮到未來的擴展性,KVM開發(fā)小組提供了Libkvm模塊,此模塊包裝了針對設(shè)備文件/dev/kvm的具體ioctl操作,同時還提供了關(guān)于KVM的相關(guān)初始化函數(shù),這樣就使Libkvm模塊成為了一個可復(fù)用的用戶空間的控制模塊,供其他程序開發(fā)包所使用,比如Libvirt等。Libkvm模塊是QEMU和KVM內(nèi)核模塊中間的通信模塊,雖然KVM的應(yīng)用程序編程接口比較穩(wěn)定,同時也提供了/dev/kvm設(shè)備文件作為KVM的API接口。4.Virtio組件Virtio是半虛擬化Hypervisor中位于設(shè)備之上的抽象層。在開始學(xué)習(xí)Virtio組件的內(nèi)容之前,需要先了解半虛擬化和模擬設(shè)備的相關(guān)內(nèi)容。完全虛擬化環(huán)境下的設(shè)備模擬半虛擬化環(huán)境下的設(shè)備模擬4.Virtio組件1.Virtio的驅(qū)動程序抽象Virtio的驅(qū)動程序抽象4.Virtio組件2.Virtio架構(gòu)除了前端驅(qū)動程序(Front-enddrivers,在客戶操作系統(tǒng)中實現(xiàn))和后端驅(qū)動程序(Back-enddrivers,在Hypervisor中實現(xiàn))之外,Virtio還定義了兩個層次來支持客戶操作系統(tǒng)到Hypervisor的通信。上層(virtio層)是虛擬隊列接口;下層是transport層,負責virtio層和后端驅(qū)動進而到Hypervisor的交互。Virtio框架架構(gòu)4.Virtio組件Virtio前端的對象層次結(jié)構(gòu)4.Virtio組件3.核心APIvirtio_device和virtqueue將客戶機操作系統(tǒng)中的驅(qū)動程序與Hypervisor驅(qū)動程序鏈接起來。virtqueue支持自己獨有的API集合,使用函數(shù)add_buf向Hypervisor提供請求。客戶機操作系統(tǒng)通過get_buf函數(shù)觸發(fā)來自Hypervisor的響應(yīng),并調(diào)用該函數(shù)或通過virtqueuecallback函數(shù)等待通知來實現(xiàn)輪詢。virtqueueAPI的最后兩個函數(shù)是enable_cb和disable_cb,分別用來啟用或禁用回調(diào)進程(通過在virtqueue中初始化的callback函數(shù)實現(xiàn))。QEMU內(nèi)存模型03QEMU內(nèi)存模型QEMU內(nèi)存API仿真了QEMU的內(nèi)存,I/O總線以及對應(yīng)的控制器,主要包括以下部分的仿真:1.常規(guī)內(nèi)存。2.I/O映射內(nèi)存(MMIO)。3.內(nèi)存控制器(將物理內(nèi)存動態(tài)的映射到不同的虛擬地址空間)。QEMU內(nèi)存模型主要包括以下功能:1.跟蹤目標機內(nèi)存的變化。2.為KVM建立共享內(nèi)存(CoalescedMemory)。3.為KVM建立ioeventfdregions。QEMU內(nèi)存模型QEMU中包含四種類型的MemoryRegions,通過C數(shù)據(jù)結(jié)構(gòu)structMemoryRegion來表示。1.RAMRegion:目標機可用的主機上的一段虛擬地址空間。2.MMIORegion:注冊了read和write回調(diào)函數(shù)(callbacksfunctions)的一段目標機地址空間,對這段空間的讀寫操作將會調(diào)用主機上的回調(diào)函數(shù)。3.Container:多個MemoryRegions的集合,每個MR(MemoryRegions)在Container中有不同的offset。4.Alias:某個MR的subsection,Alias類型的MR可以指向任何其他類型的MR。QEMU內(nèi)存模型當目標系統(tǒng)訪問某個地址空間時,QEMU內(nèi)存管理系統(tǒng)按照如下規(guī)則選擇一個MR:1.從根節(jié)點按照降序的優(yōu)先級進行匹配。2.如果當前的MR是葉子節(jié)點,搜索過程終止。3.如果當前MR是Container,相同的算法在Container中搜索。4.如果當前MR是Alias,搜索從Alias指向的MR繼續(xù)進行。QEMU的PCI總線與設(shè)備PCI結(jié)構(gòu)簡介QEMU的PCI總線QEMU的PCI-PCI橋QEMU的PCI設(shè)備041.PCI結(jié)構(gòu)簡介每一個PCI設(shè)備都對應(yīng)一段內(nèi)存空間,里面按照地址位置放置PCI設(shè)備的信息,包括廠家信息,bar信息,中斷等等,也可以理解成一個數(shù)組,一些設(shè)備一出廠,相關(guān)的信息已經(jīng)寫在里面,模擬設(shè)備的所有信息都要進行動態(tài)的讀和寫。PCI設(shè)備信息表PCI設(shè)備內(nèi)存低地址
PCI設(shè)備內(nèi)存高地址0x000x040x080x0C0x00VendorIDDevIDcommand
0x10bar0addrbar1addrbar2addrbar3addr0x20bar4addrbar5addr
0x30
interruptline
2.QEMU的PCI總線QEMU在初始化硬件的時候,最開始的函數(shù)就是pc_init1。在這個函數(shù)里面會相繼的初始化CPU,中斷控制器,ISA總線,然后就要判斷是否需要支持PCI,如果支持則需調(diào)用i440fx_init初始化PCI總線。i440fx_init函數(shù)的主要參數(shù)是初始化好的ISA總線以及中斷控制器,返回值是PCI總線,初始化之后就可以將設(shè)備進行掛載。在Linux里面可以使用命令lspci-t來看PCI總線的結(jié)構(gòu)圖。3.QEMU的PCI-PCI橋在QEMU中,所有的設(shè)備包括總線、橋、一般設(shè)備等都對應(yīng)一個設(shè)備結(jié)構(gòu),通過register函數(shù)將所有的設(shè)備鏈接起來。在QEMU啟動的時候會初始化所有的QEMU設(shè)備,而對于PCI設(shè)備來說,QEMU在初始化以后還會進行一次RESET,將所有的PCIbar上的地址清空,然后進行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人與個人個人旅游代理服務(wù)合同2篇
- 二零二五年度水電安裝工程安全責任合同樣本4篇
- 二零二五年度門窗行業(yè)原材料供應(yīng)合同4篇
- 二零二五版大型活動臨時停車場租賃合同2篇
- 二零二五版新能源電池銷售代理服務(wù)協(xié)議書2篇
- 二零二五年度個人緊急短期借款協(xié)議
- 江蘇定制防腐木施工方案
- 羊肉購銷合同
- 電力供應(yīng)合同
- 二零二五版醫(yī)療設(shè)備全面維護與急救響應(yīng)合同3篇
- 案卷評查培訓(xùn)課件模板
- 體檢中心分析報告
- 2024年江蘇省樣卷五年級數(shù)學(xué)上冊期末試卷及答案
- 波浪理論要點圖解完美版
- 金融交易數(shù)據(jù)分析與風(fēng)險評估項目環(huán)境敏感性分析
- 牛頓環(huán)與劈尖實驗論文
- 最高人民法院婚姻法司法解釋(二)的理解與適用
- 移動商務(wù)內(nèi)容運營(吳洪貴)任務(wù)四 其他平臺載體的運營方式
- 浙教版科學(xué)八年級下冊全冊課件
- 2022年中國止血材料行業(yè)概覽:發(fā)展現(xiàn)狀對比分析研究報告(摘要版) -頭豹
- 普通生物學(xué)筆記(陳閱增)完整版-PDF轉(zhuǎn)換成word轉(zhuǎn)換器
評論
0/150
提交評論