偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CPU硬件輔助虛擬化技術(shù)

云計(jì)算 虛擬化
目前主要有Intel的VT-x和AMD的AMD-V這兩種技術(shù)。其核心思想都是通過(guò)引入新的指令和運(yùn)行模式,使VMM和Guest OS分別運(yùn)行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS運(yùn)行在Ring 0下。通常情況下,Guest OS的核心指令可以直接下達(dá)到計(jì)算機(jī)系統(tǒng)硬件執(zhí)行,而不需要經(jīng)過(guò)VMM。當(dāng)Guest OS執(zhí)行到特殊指令的時(shí)候,系統(tǒng)會(huì)切換到VMM,讓VMM來(lái)處理特殊指令。

[[317685]]

目前主要有Intel的VT-x和AMD的AMD-V這兩種技術(shù)。其核心思想都是通過(guò)引入新的指令和運(yùn)行模式,使VMM和Guest OS分別運(yùn)行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS運(yùn)行在Ring 0下。通常情況下,Guest OS的核心指令可以直接下達(dá)到計(jì)算機(jī)系統(tǒng)硬件執(zhí)行,而不需要經(jīng)過(guò)VMM。當(dāng)Guest OS執(zhí)行到特殊指令的時(shí)候,系統(tǒng)會(huì)切換到VMM,讓VMM來(lái)處理特殊指令。

1、Intel VT-x技術(shù)

為彌補(bǔ)x86處理器的虛擬化缺陷,市場(chǎng)的驅(qū)動(dòng)催生了VT-x,Intel推出了基于x86架構(gòu)的硬件輔助虛擬化技術(shù)Intel VT(Intel Virtualization Technology)。

目前,Intel VT技術(shù)包含CPU、內(nèi)存和I/O三方面的虛擬化技術(shù)。CPU硬件輔助虛擬化技術(shù),分為對(duì)應(yīng)安騰架構(gòu)的VT-i(Intel Virtualization Technology for ltanium)和對(duì)應(yīng)x86架構(gòu)的VT-x(Intel Virtualization Technologyfor x86)兩個(gè)版本。內(nèi)存硬件輔助虛擬化技術(shù)包括EPT(Extended Page Table)技術(shù)。I/0硬件輔助虛擬化技術(shù)的代表hatelVY-d(Intel Virtualization Technology for Directed I/0)。

IntelVT-x技術(shù)解決了早期x86架構(gòu)在虛擬化方面存在的缺陷,可使未經(jīng)修改的GuestOS運(yùn)行在特權(quán)級(jí)0,同時(shí)減少VMM對(duì)Guest OS的干預(yù)。Intel VT-d技術(shù)通過(guò)使VMM將特定I/O設(shè)備直接分配給特定的Guest OS,減少VMM對(duì)I/O處理的管理,不但加速數(shù)據(jù)傳輸,且消除了大部分性能開(kāi)銷(xiāo)。如下圖所示。CPU硬件輔助虛擬化技術(shù)簡(jiǎn)要說(shuō)明流程圖:

CPU硬件輔助虛擬化技術(shù)

效法IBM 大型機(jī),VT-x提供了2 個(gè)運(yùn)行環(huán)境:根(Root)環(huán)境和非根(Non-root)環(huán)境。根環(huán)境專(zhuān)門(mén)為VMM準(zhǔn)備,很像原來(lái)沒(méi)有VT-x 的x86,只是多了對(duì)VT-x 支持的幾條指令。非根環(huán)境作為一個(gè)受限環(huán)境用來(lái)運(yùn)行多個(gè)虛擬機(jī)。

CPU硬件輔助虛擬化技術(shù)

