簡介
虛擬化技術與多任務以及
超執行緒技術是完全不同的。多任務是指在一個作業系統中多個
程式同時並行運行,而在虛擬化技術中,則可以同時運行多個作業系統,而且每一個作業系統中都有多個程式運行,每一個作業系統都運行在一個虛擬的CPU或者是虛擬
主機上;而超執行緒技術只是單CPU模擬雙CPU來平衡程式運行
性能,這兩個模擬出來的CPU是不能分離的,只能
協同工作。虛擬化技術也與如今VMware Workstation等同樣能達到虛擬效果的軟體不同,是一個巨大的技術進步,具體表現在減少軟體
虛擬機相關開銷和支持更廣泛的作業系統方面。
純軟體虛擬化解決方案存在很多限制。“客戶”作業系統很多情況下是通過VMM(Virtual Machine Monitor,虛擬機監視器)來與硬體進行通信,由VMM來決定其對系統上所有虛擬機的訪問。(注意,大多數
處理器和記憶體訪問獨立於VMM,只在發生特定事件時才會涉及VMM,如
頁面錯誤。)在純軟體虛擬化解決方案中,VMM在軟體套件中的位置是傳統意義上作業系統所處的位置,而作業系統的位置是傳統意義上套用
程式所處的位置。這一額外的通信層需要進行
二進制轉換,以通過提供到物理
資源(如處理器、記憶體、存儲、顯示卡和網卡等)的接口,模擬硬體環境。這種轉換必然會增加系統的複雜性。此外,客戶作業系統的支持受到
虛擬機環境的能力限制,這會阻礙特定技術的部署,如64位客戶作業系統。在純軟體解決方案中,軟體
堆疊增加的複雜性意味著,這些環境難於管理,因而會加大確保系統可靠性和安全性的困難。
集來控制虛擬過程,通過這些指令集,VMM會很容易提高
性能,相比軟體的虛擬實現方式會很大程度上提高性能。
虛擬化技術可提供基於晶片的功能,藉助兼容VMM軟體能夠改進純軟體解決方案。由於虛擬化硬體可提供全新的架構,支持作業系統直接在上面運行,從而無需進行
二進制轉換,減少了相關的性能開銷,極大簡化了VMM設計,進而使VMM能夠按通用標準進行編寫,性能更加強大。另外,在純軟體VMM中,如今缺少對64位客戶作業系統的支持,而隨著64位
處理器的不斷普及,這一嚴重缺點也日益突出。而CPU的虛擬化技術除支持廣泛的傳統作業系統之外,還支持64位客戶作業系統。
虛擬化技術是一套解決方案。完整的情況需要CPU、
主機板晶片組、BIOS和軟體的支持,例如VMM軟體或者某些作業系統本身。即使只是CPU支持
虛擬化技術,在配合VMM的軟體情況下,也會比完全不支持虛擬化技術的系統有更好的
性能。
兩大CPU巨頭Intel和AMD都想方設法在虛擬化
領域中占得先機,但是AMD的虛擬化技術在時間上要比Intel落後幾個月。Intel自2005年末開始便在其
處理器產品線中推廣套用Intel Virtualization Technology(Intel VT)虛擬化技術。如今,
Intel已經發布了具有Intel VT虛擬化技術的一系列處理器產品,包括桌面平台的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列,還有Core Duo系列和Core Solo系列中的部分產品,以及伺服器/
工作站平台上的Xeon LV系列、Xeon 5000系列、Xeon 5100系列、Xeon MP 7000系列以及Itanium 2 9000系列;同時絕大多數的Intel下一代主流處理器,包括
Merom核心
移動處理器,
Conroe核心桌面處理器,
Woodcrest核心伺服器處理器,以及基於Montecito核心的Itanium 2高端伺服器處理器都將支持Intel VT虛擬化技術。
而AMD方面也已經發布了支持
AMDVirtualization Technology(AMD VT)虛擬化技術的一系列
處理器產品,包括Socket S1接口的Turion 64 X2系列以及Socket AM2接口的Athlon 64 X2系列和Athlon 64 FX系列等等,並且絕大多數的AMD下一代主流處理器,包括即將發布的Socket F接口的
Opteron都將支持AMD
VT虛擬化技術。
計算機虛擬化的特點
Fidelity(保真性):套用系統程式在虛擬機上執行,除了時間因素外(會比物理硬體上執行慢一點),將表現為與在物理硬體上相同的執行行為。
Performance(高性能):在虛擬環境中應用程式絕大多數指令在
虛擬機管理器不受干預的情況下,直接在物理硬體上執行。
Safety(安全性):物理硬體由虛擬機管理器全權管理,被虛擬出來的執行環境的程式(包括作業系統)不能直接訪問物理硬體。
四種虛擬化技術
虛擬化技術(
Virtualization)和分區(Partition)技術是緊密結合在一起,從60年代
Unix誕生起,虛擬化技術和分區技術就開始了發展,並且經歷了從“硬體分區”->“
虛擬機”->“準虛擬機”->“虛擬作業系統”的發展歷程。最早的分區技術誕生自人們想提升大型
主機利用率需求。比如在金融、科學等
領域,大型
Unix伺服器通常價值數千萬乃至上億元,但是實際使用中多個
部門卻不能很好的
共享其計算能力,常導致需要計算的部門無法獲得計算能力,而不需要大量計算能力的部門占有了過多的
資源。這個時候分區技術出現了,它可以將一台大型伺服器分割成若干分區,分別提供給生產部門、測試部門、研發部門以及其他部門。
硬體分區技術
硬體分區技術:硬體
資源被劃分成數個分區,每個分區享有獨立的
CPU、記憶體,並安裝獨立的作業系統。在一台伺服器上,存在有多個系統實例,同時啟動了多個作業系統。這種分區方法的主要缺點是缺乏很好的靈活性,不能對資源做出有效調配。隨著技術的進步,如今對於資源劃分的
顆粒已經遠遠提升,例如在IBM AIX系統上,對CPU資源的劃分顆粒可以達到0.1個CPU。這種分區方式,在目前的
金融領域,比如在銀行信息中心得到了廣泛採用。
虛擬機技術
在
虛擬機技術(Virtual Machine Monitor)中,不再對底層的硬體
資源進行劃分,而是部署一個統一的Host系統。在Host系統上,加裝了Virtual Machine Monitor,虛擬層作為套用級別的軟體而存在,不涉及
作業系統核心。虛擬層會給每個虛擬機模擬一套獨立的硬體設備,包含CPU、記憶體、主機板、顯示卡、網卡等硬體資源,在其上安裝所謂的
Guest作業系統。最終用戶的套用
程式,運行在Guest作業系統中。這種虛擬機運行的方式有一定的優點,比如能在一個節點上安裝多個不同類型的作業系統;但缺點也非常明顯,虛擬硬體設備要消耗資源,大量代碼需要被翻譯執行,造成了
性能的損耗,使其更合適用於實驗室等特殊環境。其代表產品有EMC旗下的
VMware系列、微軟旗下的Virtual PC/Server系列等。
準虛擬機技術
為了改善
虛擬機技術(Virtual Machine Monitor)的
性能,一種新的準
虛擬化技術(Para-Virtualizion)技術誕生了。這種虛擬技術以
Xen為代表,其特點是修改作業系統的
核心,加入一個Xen Hypervisor層。它允許安裝在同一硬體設備上的多個系統可以同時啟動,由Xen Hypervisor來進行
資源調配。在這種
虛擬環境下,依然需要模擬硬體設備,安裝Guest作業系統,並且還需要修改作業系統的核心。Xen相對於傳統的Virtual Machine Monitor,性能稍有提高,但並不十分顯著。為了進一步提高性能,
Intel和AMD分別開發了
VT和Pacifica虛擬技術,將虛擬
指令加入到了CPU中。使用了CPU支持的硬體虛擬技術,將不再需要修改作業系統
核心,而是由CPU特有的
指令集進行相應的轉換操作。
作業系統虛擬化技術
最新的
虛擬化技術已經發展到了作業系統虛擬化,以
SWsoft的
Virtuozzo/
OpenVZ和Sun基於
Solaris平台的Container技術為代表,其中Virtuozzo是商業解決方案,而OpenVZ是以Virtuozzo為基礎的
開源項目。他們的特點是一個單一的節點運行著唯一的作業系統實例,通過在這個系統上加裝虛擬化平台,可以將系統劃分成多個獨立隔離的容器,每個容器是一個虛擬的作業系統,被稱為
虛擬環境(即VE,Virtual Environment),也被稱為
虛擬專用伺服器(即
VPS,Virtual Private Server)。在作業系統虛擬化技術中,每個節點上只有唯一的系統
核心,不虛擬任何硬體設備。此外,多個虛擬環境以模板的方式
共享一個檔案系統,
性能得以大幅度提升。在生產環境中,一台伺服器可根據環境需要,運行一個VE/VPS,或者運行上百個VE/VPS。所以,作業系統
虛擬化技術是面向生產環境、商業運行環境的技術。從最早的硬體分區到現階段的
虛擬機和虛擬作業系統,虛擬化技術已經發展了好幾代,不同的
技術路線也帶來了不同的優劣勢。選擇什麼樣的技術和產品,用戶還是應該結合自身的預算和套用實踐來決策。
優勢
虛擬機虛擬化技術所能提供的優勢取決於客戶的目標、所選擇的特殊
虛擬技術以及現有的IT基礎架構。並非所有的客戶都能夠從實現某一特殊虛擬化解決方案中獲得同樣的利益。現在,即使是使用虛擬化進行簡單的伺服器整合,客戶們也經常可以在某種程度上獲得以下很多利益:更高的
資源利用率——虛擬可支持實現物理資源和
資源池的動態
共享,提高資源利用率,特別是針對那些平均需求遠低於需要為其提供專用資源的不同負載。
降低管理成本
虛擬可通過以下途徑提高工作人員的效率:減少必須進行管理的物理
資源的數量;隱藏物理資源的部分複雜性;通過實現
自動化、獲得更好的信息和實現中央管理來簡化
公共管理任務;實現負載
管理自動化。另外,虛擬還可以支持在多個平台上使用公共的工具。
提高使用靈活性
通過虛擬可實現動態的
資源部署和重
配置,滿足不斷變化的業務需求。
提高安全性
虛擬可實現較簡單的共享機制無法實現的隔離和劃分,這些特性可實現對數據和服務進行可控和安全的訪問。
更高的可用性
虛擬可在不影響用戶的情況下對物理
資源進行刪除、升級或改變。
更高的可擴展性
根據不同的產品,
資源分區和匯聚可支持實現比個體物理資源小得多或大得多的
虛擬資源,這意味著您可以在不改變物理資源配置的情況下進行規模調整。
互操作性和投資保護
虛擬
資源可提供底層物理資源無法提供的與各種接口和
協定的兼容性。
改進資源供應
與個體物理
資源單位相比,虛擬能夠以更小的單位進行
資源分配。與物理資源相比,虛擬資源因其不存在硬體和作業系統方面的問題而能夠在出現
崩潰後更快地恢復。
AMD虛擬化技術
簡言之,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的官員還表示將在明年的
處理器中添加對信用平台模組(Trusted Platform Module) 1.2等Windows機器以外技術的支持。事實上,AMD正和開放信任運算機構合作開發
Linux平台上的可信賴運算標準,預計集成TPM的伺服器將在2007年上市。至於用於減輕
VMware等
虛擬軟體部分工作負擔的Pacifica技術,AMD稱也會不斷改善並最終包含輸入/輸出
虛擬技術。AMD已經開始這項
Xen計畫的研究工作,不過他們不願透露相應產品何時上市。
AMD的Presidio和Pacifica技術和
Intel的虛擬技術及"LaGrande"安全技術十分相似。雖然Intel一直稱到明年首季才會向系統廠商推廣使用新的
雙核奔騰D處理器"resler",但其實他們已經開始供貨部分集成虛擬技術的奔騰四處理器,而
LaGrande安全功能也會在明年出現於
Intel處理器中。比較值得我們關注的應該是Pacifica虛擬技術,這將可以大大提高台式處理器的運行能力。Pacifica技術最突出的地方在於對
記憶體控制器的改進方面 。
“Pacifica”通過Direct Connect Architecture(直接互連
架構)和在
處理器和記憶體控制器中引入一個新模型和功能來提高CPU的
虛擬套用。
與過去的方法來進行虛擬套用不同,這項新的技術能夠減少
程式的複雜性,提高
虛擬系統的安全性,並通過兼容現有的虛擬系統管理軟
件來減少花費在虛擬管理系統上的費用。例如,用戶能在一部機器上輕易地創建多個獨立且互相隔離的分區,從而減少了分區之間病毒傳播的危險。不過,AMD在
虛擬化技術方面仍比
Intel慢了一步。AMD表示其IO虛擬化技術規範已經成型,且技術授權完全免費,並將鼓勵軟硬體廠商採納該技術並集成進PC中。
目前AMD已經和
VMware、Xensource以及微軟等公司結盟推廣其虛擬化技術。AMD的虛擬化技術之前的開發代號為Pacifica,這種技術將在AMD今年的64位CPU核心邏輯以及
晶片組兩個層面得以實現。
英特爾虛擬化技術
在前不久的IDF春季論壇上,
Intel向人們展示了代號為“Vanderpool”的
虛擬化技術。這項技術將運用在Intel今年遲些時候推出的桌面CPU、64位ItaniumCPU以及明年推出Xeon
伺服器晶片和移動CPU上,屆時Intel的CPU將擁有硬體層次的虛擬化技術。
提到虛擬化技術,大家並不陌生。這項技術在傳統的
大型機和Unix系統上早已是很普及了,但因為桌面CPU大都使用的是X86架構,這決定了在其之上使用硬體級虛擬化技術的難度。Intel可謂創造先河,誓將該技術運用到桌面級產品上,用以提高CPU的
性能和降低系統組建開銷。這也在一定程度上符合Intel目前的策略,不再一味追求CPU的速度,而把焦點集中在CPU的效率上來。本文就將為讀者詳細介紹Vanderpool Technology技術(以下簡稱VT),它是什麼、做些什麼事、存在的問題及解決方法,還有在技術層面上它是如何運作的。
套用虛擬化平台
通過和信
套用虛擬化來發布
企業套用系統,能夠為用戶帶來更好的體驗。不需要改變現在網路結構和修改任何應用程式,就能實現快速、靈活地部署,而且內置的安全、
負載均衡機制保證了企業不間斷業務的進行,同時大大簡化
系統管理員管理和維護工作量。
使用和信套用虛擬化有什麼好處?
使用和信套用虛擬化能夠做到:
- 軟體套用的集中管理;
- 套用加速;
- 企業套用平台從區域網路向網際網路遷移。
和信套用虛擬化客戶端環境要求
作業系統:Windows XP、2003、
Vista、Win7 32位及64位系統
和信
套用虛擬化客戶端無特殊要求,只要能順利安裝以上作業系統,均可無障礙使用和信套用虛擬化。
什麼是虛擬化
虛擬化能使用戶在一台伺服器上同時運行多個作業系統,這與“多重任務處理”技術有些類似。不過“多重任務處理”技術只允許用戶在同一機器設備的同一作業系統中運行多個
程式,而虛擬化則可讓用戶在同一機器設備中運行多個作業系統。這樣用戶能更靈活高效地配用計算機
資源,並且有助於提高安全
性能。
想像一下,一個作業系統幾乎不需花任何時間就可被啟動,即使它崩潰了,你只需簡單地將它剔除出去,同時立即裝載一個新的。如果你正在同時運行幾個作業系統,當你準備給其中一個載入新的映像時,你可馬上將它關閉,並把該系統正在處理的工作分流給其他系統運行。如果你有5個RedHat的副本正在運行
Apache伺服器軟體,而其中一個因滿負荷而停止回響,沒問題,你只需簡單地將回響請求轉交給其他4個系統處理,同時重啟那個停止工作的系統就行了。
如果你已為你正在運行的作業系統存儲了一份“
快照”,那么每當有一些不愉快的事情發生時你都可重新啟動它,例如被
黑客攻擊、感染病毒。從一個安全的分區載入映像並修復好它就行了。虛擬化還可讓用戶毫不費時地重新安裝作業系統而不需像以往使用
Ghost那樣去安裝
設備驅動。你可簡單地就像使用普通
程式那樣去載入、卸載和存儲作業系統。
同樣,它也允許你在同一台機器上使用多個不同的作業系統。如果你是一名程式設計師,需要編寫代碼使它們在Windows 95/98/Me/2000/XP上都能運行,你可在你的辦公桌上準備5台機器或是1台運行了5種虛擬化作業系統的電腦。同時,作為程式設計師的你需在每個瀏覽器的每個版本上校驗這些代碼,很明顯微軟不會讓你在一個已擁有高版本IE的情況下去安裝更低版本的IE去做這些事,但你可一個個地安裝舊的作業系統或採取更好一些的解決方法——讓它們同時運行。
現有虛擬化技術及缺陷
是不是一切都很簡單和完美?然而在虛擬化世界並非一切都是盡善盡美的。最顯而易見的就是那么多的副本作業系統(上面例子中的作業系統副本多嗎?你可以想像一個網路
主機公司,20個、50個都是有可能的)同時運行在一台計算機上需要占據很多的
資源並導致更昂貴的伺服器開銷。數據傳輸在任何情況下都變得更難,因為越多東西被載入,需要的
存儲器容量也就越多。
是的,真正的殺手就是
系統開銷。目前在計算機虛擬化方面有幾項技術,但它們都伴有不同程度降低系統
性能方面的問題。單就CPU而言,其占用率可以從10%到超過40%。
很顯然,我們需要新的技術來解決這些問題。
Intel所要採用的
VT技術背後的思想就是降低虛擬化時的系統開銷。在我們深入了解它如何工作之前,我們有必要了解一下
虛擬化技術到底是如何實現不同的作業系統工作在同一CPU上的。
目前主要存在有3種類型的虛擬化技術:Paravirtualisation、二元碼轉譯和模擬器。大家最為熟悉可能就是模擬器了。你可以讓一個
超級任天堂的模擬器在Windows XP的一個視窗中運行,同時還可有另一個PS模擬器。這些都可看作是虛擬化的最基本形式。模擬器需耗費巨大的CPU開銷,如果你非要去模擬硬體裝置的每一個Bit位,你將花費大量的時間和精力。比較好的方法是跳過其中的某些部分,我們使用的模擬器就是這樣,它工作得也還過的去。
這個
領域的另一端就是目前較流行的並被業界認可的“Paravirtualisation”(以下簡稱PV)技術。按字面意思理解,是編
程式模擬的意思。它讓
主機作業系統知道它們正工作在一個虛擬化的環境中,通過修改它們以使之工作得更好。因此作業系統需針對這種方法進行修改和調整,它們必須來回於作業系統的編寫人員和編寫
虛擬化軟體人員之間。從這個角度來看,它並非是完全的虛擬化,因為存在這種合作的關係。
PV技術在開原始碼的作業系統中工作得不錯,
Linux,、xBSD都是很合適的PV工作平台的候選者,你可在這些系統中任意調整所需調整的地方,使PV能工作得更好。而Windows則不行,這大概能解釋最近為什麼眾多IT巨頭吹捧開源
虛擬化技術Xen了。
而“二元碼轉譯”(以下簡稱BT)技術可說是較折衷的方法了。它所要做的取決於作業系統將要做些什麼,並在不知不覺中改變它。假如作業系統試圖去執行
指令A,但該指令A會給虛擬化引擎帶來某些問題,那么BT將把它轉換成某些更合適的指令並偽造指令A應該返回的結果。這是一項欺騙工作,且占用大量CPU
資源,另外用許多代碼取代一條代碼也不會使事情運作得快些。
當你了解這些後,你會感到頭痛。純粹致命的缺陷的確沒有,但都沒有一個簡單的解決方案。這些虛擬化的技術仍在繼續運用,只是人們都在儘量使其處在一個較低程度的缺陷範圍內工作罷了。是什麼造成這樣的呢?
什麼問題困擾著我們
對於X86系統架構的CPU而言,至少在32位
領域,有太多讓人頭痛的條條框框,但作為一條總則,它們都包含有環轉換器(Ring Transitions)和有關
指令。從概念意義上說,環是一種劃分系統特權級別的方法(因此“Ring”也稱作特權環)。你可讓作業系統運行在一個特權級別上而不會使之被
用戶程式更改。這樣即使你的
程式出了問題,它也不會導致
系統崩潰,而作業系統能取得控制權,關閉出毛病的程式。這些環強行控制系統的不同部分。
Intel公司的
X86系列CPU(包括80386、80486、
Pentium、Pentium Pro、Pentium Ⅱ、Pentium Ⅲ以及現在的Pentium 4CPU),提供4個特權級別R0、R1、R2和R3。較大的數字表示較低的特權,我們可簡單理解為運行在某一級別的程式無法改變運行在較小數字級別上的程式,但較低數字級別上的程式可干擾甚至控制運行在較高數字級別的程式。
在實際運用中,被經常用到的只有R0和R3,即最高級別和最低級別。作業系統運行在R0上,而用戶程式運行在R3上。X86架構在向64位擴展時,採用的方法之一就是通過去掉中間的特權級別——R1和R2。幾乎沒有人注意到它們消失了,除了那些使用
虛擬化技術的特定人群。
像VMware這類軟體模式的虛擬化機(Virtual Machines,以下簡稱VM)顯然必須運行在R0級別上,但如它們要想保持完全控制權,就必須使作業系統在這個級別之外。最顯而易見的解決辦法是強迫
主機作業系統運行在一個較低級別的環中,如R1。它們的部分代碼原先被設定為從R0到R3,而不是R1到R3。雖然在PV環境中,你能修改作業系統從而使它工作得很好,但如果你要找到一個圓滿的解決方法,就必須使作業系統工作在R1級別中。
可如此一來又出現問題了,有些
指令只有當它們從R0級里發出或發往R0級時才會工作,如果不在正確的環中,這些指令會運作得很古怪。如果你試圖這么去做,會有很不好的後果。讓代碼在正確的環中執行確實能防止作業系統破壞VM,同時也防止運行在
主機作業系統上的軟體破壞作業系統自身。這就是所謂的“0/1/3”模式。
還有一種模式被稱為“0/3”模式。這種模式將VM放入R0級別中運行,而將作業系統和
用戶程式都放入R3級別中。但從本質上而言,它還是像“0/1/3”模式一樣去處理其他事情。在R3級別里,有特權的作業系統能更輕鬆地執行用戶程式,由於不存在環的阻隔,也使它運行的更快一些,但系統穩定性不佳。
另外一個方式去使用“0/3”模式,就是讓CPU保有兩份運行於R0級別中的事物的
頁表。一份為作業系統,另一份為運行在R3級別中的老
程式。這樣可擁有一份完整的
存儲器保護集,用來把用戶程式隔離到作業系統空間之外。當然,這同樣需要消耗
性能,只是以不同的方式罷了。
概括來說,在“0/1/3”模式中,系統安全性更高一些,但從R3到R1、R3到R0或R1到R0轉換時性能會受到一些影響,反過來也是。在“0/3”模式中,只存在R0與R3之間的轉換,所以它潛在的比一個非
主機作業系統運行得更快一些。但如你碰到一個問題,“0/3”模式比“0/1/3”模式更容易出現藍屏。儘管未來將廣泛使用“0/3”模式,主要是因為上文我們提到向在64位擴展時已去掉了R1和R2,所以你必須被迫使用“0/3”模式。對計算機而言,這被稱作是進步,同樣,毀滅性的崩潰被認為是“古怪”行為。
理論上,如果你可忍受一點不穩定性,或者在“0/1/3”模式中犧牲一點速度,那么應該說的很完美的。可它們在某些方面確實還存在一些缺陷,主要存在以下4點。首先是那些檢驗
指令自己所在環的指令,另外是那些處在錯誤的環中卻沒有正確保護CPU現場的指令。最後兩點是截然相反的,就是那些應引發錯誤卻沒有導致錯誤的指令,以及那些本不該導致錯誤卻引發許多錯誤的指令。所有這些都讓編寫VM的天才
程式員們活得不輕鬆。
其中第一點是顯而易見的。如果你給予作業系統R1級別的特權,當它檢驗自己運行所處的環時,它會返回1而不是0。如果此時運行於該系統的一段程式期望自己應該處在R0環時,那么它會因為得到的是R1而導致錯誤。這會導致藍屏的出現,
存儲器清除或另一些不理想的後果。二元碼轉譯技術可捕捉到這種錯誤,並把返回值偽裝成0,但這意味著需要幾十上百條
指令來完成這一工作,顯然速度受到極大影響。
保護現場是一個潛在的更糟糕的問題,有些CPU里的東西在上下文開關程式中並不是很容易被保存的。那些隱藏的
段暫存器狀態就是一個很好的例子。一旦它們被載入主存,其中一部分無法被保存,導致記憶體常駐部分和CPU中實際值間的不同而引起意外中斷。當然我們可為它們設立工作區,但這樣做極為複雜且需付出很高的代價使之表現得聰明一些。
那些本該引起某些問題卻沒有導致這些問題的指令也是擺在我們眼前的一道難題。如果你期望一條
指令應在你後面的設計的中斷陷阱中造成錯誤,但卻沒有,這一點也不會讓人因為沒有錯誤而高興。與此相反的情況也極為常見,如果不在正確的環中向CR0和CR4寫入,則會產生錯誤,導致系統崩潰。雖然這兩種錯誤在你不注意時可被修正,但卻造成很多
性能損失。
整個所涉及到的
虛擬化技術就是要將作業系統放在一個它本不應該在的地方,不斷地運轉去嘗試解決所有撲來的問題。存在許多問題,這些問題也不斷的發生,所以性能損失也就沒什麼奇怪的了。
解決之道
Intel的
VT技術能解決這些困擾。VT的目的是在儘可能最小化
程式員痛苦的同時儘可能多的增加“virtualization holes”(虛擬化孔)。這種解決方案中,VT-X針對X86而VT-i針對Itanium,分別引入了一種新的模式針對不同的CPU。這裡我們主要來看看
VT-X,實際上VT-i的功能與VT-X有很多相同的地方。
這種新的模式被稱為VMX,並且引入了一個虛擬化機
監控器VMM運行於其中。它被設定在R0級別下,你可以認為是R-1級或者看成是在環的旁邊運行。
主機作業系統和所有的程式在VMX模式中運行,與此同時VMM運行在VMX根模式中。
任何一個運行在VMX模式下的作業系統,都擁有所有運行於非VT系統中的一般作業系統的功能和特性。它也處在R0級別中,與平常一樣有權利處理每一件事情,而且並不知道有什麼東西正在它的旁邊運行。當情況得到授權,CPU進入VMX根模式,VMM就可以切換到其他一個運行在另一VMX實例的作業系統。這些切換被稱做VM登錄和VM退出。
VT技術所表現出來的不可思議的地方就在於它將從VMX模式到VMX根模式(或從VMX根模式到VMX模式)的登錄和退出處理易於操作。一旦
主機作業系統被涉及到,那它一定是獨自處在自己的世界裡的,你必須保存虛擬化世界的完整狀態並當你返回時重新載入它。雖然在VT里還有很多事物要去處理,但它被設計為一項任務,所以客觀地說它實際是一個簡單而並不費力的進程。
因為每一個作業系統實例都在正確的位置運行,所以前面所提到的4個問題也就不存在了。相關聯的工作區也不再需要,與此有關的
系統開銷沒有了。這些能有效提高速度。但這些並非免費,只是付出的代價要少很多。
啟動一個新的
主機作業系統,你需為其留出一塊4kB的存儲區並將它傳遞給一個VMPTLRD
指令。這塊區域將用來存儲該系統實例不被激活時的所有狀態和重要Bit位。只要該作業系統實例存在,則這塊區域一直有效,直到在其上運行一條VMCLEAR指令。這樣就設立了一個虛擬化機實例。
如果你想要把控制權交給虛擬化機,你要么登錄VMX非根模式或簡單一點,運行VMX模式即可。這些提到的VM登錄指令就是VMLAUNCH和VMRESUME,兩者並沒有太大的區別。VMRESUME指令只是簡單地從剛開始已經初始化的4kB存儲區里載入CPU狀態,並把控制權交給主機作業系統。VMLAUNCH做的也是同樣的工作,但它會啟動一個虛擬化機控制構件VMCS,它包含一些設立VM的現場背後的記錄,因為這需花費一些時間,所以人們儘量避免在並發登錄時使用VMLAUNCH。
從這一點來看,
主機作業系統開始了它的愉快之旅,儘可能地運轉,毫無察覺是否有其他東西正在它的一旁運行。正如過去所計畫的一樣,它存在於自己的世界裡,全速運行,或接近全速。唯一的問題是你如何打破這一切美好的景象而將它關閉到一邊,以使得機器里的其他作業系統能真正運行。這就是
VT技術所體現出來的複雜的一面——VMCS中一些特別的位映像。
這些位映像是一些32位的欄位,每一個Bit位標誌一個事件。如果某個事件被觸發,則對應的Bit位被置位,CPU觸發一條VM退出
指令,並將控制權返還給運行在VMX根模式下的VMM。VMM可做任何想做的事,然後將VMRESUME指令傳遞給下一個作業系統,或剛離開的那個作業系統。這個被啟動的作業系統同樣很好地運行著,直到觸發另一條VM退出指令。如此這樣以每秒上千次的速度重複著。
什麼能觸發這些指令呢?它們可以是引腳信號、CPU、異常和
頁面錯誤這些平台事件,所有這些都會觸發VM退出指令。
VT技術的完美之處在於它有很強的適應性,另一個與此類似之處就是在
調試程式中設定斷點,你可在每個事件上都設定一個,或者一個也不設定,這都取決於你自己。
引腳信號事件要做的是當有一個
內部中斷或一個不可禁止中斷髮生時,則觸發退出
指令。而CPU事件,則是當你設定任意Bit位在某一欄位,當相應的CPU狀態接收到它時,則觸發退出指令。雖然大多數指令需要去設定,但也有一些指令無條件地引發VM退出指令。這是在一個非常細小的層面上控制VM,允許每當你需要時登錄和退出。
異常位映像也是一些32位的欄位,每個Bit位標誌每個32位指令地址的異常情況。如果Bit位被設定並有一個異常被拋出,它就會引發VM退出指令。如果Bit位是空的或沒有異常,那么
主機作業系統則繼續它的快樂之旅,與平常一樣。這是一種從VMX模式退出而進入VMX根模式的
系統開銷非常低的方法。
最後還有
頁面錯誤退出,它與異常退出十分相像,只不過它用兩個32位欄位來控制。這些欄位內的Bit位對每一個可能出問題的頁面
錯誤代碼進行映像,因此你可細心地從中挑選從哪裡退出。同樣,它也是基於很細小的層面,系統開銷也很低。
在計算機里,VT工作在一個比傳統的R0環更有特權的級別中。任何一個
主機作業系統都可在沒有改變的舊有架構下運行,並且不知道一個控制
程式在控制它們。當遭遇到某些用戶設定的觸發器,控制權將被轉交給運行在更高級別的VMX根模式上的VMM。因為這是一種被動觸發事件,而不需被積極監視,因此
系統開銷降到了最低限。
VT技術使得安裝和卸載那些比以往VM模式更穩定的運行環境變得簡單。如果你需運行虛擬化系統,沒有理由不用一個擁有Vanderpool功能的CPU去實現它,而軟體虛擬化機會逐漸不被人關注。
這也許不錯,但必須記得,這必須付出代價。每一次登錄意味著建立4kB的
存儲區域,每一次退出要向這4kB存儲區內寫入數據。這看上去有些耗費過多,可與那些較老的方式比較,它的速度驚人地快。
總結
Intel的
VT技術給人們帶來了驚喜,它讓我們可在硬體級別上完成計算機的虛擬化工作。目前時機成熟了,Intel將首先在其桌面CPU中引入該技術,最新的Pentium 4 6系列CPU就支持VT,這讓更多的用戶都能涉足到新技術的套用,大大提高了用戶使用CPU的效率,編寫VMM不再那么困難了。
不過我們也要清醒地認識到,現有的
虛擬化技術不會馬上消失,相反它們會變得更為普遍且系統開銷問題也正得到改善,而大型伺服器提供商們也不會在現有的技術上發生巨大的變化,畢竟目前還用得過去。加上AMD公司也發布了在其64位CPU上使用Pacifica虛擬化技術,因此VT想要取代現有的計算機虛擬化技術或得到人們的認同還需一段時間。可我們相信硬體級別的虛擬化技術毋庸置疑的是
未來計算機發展的方向,有著燦爛的前途。