1. 程式人生 > >CPU純軟體全虛擬化技術

CPU純軟體全虛擬化技術

我們在前面的文章中提到了虛擬化技術的大致分類情況,即分為全虛擬化、半虛擬化和硬體輔助虛擬化3大類。而我們虛擬化技術最主要的虛擬主體就是我們的硬體CPU、記憶體和IO,那麼我們的CPU在全虛擬化模式下如何工作,在半虛擬化下如何工作,在硬體輔助虛擬化模式下如何工作?或著說細分下來,我們又可以分為:

  • CPU的全虛擬化技術、半虛擬化技術和硬體輔助虛擬化技術,
  • 記憶體的全虛擬化技術、半虛擬化技術和硬體輔助虛擬化技術
  • IO裝置的全虛擬化技術、半虛擬化技術和硬體輔助虛擬化技術。

本次我們就來說說CPU的全虛擬化技術、半虛擬化技術和硬體輔助虛擬化技術

不支援硬體輔助虛擬化技術的X86架構下的CPU有4個特權級(ring0~ring3),作業系統是處於最高級別的ring0,應用程式處於最低級別的ring3。

wKioL1afFnSRpxlQAABjQiFvejo026.png

在這種架構下實現CPU的全虛擬化是極其困難的,為什麼困難?

  1. 原先的OS執行在ring0層,擁有對所有硬體的全部特權級;
  2. 虛擬化之後將OS執行在ring1層,OS就沒有許可權執行一些特權指令,怎麼保證這些特權指令執行;
  3. 在保證該OS虛擬機器的特權指令執行的情況下,保證其他執行的OS虛擬機器的安全;

1、模擬模擬技術

最先實現這種CPU全虛擬化技術的是Trap-and-emulation技術,即陷入模式和模擬模擬技術。這種技術通過將OS需求的特權指令通過VMM自動捕獲的方式執行後返回去OS。當OS有特權指令產生時,VMM將其自動捕獲,將OS所請求的特權指令進行截獲,然後通過VMM執行之後將結果返回給OS層。VMM會使用模擬模擬將特權指令模擬模擬的方式執行一遍。

wKiom1afFk-T2kDjAACQyVyCch0212.png

在虛擬化模式下,就存在著2中特殊的指令:特權指令和敏感指令。那麼什麼是特權指令?什麼是敏感指令?

特權指令:系統中有一些操作和管理關鍵系統資源的指令,這些指令只有在最高特權級上能夠正確執行。如果在非最高特權級上執行,特權指令會引發一個異常,處理器會陷入到最高特權級,交由系統軟體處理了。

敏感指令:操作特權資源的指令,包括修改虛擬機器的執行模式或者下面物理機的狀態;讀寫時鐘、中斷等暫存器;訪問儲存保護系統、地址重定位系統及所有的I/O指令。

根據Popek和Goldberg的定義,指令集支援虛擬化的前提是:所有敏感指令都是特權指令。很可惜x86指令集不能滿足這個要求。

虛擬化場景下,要求將GuestOS核心的特權解除,從原來的0降低到1或者3。這部分特權指令在Guest OS中發生的時候,就會產生Trap,被VMM捕獲,從而由VMM完成。這就是虛擬的本質方法,特權解除和陷入模擬(Privilege deprivileging/Trap-and-Emulation)

。虛擬化場景中敏感指令必須被VMM捕獲並完成。對於一般 RISC 處理器,如 MIPS,PowerPC 以及SPARC,敏感指令肯定是特權指令,但是x86 例外,x86絕大多數的敏感指令是特權指令,但是由於部分敏感指令不是特權指令,執行這些指令的時候不會自動trap被VMM捕獲。

 

2、二進位制翻譯技術

採用模擬模擬的方式模擬和虛擬化x86架構的CPU,但是由於x86架構的CPU中,不是所有的敏感指令都是特權指令,所以並不能完全的解決掉那些不是特權指令的敏感指令的模擬模擬問題。例如SGDT, SLDT, SIDT …

由於模擬模擬技術固有的缺陷,導致對CPU的虛擬化並不完整。所以也導致了基於x86的虛擬化難以和其他CPU架構一樣實現虛擬化。比如IBM的Power CPU架構就很早具備了虛擬化的技術並使用於實踐。

這個現象在1999年得到改善,VMware通過二進位制翻譯技術完成了對x86 CPU架構的完全虛擬化。