如上圖所示,根操作模式與非根操作模式都有相應(yīng)的特權(quán)級(jí)0至特權(quán)級(jí)3。VMM運(yùn)行在根模式的特權(quán)級(jí)0,GuestOS的內(nèi)核運(yùn)行在非根模式的特權(quán)級(jí)0,GuestOS的應(yīng)用程序運(yùn)行在非根模式的特權(quán)級(jí)3。運(yùn)行環(huán)境之間相互轉(zhuǎn)化,從根環(huán)境到非根環(huán)境叫VMEntry;從非根環(huán)境到根環(huán)境叫VMExit。VT-x定義了VMEntry操作,使CPU由根模式切換到非根模式,運(yùn)行客戶(hù)機(jī)操作系統(tǒng)指令。若在非根模式執(zhí)行了敏感指令或發(fā)生了中斷等,會(huì)執(zhí)行VMExit操作,切換回根模式運(yùn)行VMM。

根模式與非根模式之問(wèn)的相互轉(zhuǎn)換是通過(guò)VMX操作實(shí)現(xiàn)的。VMM 可以通過(guò)VMXON 和VMXOFF打開(kāi)或關(guān)閉VT-x。如下圖所示:

CPU硬件輔助虛擬化技術(shù)

VMX操作模式流程:

1)、VMM執(zhí)行VMXON指令進(jìn)入VMX操作模式。

2)、VMM可執(zhí)行VMLAUNCH指令或VMRESUME指令產(chǎn)生VM Entry操作,進(jìn)入到Guest OS,此時(shí)CPU處于非根模式。

3)、Guest 0S執(zhí)行特權(quán)指令等情況導(dǎo)致VMExit的發(fā)生,此時(shí)將陷入VMM,CPU切換為根模式。VMM根據(jù)VMExit的原因作出相應(yīng)處理,處理完成后將轉(zhuǎn)到2),繼續(xù)運(yùn)行GuestOS。

4)、VMM可決定是否退出VMX操作模式,通過(guò)執(zhí)行VMXOFF指令來(lái)完成。

為更好地支持CPU虛擬化,VMX新定義了虛擬機(jī)控制結(jié)構(gòu)VMCS(Virtual Machine ControlStructure)。VMCS是保存在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),其包括虛擬CPU的相關(guān)寄存器的內(nèi)容及相關(guān)的控制信息。CPU在發(fā)生VM Entry或VMExit時(shí),都會(huì)查詢(xún)和更新VMCS。VMM也可通過(guò)指令來(lái)配置VMCS,達(dá)到對(duì)虛擬處理器的管理。VMCS架構(gòu)圖如下圖所示:

CPU硬件輔助虛擬化技術(shù)

每個(gè)虛擬處理器都需將VMCS與內(nèi)存中的一塊區(qū)域聯(lián)合起來(lái),此區(qū)域稱(chēng)為VMCS區(qū)域。對(duì)VMCS區(qū)域的操縱是通過(guò)VMCS指針來(lái)實(shí)現(xiàn)的,這個(gè)指針是一個(gè)指向VMCS的64位的地址值。VMCS區(qū)域是一個(gè)最大不超過(guò)4KB的內(nèi)存塊,且需4KB對(duì)齊。

VMCS區(qū)域分為三個(gè)部分:偏移0起是VMCS版本標(biāo)識(shí),通過(guò)不同的版本號(hào),CPU可維護(hù)不同的VMCS數(shù)據(jù)格式;偏移4起是VMX中止指示器,在VMX中止發(fā)生時(shí),CPU會(huì)在此處存入中止的原因;偏移8起是VMCS數(shù)據(jù)區(qū),這一部分控制VMX非根操作及VMX切換。

VMCS 的數(shù)據(jù)區(qū)包含了VMX配置信息:VMM在啟動(dòng)虛擬機(jī)前配置其哪些操作會(huì)觸發(fā)VMExit。VMExit 產(chǎn)生后,處理器把執(zhí)行權(quán)交給VMM 以完成控制,然后VMM 通過(guò)指令觸發(fā)VMEntry 返回原來(lái)的虛擬機(jī)或調(diào)度到另一個(gè)虛擬機(jī)。

VMCS 的數(shù)據(jù)結(jié)構(gòu)中,每個(gè)虛擬機(jī)一個(gè),加上虛擬機(jī)的各種狀態(tài)信息,共由3個(gè)部分組成,如之前的VMCS架構(gòu)圖所示:

1)、Gueststate:該區(qū)域保存了虛擬機(jī)運(yùn)行時(shí)的狀態(tài),在VMEntry 時(shí)由處理器裝載;在VMExit時(shí)由處理器保存。它又由兩部分組成:

  • Guest OS寄存器狀態(tài)。它包括控制寄存器、調(diào)試寄存器、段寄存器等各類(lèi)寄存器的值。
  • Guest OS非寄存器狀態(tài)。用它可以記錄當(dāng)前處理器所處狀態(tài),是活躍、停機(jī)(HLT)、關(guān)機(jī)(Shutdown)還是等待啟動(dòng)處理器間中斷(Startup-IPI)。

2)、Hoststate:該區(qū)域保存了VMM 運(yùn)行時(shí)的狀態(tài),主要是一些寄存器值,在VMExit 時(shí)由處理器裝載。

3)、Control data:該區(qū)域包含幾部分?jǐn)?shù)據(jù)信息,分別是:

  • 虛擬機(jī)執(zhí)行控制域(VM-Execution control fields)。VMM 主要通過(guò)配置該區(qū)域來(lái)控制虛擬機(jī)在非根環(huán)境中的執(zhí)行行為?;卺樐_的虛擬機(jī)執(zhí)行控制。它決定在發(fā)生外部中斷或不可屏蔽中斷(NMI)要不要發(fā)生VMExit?;谔幚砥鞯奶摂M機(jī)執(zhí)行控制。它決定虛擬機(jī)執(zhí)行RDTSC、HLT、INVLPG 等指令時(shí)要不要發(fā)生VMExit。
  • VMExit 控制域(VMExit control fields)。該區(qū)域控制VMExit 時(shí)的行為。當(dāng)VMExit 發(fā)生后處理器是否處于64 位模式;當(dāng)因?yàn)橥獠恐袛喟l(fā)生VMExit 時(shí),處理器是否響應(yīng)中斷控制器并且獲得中斷向量號(hào)。VMM 可以用它來(lái)定制當(dāng)VMExit 發(fā)生時(shí)要保存哪些MSR 并且裝載哪些MSR。MSR是CPU的模式寄存器,設(shè)置CPU的工作環(huán)境和標(biāo)識(shí)cpu的工作狀態(tài)。
  • VMEntry 控制域(VMEntry control fields)。該區(qū)域控制VMEntry 時(shí)的行為。它決定處理器VMEntry 后是否處于IA-32e 模式。與VMExit 的MSR控制類(lèi)似,VMM 用它來(lái)定制當(dāng)VMEntry 發(fā)生時(shí)要裝載哪些MSR。VMM 可以配置VMEntry 時(shí)通過(guò)虛擬機(jī)的IDT向其發(fā)送一個(gè)事件。在此可以配置將使用IDT 的向量、中斷類(lèi)型(硬件或軟件中斷)、錯(cuò)誤碼等。
  • VMExit 信息域(VMExit information fields)。該只讀區(qū)域包括最近一次發(fā)生的VMExit 信息。試圖對(duì)該區(qū)域執(zhí)行寫(xiě)操作將產(chǎn)生錯(cuò)誤。。此處存放VMExit 的原因以及針對(duì)不同原因的更多描述信息、中斷或異常向量號(hào)、中斷類(lèi)型和錯(cuò)誤碼、通過(guò) IDT 發(fā)送事件時(shí)產(chǎn)生的VMExit 信息、指令執(zhí)行時(shí)產(chǎn)生的 VMExit 信息。

有了VMCS結(jié)構(gòu)后,對(duì)虛擬機(jī)的控制就是讀寫(xiě)VMCS結(jié)構(gòu)。后面對(duì)vCPU設(shè)置中斷,檢查狀態(tài)實(shí)際上都是在讀寫(xiě)VMCS數(shù)據(jù)結(jié)構(gòu)。

2、AMD-V技術(shù)

我們?cè)谏厦嫘」?jié)介紹了 Intel 的硬件輔助虛擬化技術(shù),那么 AMD 的硬件輔助虛擬化技術(shù)又有什么特點(diǎn)呢?AMD 從 2006 年便開(kāi)始致力于硬件輔助虛擬化技術(shù)的研究,AMD-V全稱(chēng)是AMD Virtualization,AMD-V從代碼的角度分別稱(chēng)為 AMD和 SVM,AMD開(kāi)發(fā)這項(xiàng)虛擬化技術(shù)時(shí)的內(nèi)部項(xiàng)目代碼為Pacifica,是AMD推出的一種硬件輔助虛擬化技術(shù)。

CPU硬件輔助虛擬化技術(shù)

Intel VT-x 和 AMD-V 提供的特征大多功能類(lèi)似,但名稱(chēng)可能不一樣,如 Intel VT-x 將用于存放虛擬機(jī)狀態(tài)和控制信息的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為 VMCS, 而 AMD-V 稱(chēng)之為VMCB;Intel VT-x 將 TLB 記錄中用于標(biāo)記 VM 地址空間的字段為 VPID, 而AMD-V 稱(chēng)之為 ASID;Intel VT-x 將二級(jí)地址翻譯稱(chēng)之為 EPT, AMD 則稱(chēng)為 NPT,等等一些區(qū)別。盡管其相似性,Intel VT-x 和 AMD-V 在實(shí)現(xiàn)上對(duì) VMM 而言是不兼容的。

AMD-V 在 AMD 傳統(tǒng)的x86-64 基礎(chǔ)上引入了“guest”操作模式。“guest”操作模式就是 CPU 在進(jìn)入客操作系統(tǒng)運(yùn)行時(shí)所處的模式。“guest”操作模式為客操作系統(tǒng)設(shè)定了一個(gè)不同于 VMM 的運(yùn)行環(huán)境而不需要改變客操作系統(tǒng)已有的 4 個(gè)特權(quán)級(jí)機(jī)制,也就是說(shuō)在“guest”模式下,客操作系統(tǒng)的內(nèi)核仍然運(yùn)行在 Ring 0, 用戶(hù)程序仍然在 Ring 3。裸機(jī)上的操作系統(tǒng)和 VMM 所在的操作模式依然和傳統(tǒng)的 x86 中一樣,且稱(chēng)之為“host”操作模式。VMM 通過(guò)執(zhí)行 VMRUN 指令使CPU 進(jìn)入“guest”操作模式而執(zhí)行客操作系統(tǒng)的代碼;客操作系統(tǒng)在運(yùn)行時(shí),遇到敏感指令或事件,硬件就執(zhí)行 VMEXIT 行為,使 CPU 回到“host”模式而執(zhí)行 VMM 的代碼。VMRUN 指令運(yùn)行的參數(shù)是一個(gè)物理地址指針,其指向一個(gè) Virtual Machine Control Block (VMCB) 的內(nèi)存數(shù)據(jù)結(jié)構(gòu), 該數(shù)據(jù)結(jié)構(gòu)包含了啟動(dòng)和控制一個(gè)虛擬機(jī)的全部信息。

CPU硬件輔助虛擬化技術(shù)

“guest”模式的意義在于其讓客操作系統(tǒng)處于完全不同的運(yùn)行環(huán)境,而不需要改變客操作系統(tǒng)的代碼。“guest”模式的設(shè)立在系統(tǒng)中建立了一個(gè)比 Ring 0 更強(qiáng)的特權(quán)控制,即客操作系統(tǒng)的 Ring 0 特權(quán)必須讓位于 VMM 的 Ring 0 特權(quán)??筒僮飨到y(tǒng)上運(yùn)行的那些特權(quán)指令,即便是在 Ring 0 上也變的可以被 VMM 截取的了,“Ring Deprivileging”由硬件自動(dòng)搞定。此外,VMM 還可以通過(guò) VMCB 中的各種截取控制字段選擇性的對(duì)指令和事情進(jìn)行截取,或設(shè)置有條件的截取,所有的敏感的特權(quán)或非特權(quán)指令都在其控制之中。

CPU硬件輔助虛擬化技術(shù)

VMCB 數(shù)據(jù)結(jié)構(gòu)主要包含如下內(nèi)容 :

1. 用于描述需要截取的指令或事件的字段列表。其中 :

  • 2 個(gè) 16 位的字段用于控制對(duì) CR 類(lèi)控制寄存器讀寫(xiě)的截取
  • 2 個(gè) 16 位的字段用于控制對(duì) DR 類(lèi)調(diào)試寄存器的讀寫(xiě)的截取
  • 一個(gè) 32 位的字段用于控制 exceptions 的截取
  • 一個(gè) 64 位的字段用于控制各種引起系統(tǒng)狀態(tài)變化的事件或指令的截取,如 INTR, NMI, SMI 等事 件, HLT, CPUID,INVD/WBINVD,INVLPG/INVLPGA,MWAIT 等指令, 還包括兩位分別標(biāo)志是否對(duì) IO 指令和 MSR 寄存器的讀寫(xiě)進(jìn)行控制
  • 指向IO端口訪問(wèn)控制位圖和MSR讀寫(xiě)控制位圖的物理地址指針字段。該位圖用于差別性地控制虛擬機(jī)對(duì)不同的 IO 端口和 MSR 寄存器進(jìn)行讀寫(xiě)訪問(wèn)。
  • 描述虛擬機(jī)CPU狀態(tài)的信息。包含除通用寄存器外的大部分控制寄存器,段寄存器,描述符表寄存器,代碼指針等。RAX 寄存器也在其中,因?yàn)?RAX 在 VMM 執(zhí)行 VMRUN 時(shí)是用來(lái)存放VMCB 物理地址的。對(duì)于段寄存器,該信息中還包含段寄存器對(duì)應(yīng)的段描述符,也就那些傳統(tǒng) x86 上對(duì)軟件隱藏的信息。
  • 對(duì)虛擬機(jī)的執(zhí)行進(jìn)行控制的字段。主要是控制虛擬機(jī)中斷和 NPT 的字段。
  • 指示虛擬機(jī)進(jìn)入“guest”模式后要執(zhí)行的行動(dòng)的字段。包括用來(lái)描述 VMM 向虛擬機(jī)注入的中斷或異常的信息的字段。注入的中斷或異常在 VMRUN 進(jìn)入“guest”模式后立即執(zhí)行,就象完全發(fā)生在虛擬機(jī)內(nèi)一樣。
  • 提供VMEXIT信息的字段。包括導(dǎo)致 VMEXIT 的事件的代碼,異?;蛑袛嗟奶?hào)碼,page fault 的線性地址,被截獲的指令的編碼等。
CPU硬件輔助虛擬化技術(shù)

VMCB 以及其涉及的控制位圖,完全通過(guò)物理地址進(jìn)行指向,這就避免了“guest”和“host”模式切換的過(guò)程依賴(lài)于“guest”空間的線性地址 ( 傳統(tǒng)操作系統(tǒng)內(nèi)用戶(hù)空間到內(nèi)核的切換確實(shí)依賴(lài)于 IDT 中提供的目標(biāo)的線性地址 ),使得 VMM 可以采用和客操作系統(tǒng)完全不同的地址空間。

VMCB 的內(nèi)容在物理上被分成了倆部分,其中用于保存虛擬機(jī) CPU 狀態(tài)的信息占據(jù) 2048 字節(jié)的后半部分,我們可稱(chēng)之為 VMCB.SAVE;其他信息,占據(jù)前 1024 字節(jié)范圍,我們可稱(chēng)之為 VMCB.CONTROL。

VMRUN 命令以 VMCB 為參數(shù),使CPU 進(jìn)入“guest”狀態(tài), 按 VMCB.SAVE 的內(nèi)容恢復(fù)虛擬機(jī)的 CPU 寄存器狀態(tài),并按 VMCB.SAVE 中 CS:RIP 字段指示的地址開(kāi)始執(zhí)行虛擬機(jī) 的代碼, 并將之前 VMM 的 CPU 狀態(tài)保存在MSR_VM_HSAVE_PA 寄存器所指向的物理內(nèi)存區(qū)域中。VMRUN 所保存的 VMM 的 CPU狀態(tài)的 CS:RIP 實(shí)際上就是 VMM 的代碼中 VMCB 的下一個(gè)指令,當(dāng)虛擬機(jī)因某種原因而導(dǎo)致 #VMEXIT 時(shí),VMM 會(huì)從 VMRUN 后的一條指令開(kāi)始執(zhí)行。CPU 執(zhí)行 #VMEXIT 行為時(shí),會(huì)自動(dòng)將虛擬機(jī)的狀態(tài)保存到 VMCB.SAVE 區(qū),并從 MSR_VM_HSAVE_PA 指定的區(qū)域加載 VMM 的 CPU 狀態(tài)。

VMLOAD 和 VMSAVE 指令是對(duì) VMRUN 的補(bǔ)充,他們用來(lái)加載和恢復(fù)一些并不需要經(jīng)常使用的 CPU 狀態(tài),如 FS, GS, TR, LDTR 寄存器以及其相關(guān)的隱含的描述符寄存器的內(nèi)容,VMLOAD 和 VMSAVE 可以讓 VMM 的實(shí)現(xiàn)對(duì)“guest”進(jìn)入和退出的過(guò)程進(jìn)行優(yōu)化,讓多數(shù)情況下只使用 VMRUN 進(jìn)行最少的狀態(tài)保存和恢復(fù)。

VMMCALL 指令是 AMD-V 為客操作系統(tǒng)內(nèi)核提供的明確的功能調(diào)用接口,類(lèi)似于 syscall 指令 ( 從 Ring3 到 Ring 0), VMMCALL 讓客操作系統(tǒng)直接執(zhí)行 #VMEXIT 而進(jìn)入 VMM,請(qǐng)求VMM 的服務(wù)。

3、總結(jié)

回顧一下CPU虛擬化技術(shù)的實(shí)現(xiàn),純軟件的CPU虛擬化使用了陷入-模擬的模式來(lái)模擬特權(quán)指令,而在x86架構(gòu)中由于只能模擬特權(quán)指令,無(wú)法模擬某些敏感指令而無(wú)法實(shí)現(xiàn)完全的虛擬化。(在x86架構(gòu)中,特權(quán)指令一定是敏感指令,但是敏感指令比特權(quán)指令多,造成某系敏感指令不是特權(quán)指令而無(wú)法模擬,使得CPU虛擬化異常),而硬件輔助虛擬化引入了根模式(root operation)和非根模式(none-root operation),每種模式都有ring0-3的四級(jí)特權(quán)級(jí)別。所以,在硬件輔助虛擬化中,陷入的概念實(shí)際上被VM-EXIT操作取代了,它代表從非根模式退出到根模式,而從根模式切換到非根模式是VM-Entry操作。

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2011-11-03 09:42:20

虛擬化硬件虛擬化輔助虛擬化

2009-05-27 10:34:50

硬件輔助虛擬化

2009-01-14 18:15:40

服務(wù)器虛擬化VMware

2010-05-14 14:47:46

x86虛擬機(jī)

2009-04-16 18:52:43

Vmware虛擬化虛擬機(jī)

2009-07-16 18:45:37

2013-01-10 10:15:22

低功耗CPU虛擬化

2011-12-31 09:37:36

虛擬化處理器虛擬化CPU

2011-06-29 10:59:27

虛擬化服務(wù)器硬件

2018-04-08 09:20:00

LinuxCPU虛擬化技術(shù)

2013-07-09 17:40:27

虛擬化硬件

2019-02-28 15:50:18

硬件虛擬化內(nèi)存

2013-07-04 10:19:53

虛擬化硬件服務(wù)器內(nèi)存

2020-03-10 18:30:06

GPU虛擬化FPGA

2018-11-12 15:20:15

CPU虛擬化云計(jì)算

2011-07-04 09:53:40

虛擬化服務(wù)器虛擬化

2018-04-17 15:03:40

CPU虛擬化半虛擬化

2009-04-16 19:00:45

Vmware虛擬化惠普

2013-07-04 09:48:46

服務(wù)器虛擬化服務(wù)器硬件虛擬化成本

2009-04-16 18:56:19

Vmware服務(wù)器虛擬化AMD
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)