原理
虛擬機是對真實計算環境的抽象和模擬,VMM需要為每個虛擬機分配一套數據結構來管理它們狀態,包括虛擬處理器的全套暫存器,物理記憶體的使用情況,虛擬設備的狀態等等。VMM調度虛擬機時,將其部分狀態恢復到主機系統中。並非所有的狀態都需要恢復,例如主機CR3暫存器中存放的是VMM設定的頁表物理地址,而不是Guest OS設定的值。主機處理器直接運行Guest OS的機器指令,由於Guest OS運行在低特權級別,當訪問主機系統的特權狀態(如寫GDT暫存器)時,許可權不足導致主機處理器產生異常,將運行權自動交還給VMM。此外,外部中斷的到來也會導致VMM的運行。
VMM可能需要先將該虛擬機的當前狀態寫回到狀態數據結構中,分析虛擬機被掛起的原因,然後代表 Guest OS 執行相應的特權操作。最簡單的情況,如Guest OS對CR3暫存器的修改,只需要更新虛擬機的狀態數據結構即可。一般而言,大部分情況下,VMM需要經過複雜的流程才能完成原本簡單的操作。最後VMM將運行權還給Guest OS,Guest OS從上次被中斷的地方繼續執行,或處理VMM“塞”入的虛擬中斷和異常。這種經典的虛擬機運行方式被稱為Trap-And-Emulate,虛擬機對於Guest OS完全透明,Guest OS不需要任何修改,但是VMM的設計會比較複雜,系統整體性能受到明顯的損害。
挑戰
VMM控制權
x86處理器有4個特權級別,Ring 0-Ring 3,只有運行在 Ring 0-2級時,處理器才可以訪問特權資源或執行特權指令;運行在 Ring 0級時,處理器可以訪問所有的特權狀態。x86 平台上的作業系統一般只使用 Ring 0 和 Ring 3這兩個級別,作業系統運行在Ring 0級,用戶進程運行在 Ring 3級。為了滿足上面的第一個充分條件-資源控制,VMM 自己必須運行在 Ring 0級,同時為了避免 Guest OS控制系統資源,Guest OS不得不降低自身的運行級別,運行在 Ring 1或 Ring 3級(Ring 2不使用)
特權級壓縮
(Ring Compression)
VMM使用分頁或段限制的方式保護物理記憶體的訪問,但是64位模式下段限制不起作用,而分頁又不區分Ring 0、1、2。為了統一和簡化 VMM的設計,Guest OS只能和Guest進程一樣運行在 Ring 3級。VMM必須監視Guest OS 對 GDT、IDT等特權資源的設定,防止 GuestOS運行在Ring0級,同時又要保護降級後的 Guest OS不受Guest進程的主動攻擊或無意破壞。
特權級別名
(Ring Alias)
特權級別名是指Guest OS在虛擬機中運行的級別並不是它所期望的。VMM必須保證 Guest OS不能獲知正在虛擬機中運行這一事實,否則可能打破等價性條件。例如,x86處理器的特權級別存放在 CS 代碼段暫存器內,Guest OS可以使用非特權 push 指令將 CS 暫存器壓棧,然後 pop 出來檢查該值。又如,Guest OS 在低特權級別時讀取特權暫存器 GDT、LDT、IDT 和 TR,並不發生異常,從而可能發現這些值與自己期望的不一樣。為了解決這個挑戰,VMM 可以使用動態二進制翻譯的技術,例如預先把“push %%cs” 指令替換,在棧上存放一個影子CS暫存器值;又如,可以把讀取 GDT 暫存器的操作“sgdt dest”改為“movl fake_gdt,dest”。
地址空間壓縮
(Address Space Compression)
地址空間壓縮是指VMM必須在Guest OS的地址空間中保留一部分供其使用。例如,中斷描述表暫存器(IDT Register)中存放的是中斷描述表的線性地址,如果 Guest OS運行過程中來了外部中斷或觸發處理器異常,必須保證運行權馬上轉移到VMM中,因此VMM需要將 Guest OS的一部分線性地址空間映射成自己的中斷描述表的主機物理地址。VMM可以完全運行在Guest OS的地址空間中,也可以擁有獨立的地址空間,後者的話,VMM只占用Guest OS很少的地址空間,用於存放中斷描述表和全局描述符表(GDT)等重要的特權狀態。無論如何哪種情況,VMM應該防止Guest OS直接讀取和修改這部分地址空間。
GuestOS異常
記憶體是一種非常重要的系統資源,VMM必須全權管理,Guest OS理解的物理地址只是客戶機物理地址(Guest Physical Address),並不是最終的主機物理地址(Host Physical Address)。當Guest OS發生缺頁異常時,VMM需要知道缺頁異常的原因,是Guest 進程試圖訪問沒有許可權的地址,或是客戶機線性地址(Guest Linear Address)尚未翻譯成 Guest Physical Address,還是客戶機物理地址尚未翻譯成主機物理地址。一種可行的解決方法是VMM為 Guest OS的每個進程的頁表構造一個影子頁表,維護Guest Linear Address到Host Physical Address的映射,主機CR3暫存器存放這個影子頁表的物理記憶體地址。VMM同時維護一個Guest OS全局的Guest Physical Address到Host Physical Address的映射表。發生缺頁異常的地址總是Guest Linear Address,VMM先去Guest OS中的頁表檢查原因,如果頁表項已經建立,即對應的Guest Physical Address存在,說明尚未建立到 Host Physical Address的映射,那么VMM分配一頁物理記憶體,將影子頁表和映射表更新;否則,VMM返回到 Guest OS,由 Guest OS自己處理該異常。
系統調用
系統調用是作業系統提供給用戶的服務例程,使用非常頻繁。最新的作業系統一般使用SYSENTER/SYSEXIT指令對來實現快速系統調用。SYSENTER指令通過IA32_SYSENTER_CS,IA32_SYSENTER_EIP和IA32_SYSENTER_ESP這3個MSR(Model Specific Register)暫存器直接轉到 Ring 0級;而 SYSEXIT指令不在Ring 0級執行的話將觸發異常。因此,如果VMM只能採取 Trap-And-Emulate的方式處理這2條指令的話,整體性能將會受到極大損害。
中斷和異常
所有的外部中斷和主機處理器的異常直接由VMM接管,VMM構造必需的虛擬中斷和異常,然後轉發給Guest OS。VMM需要模擬硬體和作業系統對中斷和異常的完整處理流程,例如VMM先要在 Guest OS當前的核心棧上壓入一些信息,然後找到Guest OS相應處理例程的地址,並跳轉過去。VMM必須對不同的Guest OS的內部工作流程比較清楚,這增加了VMM的實現難度。同時,Guest OS可能頻繁地禁止中斷和啟用中斷,這兩個操作訪問特權暫存器EFLAGS,必須由VMM模擬完成,性能因此會受到損害。Guest OS重新啟用中斷時,VMM需要及時地獲知這一情況,並將積累的虛擬中斷轉發。
訪問特權資源
Guest OS對特權資源的每次訪問都會觸發處理器異常,然後由VMM模擬執行,如果訪問過於頻繁,則系統整體性能將會受到極大損害。比如對中斷的禁止和啟用,cli(Clear Interrupts)指令在Pentium 4處理器上需要花費60個時鐘周期(cycle)。又如,處理器本地高級可程式中斷處理器(Local APIC)上有一個作業系統可修改的任務優先權暫存器(Task-Priority Register),IO-APIC將外部中斷轉發到TPR值最低的處理器上(期望該處理器正在執行低優先權的執行緒),從而最佳化中斷的處理。TPR是一個特權暫存器,某些作業系統會頻繁設定(Linux Kernel只在初始化階段為每個處理器的TPR設定相同的值)。
軟體VMM所遇到的以上挑戰從本質上來說是因為Guest OS無法運行在它所期望的最高特權級,傳統的Trap-And-Emulate處理方式雖然以透明的方式基本解決上述挑戰,但是帶來極大的設計複雜性和性能下降。當前比較先進的虛擬化軟體結合使用二進制翻譯和超虛擬化的技術,核心思想是動態或靜態地改變Guest OS對特權狀態訪問的操作,儘量減少產生不必要的硬體異常,同時簡化VMM的設計。
完全虛擬化
最流行的虛擬化方法使用名為hypervisor的一種軟體,在虛擬伺服器和底層硬體之間建立一個抽象層。VMware和微軟的Virtual PC是代表該方法的兩個商用產品,而基於核心的虛擬機(KVM)是面向Linux系統的開源產品。
hypervisor可以捕獲CPU指令,為指令訪問硬體控制器和外設充當中介。因而,完全虛擬化技術幾乎能讓任何一款作業系統不用改動就能安裝到虛擬伺服器上,而它們不知道自己運行在虛擬化環境下。主要缺點是,hypervisor給處理器帶來開銷。
在完全虛擬化的環境下,hypervisor運行在裸硬體上,充當主機作業系統;而由hypervisor管理的虛擬伺服器運行客戶端作業系統(guest OS)。
如下圖所示。
準虛擬化
完全虛擬化是處理器密集型技術,因為它要求hypervisor管理各個虛擬伺服器,並讓它們彼此獨立。減輕這種負擔的一種方法就是,改動客戶作業系統,讓它以為自己運行。
在虛擬環境下,能夠與hypervisor協同工作。這種方法就叫準虛擬化(para-virtualization)。
Xen是開源準虛擬化技術的一個例子。作業系統作為虛擬伺服器在Xen hypervisor上運行之前,它必須在核心層面進行某些改變。因此,Xen適用於BSD、Linux、Solaris及其他開源作業系統,但不適合對像Windows這些專有的作業系統進行虛擬化處理,因為它們無法改動。
準虛擬化技術的優點是性能高。經過準虛擬化處理的伺服器可與hypervisor協同工作,其回響能力幾乎不亞於未經過虛擬化處理的伺服器。準虛擬化與完全虛擬化相比優點明顯,以至於微軟和VMware都在開發這項技術,以完善各自的產品。
虛擬化
實現虛擬化還有一個方法,那就是在作業系統層面增添虛擬伺服器功能。Solaris Container就是這方面的一個例子,Virtuozzo/OpenVZ是面向Linux的軟體方案。
就作業系統層的虛擬化而言,沒有獨立的hypervisor層。相反,主機作業系統本身就負責在多個虛擬伺服器之間分配硬體資源,並且讓這些伺服器彼此獨立。一個明顯的區別是,如果使用作業系統層虛擬化,所有虛擬伺服器必須運行同一作業系統(不過每個實例有各自的應用程式和用戶賬戶)。
雖然作業系統層虛擬化的靈活性比較差,但本機速度性能比較高。此外,由於架構在所有虛擬伺服器上使用單一、標準的作業系統,管理起來比異構環境要容易。
這一額外的通信層需要進行二進制轉換,以通過提供到物理資源(如處理器、記憶體、存儲、顯示卡和網卡等)的接口,模擬硬體環境。這種轉換必然會增加系統的複雜性。此外,客戶作業系統的支持受到虛擬機環境的能力限制,這會阻礙特定技術的部署,如64位客戶作業系統。在純軟體解決方案中,軟體堆疊增加的複雜性意味著,這些環境難於管理,因而會加大確保系統可靠性和安全性的困難。
而CPU的虛擬化技術是一種硬體方案,支持虛擬技術的CPU帶有特別最佳化過的指令集來控制虛擬過程,通過這些指令集,VMM會很容易提高性能,相比軟體的虛擬實現方式會很大程度上提高性能。虛擬化技術可提供基於晶片的功能,藉助兼容VMM軟體能夠改進純軟體解決方案。由於虛擬化硬體可提供全新的架構,支持作業系統直接在上面運行,從而無需進行二進制轉換,減少了相關的性能開銷,極大簡化了VMM設計,進而使VMM能夠按通用標準進行編寫,性能更加強大。另外,在純軟體VMM中,缺少對64位客戶作業系統的支持,而隨著64位處理器的不斷普及,這一嚴重缺點也日益突出。而CPU的虛擬化技術除支持廣泛的傳統作業系統之外,還支持64位客戶作業系統。
Intel已經發布了具有IntelVT虛擬化技術的一系列處理器產品,包括桌面平台的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列,以及伺服器/工作站平台上的基於Paxville核心的Xeon系列;同時絕大多數的Intel下一代主流處理器,包括Merom核心移動處理器,Conroe核心桌面處理器,Woodcrest核心伺服器處理器,以及基於Montecito核心的Itanium 2高端伺服器處理器都將支持Intel VT虛擬化技術。而AMD的具有代號為“Pacific”虛擬化技術的CPU不久也會發布。
虛擬化技術
當前非常熱門的Virtualization虛擬化技術的出現和套用其實已經有數十年的歷史了,在早期,這個技術主要套用在伺服器以及大型主機上面,隨著PC性能的不斷增長,Virtualization也開始逐漸在x86架構上流行起來。虛擬化可以將IT環境改造成為更加強大、更具彈性、更富有活力的架構。通過把多個作業系統整合到一台高性能伺服器上,最大化利用硬體平台的所有資源,用更少的投入實現更多的套用,還可以簡化IT架構,降低管理資源的難度,避免IT架構的非必要擴張。客戶虛擬機的真正硬體無關性還可以實現虛擬機的運行時遷移,可以實現真正的不間斷運行,從而最大化保持業務的持續性,而不用為購買超高可用性平台而付出高昂的代價。虛擬化技術和Sun上的虛擬化技術(CPU分區)比起來,x86上的虛擬化要落後不少的,然而確實在不斷進步著,在數年前,x86上還沒有什麼硬體支持,甚至連指令集都不是為虛擬化而設計,這時主要靠完全的軟體來實現。
虛擬化,當時的代表是VMware的產品,以及尚未被Microsoft收購Connectix開發的Virtual PC,在伺服器市場上套用的主要是VMware的產品,包括GSX Server和稍後的ESX Server,這些軟體虛擬化產品在關鍵指令上都採用了二進制模擬/翻譯的方法,開銷顯得比較大,後期出現了Para-Virtualization部分虛擬化技術,避免了一些二進制轉換,性能得到了提升,不過仍然具有隔離性的問題。
虛擬化技術今天,虛擬化技術的各方面都有了進步,虛擬化也從純軟體逐深入到處理器級虛擬化,再到平台級虛擬化乃至輸入/輸出級虛擬化,代表性技術就是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技術原理上略為相近。純軟體虛擬化主要的問題是性能和隔離性。Full Virtualization完全虛擬化技
術可以提供較好的客戶作業系統獨立性,不過其性能不高,在不同的套用下,可以消耗掉主機10%~30%的資源。而OS Virtualization可以提供良好的性能,然而各個客戶作業系統之間的獨立性並不強。無論是何種軟體方法,隔離性都是由Hypervisor軟體提供的,過多的隔離必然會導致性能的下降。這些問題主要跟x86設計時就沒有考慮虛擬化有關。我們先來看看x86處理器的Privilege特權等級設計。虛擬化技術x86架構為了保護指令的運行,提供了指令的4個不同Privilege特權級別,術語稱為Ring,從Ring 0~Ring 3。Ring 0的優先權最高,Ring 3最低。各個級別對可以運行的指令有所限制,例如,GDT,IDT,LDT,TSS等這些指令就只能運行於Privilege 0,也就是Ring 0。要注意Ring/Privilege級別和我們通常認知的進程在作業系統中的優先權並不同。
作業系統必須要運行一些Privilege 0的特權指令,因此Ring 0是被用於運行作業系統核心,Ring 1和Ring 2是用於作業系統服務,Ring 3則是用於應用程式。然而實際上並沒有必要用完4個不同的等級,一般的作業系統實現都僅僅使用了兩個等級,即Ring 0和Ring 3,如圖所示:虛擬化技術也就是說,在一個常規的x86作業系統中,系統核心必須運行於Ring 0,而VMM軟體以及其管理下的Guest OS卻不能運行於Ring 0——因為那樣就無法對所有虛擬機進行有效的管理,就像以往的協同式多任務作業系統(如,Windows 3.1)無法保證系統的穩健運行一樣。在沒有處理器輔助的虛擬化情況下,挑戰就是採用Ring 0之外的等級來運行VMM (Virtual Machine Monitor,虛擬機監視器)或Hypervisor,以及Guest OS。
現在流行的解決方法是Ring Deprivileging(暫時譯為特權等級下降),並具有兩種選擇:客戶OS運行於Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。無論是哪一種模型,客戶OS都無法運行於Privilege 0,這樣,如GDT,IDT,LDT,TSS這些特權指令就必須通過模擬的方式來運行,這會帶來很明顯的性能問題。特別是在負荷沉重、這些指令被大量執行的時候。同時,這些特權指令是真正的“特權”,隔離不當可以嚴重威脅到其他客戶OS,甚至主機OS。
Ring Deprivileging技術使用IA32架構的Segment Limit(限制分段)和Paging(分頁)來隔離VMM和Guest OS,不幸的是EM64T的64bit模式並不支持Segment Limit模式,要想運行64bit作業系統,就必須使用Paging模式。對於虛擬化而言,使用Paging模式的一個致命之處是它不區分Privileg 0/1/2模式,因此客戶機運行於Privileg 3就成為了必然(0/3/3模型),這樣Paging模式才可以將主機OS和客戶OS隔離開來,然而在同一個Privileg模式下的不同應用程式(如,不同的虛擬機)是無法受到Privileg機構保護的,這就是IA32帶來的隔離性問題,這個問題被稱為Ring Compression。IA32不支持VT,就無法虛擬64-bit客戶作業系統這個問題的實際表現是:VMware在不支持Intel VT的IA32架構CPU上無法虛擬64-bit客戶作業系統,因為無法在客戶OS之間安全地隔離。作為一個晶片輔助(Chip-Assisted)的虛擬化技術,VT可以同時提升虛擬化效率和虛擬機的安全性,下面我們就來看看Intel VT帶來了什麼架構上的變遷。我們談論的主要是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使用,其行為跟傳統的IA32並無特別不同,而VMX non-root operation則是另一個處在VMM控制之下的IA32環境。所有的forms都能支持所有的四個Privileges levels,這樣在VMX non-root operation環境下運行的虛擬機就能完全地利用Privilege 0等級。
兩個世界:VMX non-root和VMX root和一些文章認為的很不相同,VT同時為VMM和Guest OS提供了所有的Privilege運行等級,而不是只讓它們分別占據一個等級:因為VMM和Guest OS運行於不同的兩個forms。
由此,GDT、IDT、LDT、TSS等這些指令就能正常地運行於虛擬機內部了,而在以往,這些特權指令需要模擬運行。而VMM也能從模擬運行特權指令當中解放出來,這樣既能解決Ring Aliasing問題(軟體運行的實際Ring與設計運行的Ring不相同帶來的問題),又能解決Ring Compression問題,從而大大地提升運行效率。Ring Compression問題的解決,也就解決了64bit客戶作業系統的運行問題。
為了建立這種兩個虛擬化窗體的架構,VT-x設計了一個Virtual-Machine Control Structure(VMCS,虛擬機控制結構)的數據結構,包括了Guest-State Area(客戶狀態區)和Host-State Area(主機狀態區),用來保存虛擬機以及主機的各種狀態參數,並提供了VM entry和VM exit兩種操作在虛擬機與VMM之間切換,用戶可以通過在VMCS的VM-execution control fields裡面指定在執行何種指令/發生何種事件的時候,VMX non-root operation環境下的虛擬機就執行VM exit,從而讓VMM獲得控制權,因此VT-x解決了虛擬機的隔離問題,又解決了性能問題。
可以看到,Inter VT的出現,可以解決了重要的虛擬處理器架構問題,讓純軟體虛擬化解決方案的性能問題得以大大緩解。然而要做的事情還有很多。
對於伺服器而言,很重要的一個組成部分就I/O,CPU的計算能力提升雖然可以更快地處理數據,但是前提是數據能夠順暢的到達CPU,因此,無論是存儲,還是網路,以及圖形卡、記憶體等,I/O能力都是企業級架構的一個重要部分。為此,人們不但在傳輸頻寬上投資(比如從百兆乙太網到千兆乙太網再到萬兆乙太網),還在各種系統和架構上進行了大量的投入(比如吞吐量更高的RAID系列、多層數據中心)。
在虛擬化技術中,隨著整體處理器資源的利用效率的提升,對數據I/O也提出了更高的要求。
VMM虛擬機管理器必須提供I/O虛擬化來支持處理來自多個客戶機的I/O請求,當前的虛擬化技術採用下列的方式來處理I/O虛擬化。
虛擬化技術模擬I/O設備:VMM對客戶機摸擬一個I/O設備,通過完全模擬設備的功能,客戶機可以使用對應真實的驅動程式,這個方式可以提供完美的兼容性(而不管這個設備事實上存不存在),但是顯然這種模擬會影響到性能。作為例子,各種虛擬機在使用軟碟映像提供虛擬軟碟機的時候,就運行在這樣的方式,以及Virtual PC的模擬的真實的S3 Virge 3D顯示卡,VMware系列模擬的Sound Blaster 16音效卡,都屬於這種方式。
虛擬化技術額外軟體界面:這個模型比較像I/O模擬模型,VMM軟體將提供一系列直通的設備接口給虛擬機,從而提升了虛擬化效率,這有點像Windows作業系統的DirectX技術,從而提供比I/O模擬模型更好的性能,當然兼容性有所降低,例如VMware模擬的VMware顯示卡就能提供不錯的顯示速度,不過不能完全支持DirectDraw技術,Direct3D技術就更不用想了。相似的還有VMware模擬的千兆網卡,等等,這些品牌完全虛擬的設備(例如,VMware牌顯示卡,VMware牌網卡)需要使用特製的驅動程式部分直接地和主機、硬體通信,比起以前完全模擬的通過虛擬機內的驅動程式訪問虛擬機的十兆百兆網卡,可以提供更高的吞吐量。
一般的I/O設備虛擬化主要是採用模擬方式或者軟體接口方式,因此性能上很容易成為瓶頸——畢竟傳統的機器上,I/O設備都很容易成為瓶頸,因此Intel就適時提出了Intel Virtualization Technology for Directed I/O,簡稱為Intel VT-d。
I/O虛擬化的關鍵在於解決I/O設備與虛擬機數據交換的問題,而這部分主要相關的是DMA直接記憶體存取,以及IRQ中斷請求,只要解決好這兩個方面的隔離、保護以及性能問題,就是成功的I/O虛擬化。
虛擬化技術和處理器上的Intel VT-i和VT-x一樣,Intel VT-d技術是一種基於North Bridge北橋晶片(或者按照較新的說法:MCH)的硬體輔助虛擬化技術,通過在北橋中內置提供DMA虛擬化和IRQ虛擬化硬體,實現了新型的I/O虛擬化方式,Intel VT-d能夠在虛擬環境中大大地提升I/O的可靠性、靈活性與性能。
傳統的IOMMUs(I/O memory management units,I/O記憶體管理單元)提供了一種集中的方式管理所有的DMA——除了傳統的內部DMA,還包括如AGP GART、TPT、RDMA over TCP/IP等這些特別的DMA,它通過在記憶體地址範圍來區別設備,因此容易實現,卻不容易實現DMA隔離,因此VT-d通過更新設計的IOMMU架構,實現了多個DMA保護區域的存在,最終實現了DMA虛擬化。這個技術也叫做DMA Remapping。
虛擬化技術I/O設備會產生非常多的中斷請求,I/O虛擬化必須正確地分離這些請求,並路由到不同的虛擬機上。傳統設備的中斷請求可以具有兩種方式:一種將通過I/O中斷控制器路由,一種是通過DMA寫請求直接傳送出去的MSI(message signaled interrupts,訊息中斷),由於需要在DMA請求內嵌入目標記憶體地址,因此這個架構須要完全訪問所有的記憶體地址,並不能實現中斷隔離。
VT-d實現的中斷重映射(interrupt-remapping)架構通過重新定義MSI的格式來解決這個問題,新的MSI仍然是一個DMA寫請求的形式,不過並不嵌入目標記憶體地址,取而代之的是一個訊息ID,通過維護一個表結構,硬體可以通過不同的訊息ID辨認不同的虛擬機區域。VT-d實現的中斷重映射可以支持所有的I/O源,包括IOAPICs,以及所有的中斷類型,如通常的MSI以及擴展的MSI-X。
VT-d進行的改動還有很多,如硬體緩衝、地址翻譯等,通過這些種種措施,VT-d實現了北橋晶片級別的I/O設備虛擬化。VT-d最終體現到虛擬化模型上的就是新增加了兩種設備虛擬化方式:
左邊是傳統的I/O模擬虛擬化,右邊是直接I/O設備分配
直接I/O設備分配:虛擬機直接分配物理I/O設備給虛擬機,這個模型下,虛擬機內部的驅動程式直接和硬體設備直接通信,只需要經過少量,或者不經過VMM的管理。為了系統的健壯性,需要硬體的虛擬化支持,以隔離和保護硬體資源只給指定的虛擬機使用,硬體同時還需要具備多個I/O容器分區來同時為多個虛擬機服務,這個模型幾乎完全消除了在VMM中運行驅動程式的需求。例如CPU,雖然CPU不算是通常意義的I/O設備——不過它確實就是通過這種方式分配給虛擬機,當然CPU的資源還處在VMM的管理之下。
I/O設備共享:這個模型是I/O分配模型的一個擴展,對硬體具有很高的要求,需要設備支持多個功能接口,每個接口可以單獨分配給一個虛擬機,這個模型無疑可以提供非常高的虛擬化性能表現。
運用VT-d技術,虛擬機得以使用直接I/O設備分配方式或者I/O設備共享方式來代替傳統的設備模擬/額外設備接口方式,從而大大提升了虛擬化的I/O性能。
根據資料表明,不日發布的Stoakley平台和Caneland平台上將包含VT-d功能,Stoakley平台是Bensley的下一代產品,用於雙路Xeon處理器,而Caneland則是Truland的繼任者,用於四路Xeon處理器,這些晶片組都能支持最新的45nm Penryn處理器。
虛擬化技術從Intel虛擬化技術發展路線圖來看,虛擬化無疑是從處理器逐漸擴展到其他設備的,從VT-i/VT-x到VT-d就非常體現了這個過程,對於關注I/O性能的企業級套用而言,完成了處理器的虛擬化和I/O的虛擬化,整個平台的虛擬化就接近完成了,因此在未來,Intel將會持續地開發VT-d技術,將各種I/O設備中加入虛擬化特性,從而提供一個強大的虛擬化基礎架構。
AMD虛擬化技術--降低操作成本,提高商業價值低成本運營是在當今經濟形勢下開展業務面臨的首要挑戰。在不斷改變的公司IT部門需求與注重預算的預期之間進行平衡時會出現的一些特殊難題。
通過支持在單一計算系統上同時運行多種作業系統、應用程式或用戶會話,虛擬化可提供巨大的業務優勢,從而有助於降低總體擁有成本,同時增加公司IT投資的價值與能力。
減少能耗和散熱成本最小化數據中心空間與間接費用使當前軟體投資發揮最大效益精簡部署和升級過程提高性能、可管理性與數據安全性簡化您伺服器與客戶端系統的基礎設施AMD在為x86計算機開發支持快速、高效的虛擬化功能領域處於業內領先地位,例如高能效的多核心處理器、先進的記憶體處理能力以及基於硬體的虛擬化技術。
簡言之,AMD Virtualization技術是一項基於硬體的技術,該技術支持虛擬軟體在一台基於AMD皓龍處理器的物理伺服器上運行多個作業系統和套用,有助於伺服器實現更高的效率和利用率。你無需再採用“一個作業系統、一個套用和一台伺服器”這種運行模式。AMD的Virtualization技術使你能更好地利用自己的資源,你的伺服器和工作站將變得更加高效,數據中心的運轉也更加有效。例如,當今的伺服器在以不足15%的容量運行時,其能耗和散熱仍保持在24×7的水平。AMD Virtualization技術具有快速虛擬化索引的功能,這就意味著AMD四核皓龍處理器能夠簡化數據中心,實現更高的利用率。
AMD的片內安全和虛擬技術代號分別稱作Presidio和Pacifica,據其官員表示將出現在Opteron處理器中。“每個人都預見到虛擬和安全技術能解決到數據中心的某些問題,”AMD的微處理器業務部總經理Marty Seyer說。
在安全方面,Presidio將利用到微軟即將推出的Windows Vista中某些功能。但AMD更吸引人的一項舉措是讓其記憶體控制器更“虛擬智慧型化”——讓晶片在一台虛擬機的不同虛擬地址之間建起一道堅固的壁壘。另外,這樣還能讓Presidio阻止某些黑客攻擊。這類攻擊通常會強迫機器借某張CD或某個分區上的作業系統啟動並使用特別工具讀取機器記憶體中的內容。
AMD稱Presidio會不斷改進以包含其他保護技術,例如加固鍵鼠等輸入設備與作業系統之間通訊通道等。由於這種保護技術需要作業系統的幫助,微軟為此已經計畫為Vista添加多種類型的安全技術。
AMD的官員還表示將在2007年的處理器中添加對信用平台模組(Trusted Platform Module) 1.2等Windows機器以外技術的支持。事實上,AMD正和開放信任運算機構合作開發Linux平台上的可信賴運算標準,預計集成TPM的伺服器將在2007年上市。
至於用於減輕VMware等虛擬軟體部分工作負擔的Pacifica技術,AMD稱也會不斷改善並最終包含輸入/輸出虛擬技術。AMD已經開始這項Xen計畫的研究工作,不過他們不願透露相應產品何時上市。
AMD的Presidio和Pacifica技術和Intel的虛擬技術及"LaGrande"安全技術十分相似。雖然Intel一直稱到2007年首季才會向系統廠商推廣使用新的雙核奔騰D處理器"resler",但其實他們已經開始供貨部分集成虛擬技術的奔騰四處理器,而LaGrande安全功能也會在2007年出現於Intel處理器中。
比較值得我們關注的應該是Pacifica虛擬技術,這將可以大大提高台式處理器的運行能力。Pacifica技術最突出的地方在於對記憶體控制器的改進方面。“Pacifica”通過Direct Connect Architecture(直接互連架構)和在處理器和記憶體控制器中引入一個新模型和功能來提高CPU的虛擬套用。
與過去的方法來進行虛擬套用不同,這項新的技術能夠減少程式的複雜性,提高虛擬系統的安全性,並通過兼容現有的虛擬系統管理軟體來減少花費在虛擬管理系統上的費用。例如,用戶能在一部機器上輕易地創建多個獨立且互相隔離的分區,從而減少了分區之間病毒傳播的危險。不過,AMD在虛擬化技術方面仍比Intel慢了一步。
AMD表示其IO虛擬化技術規範已經成型,且技術授權完全免費,並將鼓勵軟硬體廠商採納該技術並集成進PC中。
AMDAM2處理器
AMD已經和VMware、Xensource以及微軟等公司結盟推廣其虛擬化技術。
AMD AM2接口
AMD的虛擬化技術之前的開發代號為Pacifica,這種技術將在AMD2007年的64位CPU核心邏輯以及晶片組兩個層面得以實現。
I/O虛擬化
伺服器使用一個輸入/輸出記憶體管理單元(Input/Output Memory Management Unit,IOMMU)將DMA I/O匯流排(如PCIe)連線到主存儲器,和傳統的記憶體管理單元一樣,它將CPU可見的虛擬地址轉換成物理地址,IOMMU會將設備可見的虛擬地址映射到物理地址,這些單元也提供了記憶體保護功能。
I/O虛擬化可以隔離和限制設備訪問由分區管理設備擁有的資源。VT-d通過減少VMM參與管理I/O流量的需求,消除了大部分的性能開銷,從而加速數據傳輸。基於純軟體的虛擬化技術中,用戶作業系統與硬體設備通過VMM來通信,而藉助VT-d,完成初始分配之後,數據即可直接在客戶作業系統與為其分配的設備之間進行傳輸。這樣,I/O流量的流動將更加迅速,減少的VMM工作運行則會進一步縮減伺服器處理器的負載。此外,由於用於特定設備或客戶作業系統的I/O數據不能被其它任何硬體或客戶軟體組件訪問,VMM將特定I/O設備安全分配給特定客戶作業系統。每個設備在系統記憶體中都有一個專用區域,只有該設備及其分配的客戶作業系統才能對該區域進行訪問,增強了虛擬化的安全性能。
遷移技術
虛擬機遷移技術為伺服器虛擬化提供了便捷的方法。當前流行的虛擬化工具如VMware,Xen,HyperV,KVM都提供了各自的遷移組件。遷移伺服器可以為用戶節省管理資金、維護費用和升級費用。以前的x86伺服器,體積比較“龐大”;而一般的伺服器,體積已經比以前小了許多,遷移技術使得用戶可以用一台伺服器來同時替代以前的許多台伺服器,這樣就節省了用戶大量的機房空間。另外,虛擬機中的伺服器有著統一的“虛擬硬體資源”,不像以前的伺服器有著許多不同的硬體資源(如主機板晶片組不同,網卡不同,硬碟,RAID卡,顯示卡不同)。遷移後的伺服器,不僅可以在一個統一的界面中進行管理,而且通過某些虛擬機軟體,如VMware 提供的高可用性工具,在這些伺服器因為各種故障停機時,可以自動切換到網路中另外相同的虛擬伺服器中,從而達到不中斷業務的目的。總之,遷移的優勢在於簡化系統維護管理,提高系統負載均衡,增強系統錯誤容忍度和最佳化系統電源管理。
V2P(虛擬機到物理機的遷移Virtual-to-Physica)
V2P指把一個作業系統、應用程式和數據從一個虛擬機中遷移到物理機的主硬碟上,是P2V的逆操作。它可以同時遷移虛擬機系統到一台或多台物理機上。儘管虛擬化的基本需求是整合物理機到虛擬機中,但這並不是虛擬化的唯一的套用。比如有時虛擬機上的應用程式的問題需要在物理機上驗證,以排除虛擬環境帶來的影響。另外,配置新的工作站是件令IT管理者頭痛的事情,但虛擬化的套用可以幫助他解決這個難題。先配置好虛擬機,然後運用硬碟克隆工具複製數據至工作站硬體,比如賽門鐵克的Save & Restore(Ghost)。不過這種克隆方法有兩個局限:一個鏡像只能運用在同種硬體配置的機器上;要想保存配置的修改,只能重做新的鏡像。
V2V(虛擬機到虛擬機的遷移Virtual-to-Virtual)
V2V遷移是在虛擬機之間移動作業系統和數據,照顧主機級別的差異和處理不同的虛擬硬體。虛擬機從一個物理機上的VMM遷移到另一個物理機的VMM,這兩個VMM的類型可以相同,也可以不同。如VMware遷移到KVM,KVM遷移到KVM。可以通過多種方式將虛擬機從一個VM Host系統移動到另一個VM Host系統。
P2V(物理機到虛擬機的遷移Physical-to-Virtua)
P2V指遷移物理伺服器上的作業系統及其上的套用軟體和數據到VMM(Virtual Machine Monitor)管理的虛擬伺服器中。這種遷移方式,主要是使用各種工具軟體,把物理伺服器上的系統狀態和數據“鏡像”到VMM提供的虛擬機中,並且在虛擬機中“替換”物理伺服器的存儲硬體與網卡驅動程式。只要在虛擬伺服器中安裝好相應的驅動程式並且設定與原來伺服器相同的地址(如TCP/IP位址等),在重啟虛擬機伺服器後,虛擬伺服器即可以替代物理伺服器進行工作。
認證
虛擬化技術是當今企業熱門技術之一,而伺服器虛擬化技術能夠為企業實現伺服器整合、降低總體擁有成本等眾多優勢。學員學完該課程(實施和管理微軟伺服器虛擬化),可參加70-659的考試,考試通過後,可獲得兩張MCTS證書:Windows Server 2008 R2,Server Virtualization 和System Center Virtual Machine Manager,Configuring。擁有該證書,說明您已經掌握了伺服器虛擬化的配置、管理及實現。
物理環境
負載太大導致失敗
正如上面所提及的那樣,伺服器虛擬化技術已經足夠成熟,甚至能夠對非常大規模的資源密集型負載順利完成虛擬化。然而對這種類型負載進行虛擬化的問題在於,如何實現容錯機制。
構想這樣一種虛擬化情況,你所在的企業擁有一種非常關鍵、並且異常消耗資源的虛擬化資料庫套用,其運行在虛擬化物理集群當中,能夠防止伺服器級別虛擬化的故障。
不論是否進行虛擬化,我們都應該使用故障轉移集群來保護負載。可以在虛擬伺服器環境當中創建一個虛擬化機集群,或者使用主機級別的虛擬化集群功能,如果發生主機故障可以將虛擬化(自動實時遷移到另外一台虛擬化主機當中。然而這種方式存在一種問題,就是虛擬化資源消耗。
伺服器虛擬化的前提就是所有虛擬機共享一個物理硬體資源池。異常消耗資源的負載可能會占用大量虛擬化伺服器資源,因此如果目標主機上已經運行了任何其他虛擬化負載,那么資源密集型套用非常有可能無法完成故障虛擬化轉移過程。因此對於虛擬化情況來說,將這種負載運行在虛擬化物理硬體當中更加實際,除非有非常緊迫的業務需求要對這個負載進行虛擬化(比如為最終遷移到雲中做好準備)。
資源密集型負載
然而,還有一些虛擬化邏輯問題可能會妨礙你對一些大型負載進行虛擬化。像VMware ESXi和微軟Hyper-V這樣的hypervisor會限制虛擬化的規模。比如,它們會限制分配給虛擬化虛擬機的vCPU和記憶體數量。當然,只有極少數的虛擬化、非常大型的虛擬機虛擬化才會超過這種限制,但是這種虛擬化限制是真實存在的,如果你正在考慮將要進行虛擬化的負載足夠大,那么有可能正好遇到這種虛擬化限制。
硬體依賴
在決定是否進行虛擬化之前,你還應該考慮負載對於虛擬化物理硬體的依賴性。虛擬化硬體依賴性存在多種形式。比如,我看到一個虛擬化應用程式在底層明確規定只能使用一種非常特定的主機匯流排接口卡。這種依賴關係將會妨礙特定應用程式在虛擬化服正常工作。
你可能會遇到的另外一種虛擬化硬體依賴關係和著作權保護相關。有些虛擬化應用程式會檢查機器是否插入了USB快閃記憶體盤或者虛擬化校驗處理器的序列號,以防止虛擬化應用程式被非法複製。對於虛擬化使用物理硬體作為複製保護機制的應用程式來說,通常不能對其進行虛擬化。
不支持的作業系統
你可能還會發現不可能虛擬化那些運行有非常罕見的、超過運行生命周期虛擬化或者不被支持作業系統的虛擬化伺服器。不僅hypervisor廠商不能支持這些作業系統,並且像MVware Tools和Hyper-V Integration Services這樣的組件也只能支持特定的操作虛擬化系統類型。
對於虛擬化那些運行過期作業系統的伺服器來說,實際上只有兩種觀點。一種想法是建議永遠不要在hypervisor上運行不被支持的虛擬化作業系統;而另外一種觀點會讓你繼續進行虛擬化操作,將伺服器進行虛擬化能夠降低對於過期物理硬體的依賴性。
我曾經虛擬化一台運行Windows NT的伺服器,即便Windows NT沒有位於hypervisor廠商的官方支持列表當中。儘管虛擬化過程比我想像的還要複雜,但是最終還是成功完成了虛擬化,企業終於能夠將這台配置古老硬體的伺服器退役了。
物理存儲方面
你可能希望避免虛擬化某種負載的最後一個原因是一些負載對於虛擬化物理存儲具有依賴關係。公平來說,Hyper-V和VMware都擁有自己的方式能夠將虛擬化虛擬機連線到物理磁碟上。比如在Hyper-V當中,虛擬化物理存儲就被作為一種iSCSI直通磁碟。
儘管hypervisor廠商完全支持直通磁碟,但是使用這種方式有可能使得備份流程更加複雜。如果從主機層級創建備份,那么我所見到的大多數Hyper-V備份應用程式都不支持對直通存儲進行備份。
在我看來,不應該對所有負載都進行虛擬化。但是要記住,虛擬化技術也在不斷發展,不適合虛擬化的伺服器並不意味著在一年或者兩年之後,依然不能對其進行虛擬化。
未來值得關注技術
隨著科學技術的不斷發展,從DNA“摺紙術”到骨整合技術,一系列“大想法”受以媒體越來越多的關注,未來我們將有機會觸摸壓電顯示器,也有機會購買自己的第一輛超級電容動力汽車。 |