日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > Linux閱碼場
[導讀]一、?概述KVM的全稱是Kernel-basedVirtualMachine,其是一種基于linux內(nèi)核的采用硬件輔助虛擬化技術(shù)的全虛擬化解決方案。它最初由以色列的初創(chuàng)公司Qumranet開發(fā),并在linux-2.6.20中開始被納入在linux內(nèi)核,成為內(nèi)核源碼的一部分。KVM...


一、 概述






KVM的全稱是Kernel-based Virtual Machine,其是一種基于linux內(nèi)核的采用硬件輔助虛擬化技術(shù)的全虛擬化解決方案。它最初由以色列的初創(chuàng)公司Qumranet開發(fā),并在linux-2.6.20中開始被納入在linux內(nèi)核,成為內(nèi)核源碼的一部分。KVM自誕生之初就定位于基于硬件輔助的虛擬化來提供全虛擬化的支持,其以內(nèi)核模塊的形式被加載。加載KVM模塊的linux內(nèi)核相當于變成了一個Hypervisor,同時依賴linux內(nèi)核提供的各種功能來實現(xiàn)硬件管理,擁有極高的兼容性及可擴展性。
上面提到KVM是作為一個內(nèi)核模塊出現(xiàn)的,所以它還得借助用戶空間的程序來和用戶進行交互,這就不得不提到大名鼎鼎的QEMU了。QEMU是一套由法布里斯·貝拉(Fabrice Bellard)所編寫的以GPL許可證分發(fā)源碼的模擬處理器,在GNU/Linux平臺上使用廣泛。其本身是一個純軟件的支持CPU虛擬化、內(nèi)存虛擬化及I/O虛擬化等功能的用戶空間程序。其借助KVM提供的虛擬化支持可以將CPU、內(nèi)存等虛擬化工作交由KVM處理,自己則處理大多數(shù)I/O虛擬化的功能,可以實現(xiàn)極高的虛擬化效率。KVMQEMU配合使用的整體接口如圖1所示。



QEMU盡管非常的強大,但也正是應為它的強大導致其對初學者非常的不友好。這里推薦大家剛開始學習KVM時可以先學習kvm tool,這是一個基于C語言開發(fā)的KVM虛擬化工具,其代碼非常精簡易懂,同時也可以支持完整的linux虛擬化,非常適合初學者入門使用。其項目地址為https://github.com/kvmtool/kvmtool。





二、 ARM64虛擬化支持






arm最早在armv7-a引入硬件虛擬化支持。到了armv8中,arm拋棄了armv7時代的特權(quán)級,引入了全新的Exception Level(EL),其如圖2所示(armv8.4-A引入了對安全世界虛擬化的支持)。





2




其中4個異常等級中的EL2留給Hypervisor用于各種虛擬化功能的訪問及配置,如:stage 2轉(zhuǎn)換、EL1/EL0指令和寄存器訪問、注入虛擬異常等。






三、 CPU虛擬化






CPU被稱為計算機的大腦,是計算機系統(tǒng)中最核心的模塊。在沒有CPU硬件虛擬化技術(shù)之前都是使用二進制指令動態(tài)翻譯技術(shù)來實現(xiàn)對客戶機操作系統(tǒng)中執(zhí)行的執(zhí)行(例如qemu的軟件虛擬化),其不僅實現(xiàn)復雜而且效率非常低下。因此硬件虛擬化技術(shù)應運而生,為KVM的誕生創(chuàng)造了必要的條件。
有時Hypervisor需要模擬一些操作,例如VM里運行的軟件試圖配置處理器的一些屬性,如電源管理或是緩存一致性時。通常你不會允許VM直接配置這些屬性,因為這會打破隔離性,從而影響其他VMs。這就需要通過以陷入的方式產(chǎn)生異常,在異常處理程序中做相應的模擬。armv8包含一些陷入控制來幫助實現(xiàn)陷入(trapping) – 模擬(emulating)。如果對相應操作配置了陷入,則這種操作發(fā)生時會陷入到更高的異常級別。
例如,正常我們在執(zhí)行WFI指令時會使CPU進入一個低功耗的狀態(tài),但是對于HOST OS來說,如果讓CPU真正進入低功耗狀態(tài),顯然會影響其他VM的運行。如果我們配置了HCR_EL2.TWI==1時,那么Guest OS在執(zhí)行WFI時就會觸發(fā)EL2的異常,然后陷入Hypervisor,那么此時Hypervisor就可以將對應VCPU所處的線程調(diào)出出去,將CPU讓給其他的VCPU線程使用。



