intel VT-X (VMX) spec 解讀


所有IA的介紹,參考: Intel® 64 and IA-32 Architectures Software Developer Manuals  內容非常多。 

虛擬化相關的主要是看 卷3,23-33章, pdf 如下:

wget https://software.intel.com/content/dam/develop/public/us/en/documents/325462-sdm-vol-1-2abcd-3abcd.pdf 

網上大家的分析,基本也是來自於這個文檔。

CHAPTER 23 INTRODUCTION TO VIRTUAL MACHINE EXTENSIONS

 23.1 OVERVIEW

VMX: virtual-machine extensions
VMX 指令見:《Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2B
VMX 其他方面和 system programming considerations 見《 Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3B. 》

23.2 VIRTUAL MACHINE ARCHITECTURE

 Virtual-machine monitors (VMM)
Guest software

 23.3 INTRODUCTION TO VMX OPERATION  

  • VMX root operation: VMM run in it
  • VMX non-root operation: guest software run in it
  • VM entries:Transitions into VMX non-root operation
  • VM exits: Transitions from VMX non-root operation to VMX root operation ,一些特殊的VMCALL 指令或者事件,導致VM退出到VMM中。

23.4 LIFE CYCLE OF VMM SOFTWARE 

VMLAUNCH 和 VMRESUME 指令 for VM Exit/VM Entry
VMXON 和 VMXOFF 指令for VMX啟動和結束

23.5 VIRTUAL-MACHINE CONTROL STRUCTURE 

VMX非根操作和VMX轉換由虛擬機控制結構(VMCS)的數據結構控制。
VMCS 指令來訪問VMCS , 讀寫由VMPTRST 和VMPTRLD兩個指令決定,配置通過VMREAD, VMWRITE, 和 VMCLEAR 來操作。
每個虛機的vCPU都是不同的VMCS。

23.6 DISCOVERING SUPPORT FOR VMX 

通過CPUID 查看是否支持VMX,CPUID.1:ECX.VMX[bit 5] = 1 , 第三章, “Instruction Set Reference, A-L” of Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A.
VMX其他的特性,通過VMX capability MSRs  查看。參考 Appendix A, “VMX Capability Reporting Facility”

23.7 ENABLING AND ENTERING VMX OPERATION  

23.8 RESTRICTIONS ON VMX OPERATION

 

24.1 OVERVIEW  

VMCS 指針必須4K邊界對齊。

邏輯處理當前VMCS 是激活的VMCS之一。

 

 

24.2 FORMAT OF THE VMCS REGION 

24.3 ORGANIZATION OF VMCS DATA  

 

24.4 GUEST-STATE AREA

24.4.1 Guest Register State 

24.4.2 Guest Non-Register State 

24.5 HOST-STATE AREA 

 

24.6 VM-EXECUTION CONTROL FIELDS 

VM執行控制字段控制VMX非根操作.

24.6.1 Pin-Based VM-Execution Controls 

控制異步事件的處理 

24.6.2 Processor-Based VM-Execution Controls 

控制同步事件的處理,這些事件主要是由特定指令的執行引起的。

24.6.3 Exception Bitmap 

異常位圖是一個32位字段,其中每個異常對應一位。 發生異常時,其向量會選擇該字段中的一個位。 如果該位為1,則異常導致VM退出。 如果該位為0,通過IDT傳遞異常, 該異常使用對應的異常向量描述符。

頁錯誤(矢量14的異常)是否導致VM退出, 由異常位圖中的第14位 以及由缺頁錯誤產生的錯誤碼和VMCS中的兩個32位字段(頁錯誤- 錯誤碼掩碼和頁錯誤錯誤碼匹配)。 有關詳細信息,請參見第25.2節。

24.6.4 I/O-Bitmap Addresses

 VM執行控制字段包括兩個64位物理地址的I / O位圖A和B(每一個的大小為4 KB)。 I / O位圖A的每一位表示一個端口,范圍為0000H至7FFFH。 I / O位圖B包含8000H至FFFFH范圍內的端口的位。

 當且僅當“使用I / O位圖”控制為1時,邏輯處理器才使用這些位圖。如果使用了位圖,則如果它訪問的端口對應的I / O位為1,則 / O指令的執行將導致VM退出。 有關詳細信息,請參見第25.1.3節。 如果使用位圖,則其地址必須4 KB對齊。

 24.6.5 Time-Stamp Counter Offset and Multiplier 

24.6.6 Guest/Host Masks and Read Shadows for CR0 and CR4
24.6.7 CR3-Target Controls

24.6.8 Controls for APIC Virtualization

24.6.10 Executive-VMCS Pointer

24.6.9 MSR-Bitmap Address
24.6.11 Extended-Page-Table Pointer (EPTP)

擴展頁表指針(EPTP)包含EPT PML4表的基地址(請參見第28.2.2節),以及其他EPT配置信息。

