剖析系統(tǒng)虛擬化
(4)- VMware ESX架構(gòu)
作者:吳朱華 厚樸教育來源:人
云亦云 點(diǎn)擊數(shù):102 更新時間:2010-5-25
上篇文章已經(jīng)向大家介紹了VMware vSphere,而本篇將繼續(xù)把重點(diǎn)放在vSphere身上,并向介紹大家vSphere之核心ESX的架構(gòu),雖然關(guān)于ESX架構(gòu)的公開資料較少,但是基 于這些已公開的資料,并加上我的一些實(shí)際經(jīng)驗(yàn),我覺得還是能對ESX的架構(gòu)有一個大致的描述,下圖為ESX的架構(gòu): ESX主要可被分為兩部分:其一是用于提供管理服務(wù)的Service Console,其二是ESX的核心,也是主要提供虛擬化能力的VMKernel。 Service Console 簡單的來說,Service Console就是一個簡化版Redhat Enterprise OS。雖然其不能實(shí)現(xiàn)任何虛擬化功能,但是對這個ESX架構(gòu)而言,它卻是一個不可分割的一部分。主要有五個方面功能: 1.啟動VMKernel,當(dāng)ESX主機(jī)啟動的時候,首先會啟動Service
Console,接著在Linux runlevel
3上啟動VMKernel,之后將全部硬件資源的管理權(quán)移交給VMKernel。當(dāng)VMKernel啟動成功之后Service
Console就成為運(yùn)行VMKernel上面的第一個虛擬機(jī)。 注:雖然Service Console提供了許多功能,但因?yàn)槠浔旧碣Y源所限的原因(關(guān)于這點(diǎn),我曾經(jīng)和一位VMware工程師有過聊天,好像整個Service Console大概只能占有280MB內(nèi)存和少量的I/O),所以不適合在Service Console中執(zhí)行一些重量級的任務(wù),比如:上傳或者復(fù)制虛擬磁盤(Virtual Disk)。 VMKernel VMKernel是由VMware開發(fā)的基于POSIX協(xié)議的操作系統(tǒng),它提供了很多在其它 操作系統(tǒng)中也能找到的功能,比如,創(chuàng)建和管理進(jìn)程,信號(Signal),文件系統(tǒng)和多線程等。但它是為運(yùn)行多個虛擬機(jī)而“度身定做”的。它的核心功能是 資源進(jìn)行虛擬化。下面將通過CPU,內(nèi)存和I/O這三個方面,來講解VMKernel是如何實(shí)現(xiàn)虛擬化的。 CPU 優(yōu)先級壓縮,指的是為了讓VMKernel獲得所有物理資源的控制權(quán),比如CPU。這就需要 讓VMKernel運(yùn)行在Ring 0,在其上面的虛擬機(jī)內(nèi)核代碼是運(yùn)行在Ring 1,而虛擬機(jī)的用戶代碼只能運(yùn)行在Ring 3上。這種做法不僅能讓VMKernel安全地控制所有的物理資源,而且能讓VMKernel截獲部分在虛擬機(jī)上執(zhí)行的特權(quán)指令,并對其進(jìn)行虛擬化。 二進(jìn)制代碼翻譯,雖然上面的優(yōu)先級壓縮這個技術(shù)已經(jīng)處理了很多特權(quán)指令引發(fā)的異常情況,但是 由于X86架構(gòu)在初始設(shè)計(jì)方面并沒有考慮到虛擬化這個需求,所以有很多X86特權(quán)指令成了優(yōu)先級壓縮的漏網(wǎng)之魚,雖然通過傳統(tǒng)的Trap- Emulation技術(shù)也能處理這些指令,但是由于其不僅需要花時間觀測有潛在影響的指令,而且還要監(jiān)視那些非常普通的指令,導(dǎo)致Trap- Emulation的效率非常低,所以VMware引進(jìn)了二進(jìn)制代碼翻譯這個技術(shù),這個技術(shù)能讓那些非常普通的指令直接執(zhí)行,不干涉,并提供接近物理機(jī)的 速度,但會掃描并修改那些有嫌疑的代碼,使其無法對虛擬機(jī)造成錯誤的影響。由于大多數(shù)代碼都不屬于有嫌疑的,所以二進(jìn)制代碼翻譯的效率遠(yuǎn)勝Trap- Emulation。還有經(jīng)過VMware長達(dá)十年的調(diào)優(yōu),使得二進(jìn)制代碼翻譯這個技術(shù)越發(fā)優(yōu)秀。 接下來,談一下的VMware的二進(jìn)制代碼翻譯技術(shù)的特點(diǎn): 1.純二進(jìn)制:二進(jìn)制翻譯器的輸入和輸出都是二進(jìn)制的X86代碼,而不是文本形式的源代碼。 對于CPU虛擬化而言,只有上面這兩種技術(shù)是遠(yuǎn)遠(yuǎn)不夠的,還需要調(diào)度技術(shù),也就是需要CPU 調(diào)度器(Scheduler)。但是CPU的調(diào)度器和常見操作系統(tǒng)的調(diào)度器是很不同的,因?yàn)镃PU的調(diào)度器的責(zé)任是將執(zhí)行上下文分配給一個處理器,而普通 操作系統(tǒng)的調(diào)度器則是執(zhí)行上下文分配給一個進(jìn)程。同樣的是,CPU調(diào)度器并沒有采用傳統(tǒng)的優(yōu)先級機(jī)制,而是采用平衡共享的機(jī)制,來將處理器資源更好地分配 給虛擬機(jī),同時也能設(shè)定每個虛擬機(jī)的份額,預(yù)留和極限等設(shè)定值。在VMware最常用的CPU調(diào)度器算法,是“Co-Scheduling”算法,其也常 被稱為“gang-scheduling”算法,它的核心概念是讓相關(guān)的多個進(jìn)程盡可能在多個處理器上同時執(zhí)行,因?yàn)楫?dāng)多個相關(guān)進(jìn)程同時執(zhí)行時,它們互相 之間會進(jìn)行同步,假設(shè)他們不再一起執(zhí)行的話,將會增加很多由同步導(dǎo)致的延遲。在vSphere中,VMware推出了Co-Scheduling的更新版 本,叫做Relaxed Co-Scheduling,它能更好地與虛擬機(jī)進(jìn)行協(xié)作。同時,為了更好利用最新推出了多核系統(tǒng),VMware也給調(diào)度器添加很多新的特性,主要集中在 兩方面:其一是對現(xiàn)有多核環(huán)境的探知,比如對NUMA(Non-Uniform Memory Access),Hyperthreading,VM-Affinity的支持。其二是在多核之間進(jìn)行有效的負(fù)載均衡。 內(nèi)存 由于虛擬機(jī)對內(nèi)存的消耗勝于對CPU的消耗,同時介于內(nèi)存的內(nèi)容同質(zhì)化和浪費(fèi)這兩個現(xiàn)象在虛 擬環(huán)境非常普遍,所以VMware在影子頁表的基礎(chǔ)上引入了三個非常不錯的技術(shù)來減少內(nèi)存的消耗,以支撐更多的虛擬機(jī):其一是Memory Overcommit機(jī)制,這個機(jī)制通過讓虛擬機(jī)占用的內(nèi)存總量超越物理機(jī)的實(shí)際容量來使一臺物理機(jī)能支持更多的虛擬機(jī)。其二是用于減少虛擬機(jī)之間相似內(nèi) 存頁的Page Sharing,它主要實(shí)現(xiàn)是通過對多個虛擬機(jī)的內(nèi)存頁面進(jìn)行Hash,來獲知那些內(nèi)存頁面是重復(fù)的,接著將多個重復(fù)的內(nèi)存頁面整合為一個 replica,之后通過CoW(Copy On Write)的機(jī)制來應(yīng)對對內(nèi)存頁面的修改。其三是能在各個虛擬機(jī)之間動態(tài)調(diào)整內(nèi)存的Balloon Driver,其實(shí)現(xiàn)機(jī)制就是通過給每個虛擬機(jī)安裝VMware Tools(可以把VMware Tools看作VMware的驅(qū)動)來裝入Balloon Agent,在運(yùn)行的時候,Balloon Agent會和主機(jī)的Balloon Driver進(jìn)行溝通,來調(diào)整每臺虛擬機(jī)的內(nèi)存空間,來將那些在某些虛擬機(jī)上不處于工作狀態(tài)的內(nèi)存通過swapping等方式來閑置出來,以撥給那些急需 內(nèi)存的虛擬機(jī)。 I/O 其次,為了更好地為VM服務(wù),VMKernel還支持一些高級I/O技術(shù): 1.VMFS,是VMware為虛擬化設(shè)計(jì)的分布式文件系統(tǒng),它不僅能給虛擬機(jī)提供高速的
I/O,而且由于它自帶的鎖機(jī)制,所以允許多個主機(jī)能同時訪問同一個文件系統(tǒng)。因?yàn)榉胖迷谄渖厦娴亩酁榇笥?G的Virtual
Disk,為了減少存取文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù)的大小,它Block大小被設(shè)計(jì)為1MB到256MB,默認(rèn)是1MB,使得其元數(shù)據(jù)得到了精簡,而且所有
的元數(shù)據(jù)都被放置在內(nèi)存中作為緩存,以提高速度。 總結(jié) 在開頭也說,有可能是競爭的原因,使得VMware已經(jīng)越來越少地公開它的技術(shù)資料,特別是 最核心的ESX技術(shù)。 所以上面這些材料主要是來自于ESX 2的文檔,而不是來自于最新的vSphere 4的文檔,但是從這些文檔中,我們還可以可以看出它絕對是全虛擬化的巔峰,并且在其新版中也已經(jīng)引入了代號為VMI的半虛擬技術(shù)和支持Intel/AMD 最新的硬件輔助虛擬化技術(shù)。就像本系列第二篇X86虛擬化技術(shù)所講的那樣,雖然在速度上面,半虛擬化技術(shù)和硬件輔助虛擬化技術(shù)的確各有千秋,但是他們都有 軟肋,半虛擬化技術(shù)是需要對Guest OS進(jìn)行修改,硬件輔助虛擬化技術(shù)則是不夠成熟,而且ESX的全虛擬化技術(shù)是經(jīng)過VMware高級工程師們長達(dá)10年優(yōu)化的,所以在跑某些 Workload的時候,全虛擬化反而速度更優(yōu)。綜上所述,用戶在使用最新版ESX的時候,應(yīng)該根據(jù)不同的workload來選擇不同的虛擬化方法,具體 可以查看VMware的白皮書(見參3)。 厚樸教育錄入:陳超銘 責(zé)任編輯:陳超銘 |
|