其主要採用優先順序壓縮技術(Ring Compression)二進位制程式碼翻譯技術(Binary Translation)。優先順序壓縮技術讓VMM和Guest執行在不同的特權級下。對x86架構而言,即VMM執行在最高特權級別Ring 0下,Guest OS執行在Ring 1下,使用者應用執行在Ring 3下。因此,Guest OS的核心指令無法直接下達到計算機系統硬體執行,而是需要經過VMM的捕獲和模擬執行(部分難以虛擬化的指令需要通過二進位制翻譯【Binary Translation】技術進行轉換)。如下圖所示。

wKioL1afFsDjjbbTAAAl_Q4fU1I877.png

特權級我想在這裡就不用多說,大家都比較清楚,說說大家可能不清楚的二進位制程式碼翻譯技術。二進位制翻譯技術簡稱BT,是一種直接翻譯可執行二進位制程式的技術,能夠把一種處理器上的二進位制程式翻譯到另外一種處理器上執行。二進位制翻譯技術將機器程式碼從源機器平臺對映(翻譯)至目標機器平臺,包括指令語義與硬體資源的對映,使源機器平臺上的程式碼“適應”目標平臺。因此翻譯後的程式碼更適應目標機器,具有更高的執行時效率。二進位制翻譯系統是位於應用程式和計算機硬體之間的一個軟體層,它很好地降低了應用程式和底層硬體之間的耦合度,使得二者可以相對獨立地發展和變化。二進位制翻譯也是一種編譯技術,它與傳統編譯的差別在於其編譯處理物件不同。傳統編譯處理的物件是某一種高階語言,經過編譯處理生成某種機器的目的碼;二進位制翻譯處理的物件是某種機器的二進位制程式碼,該二進位制程式碼是通過傳統編譯過程生成的,經過二進位制翻譯處理後生成另一種機器的二進位制程式碼。

根據不同的實現方式,二進位制翻譯技術可分為三大類:解釋執行,靜態翻譯和動態翻譯。

  程式碼解釋執行

解釋執行(Interpretation)過程對源機器程式碼中的每條指令實時解釋執行,系統不儲存且不快取解釋過的指令,不需要使用者干涉,也不進行任何優化。直譯器相對容易開發,比較容易與老的體系結構高度相容,但效率很差。

  靜態二進位制翻譯

在靜態二進位制翻譯(SBT,Static BinaryTranslation)中,程式碼在執行之前被離線翻譯,根據目標機器的指令結構生成一個新的程式,然後直接執行這個翻譯後生成的程式。靜態翻譯器的離線翻譯過程不會給程式執行帶來額外開銷,因此可以充分採用各種優化措施生產高質量程式碼,大大提高執行時效率。

  動態二進位制翻譯

動態二進位制翻譯(DBT,Dynamic BinaryTranslation)則在程式執行時對執行到的程式碼片段進行翻譯,克服了靜態翻譯所無法解決的一些困難,如執行時動態資訊收集,程式碼挖掘,自修改程式碼和精確中斷問題。而且動態翻譯器對使用者完全透明,無需使用者干預。雖然動態翻譯有上述諸多優點,翻譯過程卻由於受到動態執行的限制而不能像靜態翻譯那樣進行完全細緻的優化,使得翻譯生成的程式碼效率比靜態翻譯器差。

三種二進位制翻譯技術的比較

wKiom1afFp-iEdF_AACk-KSZCrc149.png

解釋執行是最易實現的一種翻譯技術,但是其繁瑣的實現方式大大降低了翻譯系統的執行效率。靜態翻譯雖然能提供高效的執行時效能,但由於無法在靜態環境下覆蓋所有程式碼,無法脫離對直譯器的依賴。與上述兩種相比,動態翻譯很好的解決了程式碼覆蓋、自修改程式碼和精確中斷等諸多問題,同時也能提供可接受的執行效率。因此VMware基於動態二進位制翻譯技術實現了x86架構的CPU的虛擬化。

wKioL1afFvXSPZvRAAC6ySjX1WQ706.png

典型動態二進位制翻譯系統結構所示,被翻譯的程式碼稱為源機器程式碼,在宿主機上執行的程式碼稱為目標機器程式碼,一個典型的動態二進位制翻譯器主要包括兩個模組:翻譯引擎和執行引擎。其中翻譯器引擎負責將源機器程式碼翻譯程式碼翻譯成目標機器程式碼;執行引擎負責準備目標機器程式碼執行的上下文環境(Execution Context)然後從目標機器程式碼快取中找到源機器程式碼對應的目的碼並執行。

其基本執行流程如下:

  查詢(Lookup)階段

這個階段查詢目的碼塊是否存在於目的碼快取中,如果存在則返回目標塊入口地址,如果不存在則進入翻譯階段。

  上下文切換(Context Switch)階段

當一個目的碼塊被查詢到或者翻譯模組生成的時候,二進位制翻譯系統會執行一次控制權轉移。系統會把控制權交給執行模組去執行該目的碼塊,目的碼塊執行完畢後系統需要恢復執行引擎的控制權。一次控制權轉移需要儲存程式的上下文環境。

  翻譯(Translation)階段

完成從源機器二進位制程式碼到目標機器二進位制程式碼的翻譯。包括解碼、中間程式碼優化、編碼三個子階段。

  執行和連結(Executing & Linking)階段

當基本塊被翻譯生成目的碼塊之後,依照原始碼的控制流完成目的碼塊之間的直接以及間接跳轉的連結,並依次執行目的碼塊。

3、總結

在沒有CPU硬體輔助虛擬化技術之前,對於X86架構的CPU就採用模擬和二進位制翻譯的技術對CPU進行虛擬化實現,但是模擬的方式存在固有缺陷,並不完全虛擬化了x86的CPU架構。而二進位制翻譯技術則採用完全不同的思路實現了x86架構的CPU虛擬化。其實對於x86的CPU虛擬化,其難點就在於對其特權指令和敏感指令的虛擬化實現,當然,在實現了CPU的指令這一難題之後,還有一個難題在等著我們!那就是x86架構的CPU排程問題?

在虛擬化環境下,x86架構的CPU有什麼排程問題?

1、 虛擬CPU和物理CPU之間的對應關係?

2、 虛擬CPU和物理CPU之間的資源分配?

3、 虛擬CPU和虛擬CPU之間的優先順序?

4、 多核虛擬CPU架構vSMP和vNUMA與物理多核CPU架構SMP和NUMA之間的排程和負載均衡?

相關推薦

CPU軟體虛擬化技術

我們在前面的文章中提到了虛擬化技術的大致分類情況,即分為全虛擬化、半虛擬化和硬體輔助虛擬化3大類。而我們虛擬化技術最主要的虛擬主體就是我們的硬體CPU、記憶體和IO,那麼我們的CPU在全虛擬化模式下如何工作,在半虛擬化下如何工作,在硬體輔助虛擬化模式下如何工作?或著說細分下來,我們又可以分為: CPU的全虛

CPU軟體虛擬化技術

在2003年出現的Xen,使用了另外的一種半虛擬化的方案來解決x86架構下CPU的敏感指令問題。主要採用Hypercall技術。Guest OS的部分程式碼被改變,從而使Guest OS會將和特權指令相關的操作都轉換為發給VMM的Hypercall(超級呼叫),由VMM繼續進行處理。而Hypercall支援的

如何知道 CPU 是否支持虛擬化技術(VT)

發行版 之前 四種方法 hardware mar box 指南 chm rep 作者: Sk 譯者: LCTT geekpi 我們已經知道如何檢查你的 Linux 操作系統是 32 位還是 64 位以及如何知道你的 Linux 系統是物理機還是虛擬機。今天,我

/半虛擬化、硬體/軟體輔助的虛擬化之間的區別與聯絡

全虛擬化 不需要對GuestOS作業系統軟體的原始碼做任何的修改,就可以執行在這樣的VMM中 在全虛擬化的虛擬平臺中,GuestOS並不知道自己是一臺虛擬機器,它會認為自己就是執行在計算機物理硬體裝置上的HostOS。因為全虛擬化的VMM會將一個OS所能夠操作的CPU、記憶體、外設等物理

[虛擬化] CPU虛擬化技術 - Introduction

  虛擬化技術的分類主要有伺服器虛擬化、儲存虛擬化、網路虛擬化、應用虛擬化。   伺服器虛擬化技術按照虛擬物件來分,可分為:CPU虛擬化、記憶體虛擬化、I/O虛擬化;           按照虛擬化程度可分為:全虛擬化、半虛擬化、硬體輔助虛擬化。   將不同的虛擬化物件和程度組合,可得出 9種 不同的伺

CPU虛擬化技術

CPU虛擬化:在物理機(宿主機)中通過執行緒或程序這種純軟體方式模擬出假的CPU 物理cpu核數 > 虛擬cpu總核數的原因是:虛擬出來的每顆cpu實際上就是一個執行緒或者程序。虛擬cpu過多時,需要進行程序/執行緒切換,比較浪費 1、模擬:使用軟體方式實現CPU,需要模擬環0,1

CPU虛擬化技術與優勢