24.6.12 Virtual-Processor Identifier (VPID)

虛擬處理器標識符(VPID)是一個16位字段。 它僅在支持“啟用VPID” VM執行控制(1-setting)的處理器上存在。 有關使用此字段的詳細信息,請參見第28.1節。

24.6.13 Controls for PAUSE-Loop Exiting 

在支持“退出PAUSE循環” VM執行控制(1-setting)的處理器上,VM執行控制字段包括以下32位字段:


24.6.14 VM-Function Controls
24.6.15 VMCS Shadowing Bitmap Addresses


24.6.16 ENCLS-Exiting Bitmap


24.6.17 ENCLV-Exiting Bitmap


24.6.18 Control Field for Page-Modification Logging


24.6.19 Controls for Virtualization Exceptions


24.6.20 XSS-Exiting Bitmap

24.6.21 Sub-Page-Permission-Table Pointer (SPPTP)


24.7 VM-EXIT CONTROL FIELDS


24.7.1 VM-Exit Controls

24.7.2 VM-Exit Controls for MSRs

24.8 VM-ENTRY CONTROL FIELDS

24.8.1 VM-Entry Controls

24.8.2 VM-Entry Controls for MSRs


24.8.3 VM-Entry Controls for Event Injection

24.8.3 VM-Entry Controls for Event Injection

24.9.1 Basic VM-Exit Information


24.9.2 Information for VM Exits Due to Vectored Events

24.9.3 Information for VM Exits That Occur During Event Delivery


24.9.4 Information for VM Exits Due to Instruction Execution


24.9.5 VM-Instruction Error Field


24.10 VMCS TYPES: ORDINARY AND SHADOW


24.11 SOFTWARE USE OF THE VMCS AND RELATED STRUCTURES

本節詳細介紹了在使用VMCS和相關結構時軟件應遵循的准則。 它還提供了不遵循准則的后果的描述。

24.11.1 Software Use of Virtual-Machine Control Structures 

為確保處理器正常運行,使用活動的VMCS時,軟件應遵守某些准則。 如果要將VMCS從一個邏輯處理器“遷移”到另一個邏輯處理器,則第一個邏輯處理器應在另一個邏輯處理器在對VMCS執行VMPTRLD(使VMCS在第二個邏輯處理器上處於活動狀態)之前,對VMCS執行VMCLEAR(以使其在該邏輯處理器上處於非活動狀態並確保所有VMCS數據都在內存中)。VMCS在多個邏輯處理器上處於活動狀態,可能會被損壞(請參閱下文)。

軟件不應修改 處於活動狀態的VMCS的 VMCS區域中的 shadow-VMCS指示器(請參閱表24-1)。 這樣做可能會導致VMCS損壞。 在修改shadow-VMCS指示器之前,軟件應為VMCS執行VMCLEAR以確保其未激活。

軟件應使用VMREAD和VMWRITE指令來訪問當前VMCS中的不同字段(請參見24.11.2節)。 軟件絕不應該使用普通的內存操作訪問或修改活動VMCS的VMCS數據,部分原因是用於存儲VMCS數據的格式是特定於實現的,而不是在體系結構上定義的,並且還因為邏輯處理器可能會維護 VMCS的一些VMCS數據, 該VMCS在處理器上而不是在VMCS區域中激活。

以下各項詳細介紹了使用普通內存操作訪問VMCS數據的一些危害:

•從具有常規內存讀取的VMCS讀取的任何數據均不能可靠地反映VMCS的狀態。 結果可能會隨時間或邏輯處理器的不同而有所不同。

•使用普通內存寫操作寫入VMCS不能保證對VMCS具有確定性的影響。 這樣做可能會導致VMCS損壞(請參閱下文)。

(軟件通過這些操作避免危害: 1. 在對VMCS區域的VMPTRLD執行之前刪除該VMCS區域的任何線性地址映射,2. 執行該區域的VMCLEAR之后才重新映射它)

如果邏輯處理器退出VMX操作,則該邏輯處理器上活動的任何VMCS可能會損壞(請參閱下文)。

在VMX操作返回之后或在另一個邏輯處理器上使用VMCS 會導致VMCS損壞,為了防止 ,軟件應在執行VMXOFF指令或對處理器斷電(例如,作為到S3和S4電源狀態轉換的一部分)之前,對該VMCS執行VMCLEAR。

本部分確定了可能導致VMCS損壞的操作。這些操作可能會導致VMCS的數據變得不確定。如果該VMCS隨后在任何邏輯處理器上使用,則行為可能無法預測。

以下各項詳細介紹了VMCS損壞的一些危害:

•VM條目可能因為無法解釋的原因而失敗,也可能加載了不可期望處理器狀態。

•處理器可能無法正確支持第25章中所述的VMX非root用戶操作,並且可能會生成意外的VM退出。

