Intel虛擬化技術-從VT-x到VT-d
當前非常熱門的Virtualization虛擬化技術的出現(xiàn)和應用其實已經(jīng)有數(shù)十年的歷史了,在早期,這個技術主要應用在服務器以及大型主機上面,現(xiàn)在,隨著PC性能的不斷增長,Virtualization也開始逐漸在x86架構(gòu)上流行起來。
虛擬化技術將各種資源虛擬出多臺主機,以提高這些資源的共享率和利用率
虛擬化可以將IT環(huán)境改造成為更加強大、更具彈性、更富有活力的架構(gòu)。通過把多個操作系統(tǒng)整合到一臺高性能服務器上,***化利用硬件平臺的所有 資源,用更少的投入實現(xiàn)更多的應用,還可以簡化IT架構(gòu),降低管理資源的難度,避免IT架構(gòu)的非必要擴張??蛻籼摂M機的真正硬件無關性還可以實現(xiàn)虛擬機的 運行時遷移,可以實現(xiàn)真正的不間斷運行,從而***化保持業(yè)務的持續(xù)性,而不用為購買超高可用性平臺而付出高昂的代價。
和Sun上的虛擬化技術(CPU分區(qū))比起來,x86上的虛擬化要落后不少的,然而確實在不斷進步著,在數(shù)年前,x86上還沒有什么硬件支持, 甚至連指令集都不是為虛擬化而設計,這時主要靠完全的軟件來實現(xiàn)虛擬化,當時的代表是VMware的產(chǎn)品,以及尚未被Microsoft收購 Connectix開發(fā)的Virtual PC,在服務器市場上應用的主要是VMware的產(chǎn)品,包括GSX Server和稍后的ESX Server,這些軟件虛擬化產(chǎn)品在關鍵指令上都采用了二進制模擬/翻譯的方法,開銷顯得比較大,后期出現(xiàn)了Para-Virtualization部分 虛擬化技術,避免了一些二進制轉(zhuǎn)換,性能得到了提升,不過仍然具有隔離性的問題。
今天,虛擬化技術的各方面都有了進步,虛擬化也從純軟件逐深入到處理器級虛擬化,再到平臺級虛擬化乃至輸入/輸出級虛擬化,代表性技術就是Intel Virtualization Technology for Directed I/O, 簡寫為Intel VT-d,在介紹這個Intel VT-d之前,我們先來看看x86硬件虛擬化的***步:處理器輔助虛擬化技術,也就是Intel Virtualization Technology,分為對應Itanium平臺的VT-i和對應x86平臺的VT-x兩個版本。AMD公司也有對應的技術AMD-V,用于x86平 臺。我們介紹的是x86平臺上的VT-x技術,VT-i技術原理上略為相近。
#p#
純軟件虛擬化主要的問題是性能和隔離性。Full Virtualization完全虛擬化技術可以提供較好的客戶操作系統(tǒng)獨立性,不過其性能不高,在不同的應用下,可以消耗掉主機10%~30%的資源。 而OS Virtualization可以提供良好的性能,然而各個客戶操作系統(tǒng)之間的獨立性并不強。無論是何種軟件方法,隔離性都是由Hypervisor軟件 提供的,過多的隔離必然會導致性能的下降。
這些問題主要跟x86設計時就沒有考慮虛擬化有關。我們先來看看x86處理器的Privilege特權(quán)等級設計。
x86架構(gòu)為了保護指令的運行,提供了指令的4個不同Privilege特權(quán)級別,術語稱為Ring,從Ring 0~Ring 3。Ring 0的優(yōu)先級***,Ring 3***。各個級別對可以運行的指令有所限制,例如,GDT,IDT,LDT,TSS等這些指令就只能運行于Privilege 0,也就是Ring 0。要注意Ring/Privilege級別和我們通常認知的進程在操作系統(tǒng)中的優(yōu)先級并不同。
操作系統(tǒng)必須要運行一些Privilege 0的特權(quán)指令,因此Ring 0是被用于運行操作系統(tǒng)內(nèi)核,Ring 1和Ring 2是用于操作系統(tǒng)服務,Ring 3則是用于應用程序。然而實際上并沒有必要用完4個不同的等級,一般的操作系統(tǒng)實現(xiàn)都僅僅使用了兩個等級,即Ring 0和Ring 3,如圖所示:
也就是說,在一個常規(guī)的x86操作系統(tǒng)中,系統(tǒng)內(nèi)核必須運行于Ring 0,而VMM軟件以及其管理下的Guest OS卻不能運行于Ring 0——因為那樣就無法對所有虛擬機進行有效的管理,就像以往的協(xié)同式多任務操作系統(tǒng)(如,Windows 3.1)無法保證系統(tǒng)的穩(wěn)健運行一樣。在沒有處理器輔助的虛擬化情況下,挑戰(zhàn)就是采用Ring 0之外的等級來運行VMM (Virtual Machine Monitor,虛擬機監(jiān)視器)或Hypervisor,以及Guest OS。
現(xiàn)在流行的解決方法是Ring Deprivileging(暫時譯為特權(quán)等級下降),并具有兩種選擇:客戶OS運行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。
無論是哪一種模型,客戶OS都無法運行于Privilege 0,這樣,如GDT,IDT,LDT,TSS這些特權(quán)指令就必須通過模擬的方式來運行,這會帶來很明顯的性能問題。特別是在負荷沉重、這些指令被大量執(zhí)行的時候。
同時,這些特權(quán)指令是真正的“特權(quán)”,隔離不當可以嚴重威脅到其他客戶OS,甚至主機OS。Ring Deprivileging技術使用IA32架構(gòu)的Segment Limit(限制分段)和Paging(分頁)來隔離VMM和Guest OS,不幸的是EM64T的64bit模式并不支持Segment Limit模式,要想運行64bit操作系統(tǒng),就必須使用Paging模式。
對于虛擬化而言,使用Paging模式的一個致命之處是它不區(qū)分Privileg 0/1/2模式,因此客戶機運行于Privileg 3就成為了必然(0/3/3模型),這樣Paging模式才可以將主機OS和客戶OS隔離開來,然而在同一個Privileg模式下的不同應用程序(如, 不同的虛擬機)是無法受到Privileg機構(gòu)保護的,這就是目前IA32帶來的隔離性問題,這個問題被稱為Ring Compression。
IA32不支持VT,就無法虛擬64-bit客戶操作系統(tǒng)
這個問題的實際表現(xiàn)是:VMware在不支持Intel VT的IA32架構(gòu)CPU上無法虛擬64-bit客戶操作系統(tǒng),因為無法在客戶OS之間安全地隔離。
#p#
作為一個芯片輔助(Chip-Assisted)的虛擬化技術,VT可以同時提升虛擬化效率和虛擬機的安全性,下面我們就來看看Intel VT帶來了什么架構(gòu)上的變遷。我們談論的主要是IA32上的VT技術,一般稱之為VT-x,而在Itanium平臺上的VT技術,被稱之為VT-i。
VT-x將IA32的CU操作擴展為兩個forms(窗體):VMX root operation(根虛擬化操作)和VMX non-root operation(非根虛擬化操作),VMX root operation設計來供給VMM/Hypervisor使用,其行為跟傳統(tǒng)的IA32并無特別不同,而VMX non-root operation則是另一個處在VMM控制之下的IA32環(huán)境。所有的forms都能支持所有的四個Privileges levels,這樣在VMX non-root operation環(huán)境下運行的虛擬機就能完全地利用Privilege 0等級。
兩個世界:VMX non-root和VMX root
和一些文章認為的很不相同,VT同時為VMM和Guest OS提供了所有的Privilege運行等級,而不是只讓它們分別占據(jù)一個等級:因為VMM和Guest OS運行于不同的兩個forms。
由此,GDT、IDT、LDT、TSS等這些指令就能正常地運行于虛擬機內(nèi)部了,而在以往,這些 特權(quán)指令需要模擬運行。而VMM也能從模擬運行特權(quán)指令當中解放出來,這樣既能解決Ring Aliasing問題(軟件運行的實際Ring與設計運行的Ring不相同帶來的問題),又能解決Ring Compression問題,從而大大地提升運行效率。Ring Compression問題的解決,也就解決了64bit客戶操作系統(tǒng)的運行問題。
為了建立這種兩個虛擬化窗體的架構(gòu),VT-x設計了一個Virtual-Machine Control Structure(VMCS,虛擬機控制結(jié)構(gòu))的數(shù)據(jù)結(jié)構(gòu),包括了Guest-State Area(客戶狀態(tài)區(qū))和Host-State Area(主機狀態(tài)區(qū)),用來保存虛擬機以及主機的各種狀態(tài)參數(shù),并提供了VM entry和VM exit兩種操作在虛擬機與VMM之間切換,用戶可以通過在VMCS的VM-execution control fields里面指定在執(zhí)行何種指令/發(fā)生何種事件的時候,VMX non-root operation環(huán)境下的虛擬機就執(zhí)行VM exit,從而讓VMM獲得控制權(quán),因此VT-x解決了虛擬機的隔離問題,又解決了性能問題。
#p#
我們可以看到,Inter VT的出現(xiàn),可以解決了重要的虛擬處理器架構(gòu)問題,讓純軟件虛擬化解決方案的性能問題得以大大緩解。然而要做的事情還有很多。
我們知道對于服務器而言,很重要的一個組成部分就I/O,CPU的計算能力提升雖然可以更快地處理數(shù)據(jù),但是前提是數(shù)據(jù)能夠順暢的到達CPU, 因此,無論是存儲,還是網(wǎng)絡,以及圖形卡、內(nèi)存等,I/O能力都是企業(yè)級架構(gòu)的一個重要部分。為此,人們不但在傳輸帶寬上投資(比如從百兆以太網(wǎng)到千兆以 太網(wǎng)再到萬兆以太網(wǎng)),還在各種系統(tǒng)和架構(gòu)上進行了大量的投入(比如吞吐量更高的RAID系列、多層數(shù)據(jù)中心)。
在虛擬化技術中,隨著整體處理器資源的利用效率的提升,對數(shù)據(jù)I/O也提出了更高的要求。
VMM虛擬機管理器必須提供I/O虛擬化來支持處理來自多個客戶機的I/O請求,當前的虛擬化技術采用下列的方式來處理I/O虛擬化。
模擬I/O設備:VMM對客戶機摸擬一個I/O設 備,通過完全模擬設備的功能,客戶機可以使用對應真實的驅(qū)動程序,這個方式可以提供***的兼容性(而不管這個設備事實上存不存在),但是顯然這種模擬會影 響到性能。作為例子,各種虛擬機在使用軟盤映像提供虛擬軟驅(qū)的時候,就運行在這樣的方式,以及Virtual PC的模擬的真實的S3 Virge 3D顯卡,VMware系列模擬的Sound Blaster 16聲卡,都屬于這種方式。
額外軟件界面:這個模型比較像I/O模擬模 型,VMM軟件將提供一系列直通的設備接口給虛擬機,從而提升了虛擬化效率,這有點像Windows操作系統(tǒng)的DirectX技術,從而提供比I/O模擬 模型更好的性能,當然兼容性有所降低,例如VMware模擬的VMware顯卡就能提供不錯的顯示速度,不過不能完全支持DirectDraw技 術,Direct3D技術就更不用想了。相似的還有VMware模擬的千兆網(wǎng)卡,等等,這些品牌完全虛擬的設備(例如,VMware牌顯卡,VMware 牌網(wǎng)卡)需要使用特制的驅(qū)動程序部分直接地和主機、硬件通信,比起以前完全模擬的通過虛擬機內(nèi)的驅(qū)動程序訪問虛擬機的十兆百兆網(wǎng)卡,可以提供更高的吞吐 量。
現(xiàn)在的I/O設備虛擬化主要是采用模擬方式或者軟件接口方式,因此性能上很容易成為瓶頸——畢竟傳統(tǒng)的機器上,I/O設備都很容易成為瓶頸,因 此Intel就適時提出了Intel Virtualization Technology for Directed I/O,簡稱為Intel VT-d。
#p#
I/O虛擬化的關鍵在于解決I/O設備與虛擬機數(shù)據(jù)交換的問題,而這部分主要相關的是DMA直接內(nèi)存存取,以及IRQ中斷請求,只要解決好這兩個方面的隔離、保護以及性能問題,就是成功的I/O虛擬化。
和處理器上的Intel VT-i和VT-x一樣,Intel VT-d技術是一種基于North Bridge北橋芯片(或者按照較新的說法:MCH)的硬件輔助虛擬化技術,通過在北橋中內(nèi)置提供DMA虛擬化和IRQ虛擬化硬件,實現(xiàn)了新型的I/O虛 擬化方式,Intel VT-d能夠在虛擬環(huán)境中大大地提升 I/O 的可靠性、靈活性與性能。
傳統(tǒng)的IOMMUs(I/O memory management units,I/O內(nèi)存管理單元)提供了一種集中的方式管理所有的DMA——除了傳統(tǒng)的內(nèi)部DMA,還包括如AGP GART、TPT、RDMA over TCP/IP等這些特別的DMA,它通過在內(nèi)存地址范圍來區(qū)別設備,因此容易實現(xiàn),卻不容易實現(xiàn)DMA隔離,因此VT-d通過更新設計的IOMMU架構(gòu), 實現(xiàn)了多個DMA保護區(qū)域的存在,最終實現(xiàn)了DMA虛擬化。這個技術也叫做DMA Remapping。
I/O設備會產(chǎn)生非常多的中斷請求,I/O虛擬化必須正確地分離這些請求,并路由到不同的虛擬機上。傳統(tǒng)設備的中斷請求可以具有兩種方式:一種 將通過I/O中斷控制器路由,一種是通過DMA寫請求直接發(fā)送出去的MSI(message signaled interrupts,消息中斷),由于需要在DMA請求內(nèi)嵌入目標內(nèi)存地址,因此這個架構(gòu)須要完全訪問所有的內(nèi)存地址,并不能實現(xiàn)中斷隔離。
VT-d實現(xiàn)的中斷重映射(interrupt-remapping)架構(gòu)通過重新定義MSI的格式來解決這個問題,新的MSI仍然是一個 DMA寫請求的形式,不過并不嵌入目標內(nèi)存地址,取而代之的是一個消息ID,通過維護一個表結(jié)構(gòu),硬件可以通過不同的消息ID辨認不同的虛擬機區(qū)域。 VT-d實現(xiàn)的中斷重映射可以支持所有的I/O源,包括IOAPICs,以及所有的中斷類型,如通常的MSI以及擴展的MSI-X。
VT-d進行的改動還有很多,如硬件緩沖、地址翻譯等,通過這些種種措施,VT-d實現(xiàn)了北橋芯片級別的I/O設備虛擬化。VT-d最終體現(xiàn)到虛擬化模型上的就是新增加了兩種設備虛擬化方式:
左邊是傳統(tǒng)的I/O模擬虛擬化,右邊是直接I/O設備分配
直接I/O設備分配:虛擬機直接分配物理I/O設 備給虛擬機,這個模型下,虛擬機內(nèi)部的驅(qū)動程序直接和硬件設備直接通信,只需要經(jīng)過少量,或者不經(jīng)過VMM的管理。為了系統(tǒng)的健壯性,需要硬件的虛擬化支 持,以隔離和保護硬件資源只給指定的虛擬機使用,硬件同時還需要具備多個I/O容器分區(qū)來同時為多個虛擬機服務,這個模型幾乎完全消除了在VMM中運行驅(qū) 動程序的需求。例如CPU,雖然CPU不算是通常意義的I/O設備——不過它確實就是通過這種方式分配給虛擬機,當然CPU的資源還處在VMM的管理之 下。
I/O設備共享:這個模型是I/O分配模型的一個擴展,對硬件具有很高的要求,需要設備支持多個功能接口,每個接口可以單獨分配給一個虛擬機,這個模型無疑可以提供非常高的虛擬化性能表現(xiàn)。
運用VT-d技術,虛擬機得以使用直接I/O設備分配方式或者I/O設備共享方式來代替?zhèn)鹘y(tǒng)的設備模擬/額外設備接口方式,從而大大提升了虛擬化的I/O性能。
#p#
主流雙路Xeon Stoakley平臺將支持Intel VT-d技術
高端四路Caneland平臺也會支持VT-d功能
根據(jù)資料表明,不日發(fā)布的Stoakley平臺和Caneland平臺上將包含VT-d功能,Stoakley平臺是現(xiàn)在的Bensley的下 一代產(chǎn)品,用于雙路Xeon處理器,而Caneland則是Truland的繼任者,用于四路Xeon處理器,這些芯片組都能支持***的45nm Penryn處理器。
從Intel虛擬化技術發(fā)展路線圖來看,虛擬化無疑是從處理器逐漸擴展到其他設備的,從VT-i/VT-x到VT-d就非常體現(xiàn)了這個過程,對 于關注I/O性能的企業(yè)級應用而言,完成了處理器的虛擬化和I/O的虛擬化,整個平臺的虛擬化就接近完成了,因此在未來,Intel將會持續(xù)地開發(fā)VT- d技術,將各種I/O設備中加入虛擬化特性,從而提供一個強大的虛擬化基礎架構(gòu)