3






四、 內(nèi)存虛擬化




內(nèi)存虛擬化的目的是給虛擬客戶機操作系統(tǒng)提供一個從0開始的連續(xù)的地址空間,同時在多個客戶機之間實現(xiàn)隔離與調(diào)度。
arm主要通過Stage 2轉(zhuǎn)換來提供對內(nèi)存虛擬化的支持,其允許Hypervisor控制虛擬機的內(nèi)存視圖,而在這之前則是使用及其復雜的影子頁表技術(shù)來實現(xiàn)。Stage 2轉(zhuǎn)換可以控制虛擬機是否可以訪問特定的某一塊物理內(nèi)存,以及該內(nèi)存塊出現(xiàn)在虛擬機內(nèi)存空間的位置。這種能力對于虛擬機的隔離和沙箱功能來說至關重要。這使得虛擬機只能看到分配給它自己的物理內(nèi)存。為了支持Stage 2 轉(zhuǎn)換, 需要增加一個頁表,我們稱之為Stage 2頁表。操作系統(tǒng)控制的頁表轉(zhuǎn)換稱之為stage 1轉(zhuǎn)換,負責將虛擬機視角的虛擬地址轉(zhuǎn)換為虛擬機視角的物理地址。而stage 2頁表由Hypervisor控制,負責將虛擬機視角的物理地址轉(zhuǎn)換為真實的物理地址。虛擬機視角的物理地址在Armv8中有特定的詞描述,叫中間物理地址(intermediate Physical Address, IPA)。
stage 2轉(zhuǎn)換表的格式和stage 1的類似,但也有些屬性的處理不太一樣,例如,判斷內(nèi)存類型 是normal 還是 device的信息被直接編碼進了表里,而不是通過查詢MAIR_ELx寄存器。


4






五、 I/O虛擬化






I/O設備作為一種外部設備,其虛擬化的實現(xiàn)相較于前面的CPU虛擬化及內(nèi)存虛擬化有些不同,其目前主要有以下四種虛擬化方案。



1、 設備模擬:


在虛擬機監(jiān)控器中模擬具體的I/O設備的特性,例如qemu。在KVMqemu的組合中通過Hypervisor捕獲Guest OSI/O請求交給用戶空間的qemu進行模擬,然后將結(jié)果再通過Hypervisor傳遞給Guest OS。這種方式能夠提供非常好的兼容性但是性能太差,同時模擬設備的功能特性支持不夠多。




2、 前后端驅(qū)動接口


在HypervisorGuest OS之間定義一種權(quán)限的適用于虛擬機的交互接口,比如virtio技術(shù)。這個方案相較于設備模擬在性能上有所提高,但是兼容性較差,而且在高I/O負載場景,后端驅(qū)動的CPU占用較高。




3、 設備直接分配


將一個物理設備直接分配給Guest OS使用。此方式的性能顯而易見,要比上面兩種好很多,但是需要硬件設備支持,且無法共享和動態(tài)遷移。




4、 設備共享分配


此方式是設備直接分配的一個擴展,其主要就是讓一個物理設備可以支持多個虛擬機功能接口,將不同的接口地址獨立分配給不同的Guest OS使用。如SR-IOV協(xié)議。












本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關閉