•VM退出 可能會加載不可期望的處理器狀態,將錯誤的狀態保存到VMCS中,或導致邏輯處理器轉換為關閉狀態。

24.11.2 VMREAD, VMWRITE, and Encodings of VMCS Fields  

 

24.11.3 Initializing a VMCS 

VM 進入使用VMCS之前,軟件應使用VMWRITE初始化VMCS中的字段。

否則可能會導致無法預測的行為; 例如,VM進入可能由於無法解釋的原因而失敗,或者成功的轉換(VM進入或VM退出)但可能會以加載了不可期望的處理器狀態值。
不必初始化邏輯處理器將不使用的字段,(例如,如果“使用MSR位圖”的 VM執行控制為0,則不必統一MSR位圖地址。
處理器維護一些VMCS信息,這些信息無法使用VMWRITE指令修改; 其中包括VMCS的啟動狀態(請參見第24.1節)。 這樣的信息可以被存儲在VMCS區域的VMCS數據部分中。 由於此信息的格式是特定於實現的,因此在首次分配用作VMCS區域的內存區域時, 軟件無法知道處理器怎么從內存區域的內容中確定此信息。

除了其他功能之外,VMCLEAR指令還可以初始化其操作數所引用的VMCS區域中任何特定於實現的信息。

為了避免 特定實現的行為的不確定性,軟件應首先在VMCS區域上執行VMCLEAR,然后通過VMPTRLD首次激活對應的VMCS。 (圖24-1說明了執行VMCLEAR如何使VMCS進入良好定義的狀態。) 

 

軟件的使用符合這些限制:

•VM進入首次之前,應先對VMCS執行VMCLEAR。

•對VMCS執行了VMCLEAR之后,應該對使用VMCS的VM進入執行VMLAUNCH操作。

•VMRESUME應該用於 任何后續使用VMCS的VM進入(直到對VMCS的下一次執行VMCLEAR為止)。

通常,VMRESUME將比VMLAUNCH具有更低的延遲。

由於將VMCS從一個邏輯處理器“遷移”到另一個邏輯處理器需要使用VMCLEAR(請參見24.11.1),這會將VMCS的啟動狀態設置為“清除”,因此這種遷移需要使用VMLAUNCH來執行下一個VM進入。軟件開發人員 應該通過避免將VMCS從一個邏輯處理器遷移到另一個邏輯處理器,而導致 VM進入 延遲增加帶來的性能成本。

24.11.4 Software Access to Related Structures 

除了VMCS區域本身中的數據之外,VMX非根操作還可以由VMCS中的指針引用的數據結構(例如I / O位圖)控制。 雖然指向這些數據結構的指針是VMCS的一部分,但數據結構本身不是。 使用VMREAD和VMWRITE不能訪問它們,但是可以通過普通的內存寫入來訪問它們。

軟件應確保 當前VMCS引用這些數據結構的 邏輯處理器處於VMX非根操作時,才對該數據結構做修改。否則可能導致無法預測的行為(包括24.11.1節中確定的行為)。

以下數據結構(在相關章節中有詳細討論)有例外:

EPT頁表結構和用於定位SPP向量的數據結構(第28.3.3節);

virtual-APIC頁面(第29.1節);

發布(post)的中斷描述符(第29.6節);

虛擬化例外信息區域(第25.5.7.2節)

24.11.5 VMXON Region

在執行VMXON之前,軟件會分配一個內存區域(稱為VMXON區域),該內存區域供邏輯處理器用來支持VMX操作。 該區域的物理地址(VMXON指針)在VMXON的操作數中提供。 VMXON指針受 適用於VMCS指針同樣的 限制:

•VMXON指針必須4 KB對齊(位11:0必須為零)。
•VMXON指針不得設置任何位超出處理器物理地址寬度

在執行VMXON之前,軟件應將VMCS修訂標識符(請參見第24.2節)寫入VMXON區域。 (特別是,它應將31位VMCS修訂標識符寫入VMXON區域的前4個字節的30:0比特;位31應清除為0。)

不需要以任何其他方式初始化VMXON區域。 軟件應為每個邏輯處理器使用一個單獨的區域,並且不應在該邏輯處理器上執行VMXON和VMXOFF之間 訪問或修改邏輯處理器的VMXON區域。
否則可能導致無法預測的行為(包括24.11.1節中確定的行為)。

 

CHAPTER 28  VMX SUPPORT FOR ADDRESS TRANSLATION 

28.1 VIRTUAL PROCESSOR IDENTIFIERS (VPIDS)

 

CHAPTER 31 VIRTUAL-MACHINE MONITOR PROGRAMMING CONSIDERATIONS  

31.4 USING VMX INSTRUCTIONS

 

 

 

 

 

 

 

其他參考:

Hardware Assisted Virtualization Intel Virtualization Technology 這個總結的比較好,可以看看。

PROCESSOR


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM