[Virtualization]ESXi體系結構與記憶體管理(一)體系結構
充分了解ESXi的記憶體管理機制是開展VMkernel系統漏洞挖掘和研究虛擬機器逃逸等技術的必備基礎知識。希望此文能夠幫助曾被或仍被ESXi複雜記憶體管理機制虐心的同學們。
虛擬化技術的發展與應用極大地降低了企業成本(管理和資金成本),也改變了我們的工作方式:它的普及不僅讓運維人員管理規模從一個機房降到一個機櫃,還讓測試人員使用十幾臺主機壓縮到一臺伺服器。在虛擬化技術發展中誕生了眾多新技術,記憶體組織與管理無疑是其中最精彩絕倫的技術之一。本文首先介紹了ESXi的體系結構和關鍵元件,然後介紹了三種記憶體分配與控制方法,最後介紹了五種高階記憶體管理技術。
1 ESXi組成體系
VMware ESXi是一款行業領先、專門構建的裸機hypervisor(摘自VMware官方簡介),是執行在物理伺服器和作業系統之間的軟體中間層。ESXi支援在一個物理機上同時執行多個客戶機作業系統(虛擬機器),統一排程分配CPU、記憶體、網路和磁碟等硬體裝置,極大提高硬體使用效率,實現所有硬體資源共享。
筆者參考VMware官方文件,結合個人理解繪製ESXi體系結構如圖 1所示,圖中將ESXi體系劃分成三層:硬體層、核心管理層和輔助管理層。硬體層主要包括CPU、記憶體等硬體裝置;核心管理層主要包括由類POSIX作業系統VMkernel提供的各類功能服務;輔助管理層主要包括VMkernel輔助使用者監控管理虛擬機器的多個代理和守護程式。下面將依次介紹核心管理層和部分輔助管理層元件(參考文獻[1]Components of ESXi 和文獻[2]Chapter 2 The ESXi Hypervisor)。
圖 1 ESXi體系結構圖(參考文獻[1]Figure1,3)
1.1 VMkernel
VMkernel是由VMware設計開發的64位微核心類POSIX作業系統,是ESXi的構建基礎。VMkernel類似於其它通用作業系統,提供程式管理、檔案管理等底層基礎,同時為了更好地支援多虛擬機器執行,還豐富改進了CPU資源排程、記憶體分配管理、磁碟和網路輸入輸出堆疊控制、裝置驅動維護等。VMkernel使用簡單的記憶體檔案系統來儲存ESXi的配置檔案、日誌檔案和補丁等,使用專為虛擬磁碟和交換檔案等大型檔案設計和優化的群集檔案系統VMware虛擬機器檔案系統(VMFS)儲存虛擬機器。
1.2 Worlds
Worlds是執行在VMkernel作業系統上的程式。和其它作業系統上的程式類似,每個Worlds擁有獨立受保護的記憶體空間,分時使用CPU資源和基本的許可權控制等特性。在VMkernel上可以將Worlds劃分為三類:System Worlds、VMM Worlds和User Worlds,具體介紹如下。
1.2.1 System Worlds
系統Worlds(System Worlds)是執行在特殊的核心模式下的Worlds,它可以在系統許可權下執行程式。例如idle和helper都是系統Worlds。
1.2.2 VMM Worlds
虛擬機器監控Worlds(Virtual Machine Monitor Worlds)是使用者空間的抽象,它允許每個客戶機作業系統都能使用虛擬的x86硬體,為每個虛擬機器分配排程必要的BIOS、處理器、記憶體、磁碟和網路卡等硬體資源。
1.2.3 User Worlds
使用者Worlds(User Worlds)是執行在一般的使用者模式下的Worlds,它利用VMkernel提供的系統呼叫實現與虛擬機器和系統的互動。例如hostd、vpxa和syslog都是使用者Worlds。
1.3 ESXi代理
為了便於對物理伺服器和虛擬機器的綜合監控和管理,VMkernel還同時執行著多個代理和守護程式。
1.3.1 hostd
hostd是ESXi的主要管理程式。vSphere客戶端和遠端API呼叫利用hostd實現對VMkernel的管理控制。
1.3.2 vpxa
vpxa是vCenter與hostd的中間代理。vCenter利用首次連線ESXi伺服器時建立的vpxuser賬戶和vpxa服務實現與hostd的通訊,進而實現對VMkernel的監控管理。
1.3.3 syslog
syslog依據使用者配置,記錄ESXi伺服器操作報警等資訊至本地或遠端日誌伺服器。
1.3.4 DCUI
直接控制檯使用者介面(Direct Console User Interface,DCUI)是顯示在ESXi系統控制檯上的本地使用者介面。管理員利用DCUI可以對ESXi伺服器進行修改密碼、配置網路、檢視日誌、重啟與關機等基本操作。
相關文章
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- MySQL整體架構與記憶體結構MySql架構記憶體
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- 記憶體結構記憶體
- 【JVM之記憶體與垃圾回收篇】JVM與Java體系結構JVM記憶體Java
- 結構體記憶體對齊結構體記憶體
- 網路管理體系結構
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- MySQL 一 體系結構MySql
- 理解JVM(一):記憶體結構JVM記憶體
- 【PG體系結構】PG體系結構簡單說明
- JVM學習(一)——記憶體結構JVM記憶體
- MySQL 體系結構MySql
- 【JVM體系結構】JVM
- BeanFactory體系結構Bean
- MongoDB 體系結構MongoDB
- Servlet 體系結構Servlet
- MySQL 讀書筆記 (一) 體系結構MySql筆記
- 軟體體系結構評估
- JVM(七):JVM記憶體結構JVM記憶體
- JVM記憶體結構劃分JVM記憶體
- JMeter實戰(一) 體系結構JMeter
- 3:Oracle體系結構(邏輯結構)Oracle
- HDFS的體系結構
- oracle體系結構(轉)Oracle
- PostgreSQL體系結構概述SQL
- 1、JVM體系結構JVM
- Oracle體系結構學習筆記Oracle筆記
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- c 結構體記憶體對齊詳解結構體記憶體
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- MySQL體系結構與儲存引擎MySql儲存引擎
- PostgreSQL-PG的體系架構之記憶體管理(三)SQL架構記憶體
- 結構體與共用體結構體
- 作業系統體系結構作業系統
- 論軟體體系結構的演化
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件