(主要講解雲端計算技術的核心技術之一虛擬化技術,課程首先說明了虛擬化技術的主要作用以及常見實現方法,並針對硬體中常用的虛擬化技術(CPU、記憶體、IO)進行詳細的講解,最後還針對目前流行的開源虛擬化專案進行說明,講解其出現的漏洞以及阿里雲是怎樣完成漏洞分析和處理的。)

檢視電腦CPU是否支援VT虛擬化的幾個軟體

安裝虛擬機器CPU支援虛擬化可提供更多的功能及更好的效能,怎麼檢視電腦CPU是否支援虛擬化呢?1.如果CPU品牌為Interl,可使用Inter官方工具Intel® Processor Identification Utility檢視:2.如果CPU為AMD,使用AMD官

虛擬化技術基礎原理詳解

虛擬化技術基礎原理詳解DISK : IO調度模式 CFQ deadline anticipatory NOOP/sys/block/<device>/queue/schedulerMemory: MMU TLB vm.swappiness={0..100},使用交換分區的

虛擬化技術對照:Xen vs KVM

linu citrix line 最大 包含 創建 時間 定性 sso 恒天雲:http://www.hengtianyun.com/download-show-id-68.html 一、說明 本文主要從功能方面和性能方面對Xen和KVM對照分析,分析出其優缺

內核級虛擬化技術

計算機系統 兩種模式 openstack 隱藏 vm tools ges 而在 3.2 比較 這篇可能講的有一點點的無聊,因為基本上是概念性的東西,我也是理解了很久才慢慢的搞懂的。 一、虛擬化與虛擬化技術   1.1、虛擬化的定義   虛擬化主要指的是特殊的技術,通過

Vmware虛擬化技術

vmware虛擬化虛擬化 定義: 把硬件資源從物理方式轉變為邏輯方式,打破原有物理結構, 使用戶可以靈活管理這些資源,並且允許1臺物理機上同時運行多個操作系統,實現資源利用率最大化和靈活管理的一項技術。 優勢: (1) 減少服務器數量,降低硬件采購成本。 (2) 資

KVM虛擬化技術

kvm虛擬化 KVM虛擬化虛擬化介紹: VMware,Hyper-v, XenSer, XenClient,

虛擬化分類(半虛擬化虛擬化

span bsp 完全 捕獲 strong spa kvm virtual down 虛擬化分類 1:完全虛擬化(Full Virtualization) 需要跑在宿主機之上 全虛擬化也成為原始虛擬化技術,該模型使用虛擬機協調guest操作系統和原始硬件,VMM在gu

虛擬化技術入門與實踐--庖丁解牛

虛擬化hypervisor 之於操作系統類似於操作系統之於進程。它們為執行提供獨立的虛擬硬件平臺,而虛擬硬件平臺反過來又提供對底層機器的虛擬的完整訪問。但並不是所有 hypervisor 都是一樣的,這是件好事,因為 Linux 就是以靈活性和選擇性著稱。本文首先簡要介紹虛擬化和 hypervisor,然後探

linux-KVM虛擬化技術

linux運維 計算機網絡 達內 紅帽 linux系統操作 kvm虛擬化 虛擬化概述Virtualization 資源管理– x個物理資源 --> y個邏輯資源– 實現程度:完全、部分、硬件輔助(CPU)手動新建一臺虛擬機: 虛擬機名字:exam

linux運維、架構之路-KVM虛擬化技術

sna 運維 3.1 png 配置 tools 關閉 wall ati 一、雲計算概述 雲計算:是一種資源使用和交付模式 虛擬化:一種具體的技術,用來將物理機虛擬成為多個相互獨立的虛擬機。雲計算不等於虛擬化,雲計算是使用了虛擬化的技術做支撐 二、KV

虛擬化技術總覽

困難 入門 圖片 kvm -m 客戶 朋友 logs 技術分享 虛擬化本質上是軟/硬件層的抽象 說起虛擬化,相信大家應該都不陌生,像虛擬內存、Java 虛擬機、Android 模擬器這些都是虛擬化技術的體現,為什麽這樣說,這個就要回到虛擬化技術的本質上——虛擬化就是由位於下

網絡虛擬化技術對比

網絡虛擬化標題索引追朔原因技術對比總結配置本文出自 “一步一印,有印為證” 博客,謝絕轉載!網絡虛擬化技術對比

虛擬化技術之KVM

iss iptable roo num bytes ebo uuid screen ext 一、kvm環境準備 kvm介紹: KVM是Kernel Virtual Machine的簡寫,目前Red Hat只支持在64位的RHEL5.4及以上的系統運行KVM,同時硬