簡(jiǎn)述:在Linux 2.6內(nèi)核中, UML存在于主內(nèi)核樹(shù)中, 但是必須打開(kāi)和重新編譯才能使用UML. 一些修改包括, 設(shè)備虛擬, 允許客戶操作系統(tǒng)分享存在的物理設(shè)備, 比如塊設(shè)備(磁盤, CD-ROM, 和文件系統(tǒng)), 控制臺(tái), 網(wǎng)卡, 聲卡等.
虛擬化技術(shù)的應(yīng)用十分廣泛. 當(dāng)前虛擬化技術(shù)主要關(guān)注于服務(wù)器的虛擬化, 或在單個(gè)主機(jī)上寄存多個(gè)獨(dú)立的操作系統(tǒng). 本文首先介紹虛擬化技術(shù)的原理, 然后討論多個(gè)虛擬化技術(shù)的實(shí)現(xiàn)方法. 另外介紹了一些其它的虛擬化技術(shù), 比如Linux上操作系統(tǒng)級(jí)的虛擬化技術(shù).
虛擬化把事物從一種形式改變?yōu)榱硪环N形式. 計(jì)算機(jī)的虛擬化使單個(gè)計(jì)算機(jī)看起來(lái)像多個(gè)計(jì)算機(jī)或完全不同的計(jì)算機(jī).
虛擬化技術(shù)也可以使多臺(tái)計(jì)算機(jī)看起來(lái)像一臺(tái)計(jì)算機(jī). 這叫做服務(wù)器聚合(server aggregation)或網(wǎng)格計(jì)算(grid computing).
首先我們回顧一下虛擬化技術(shù)的歷史.
虛擬化技術(shù)的歷史
虛擬化技術(shù)不是一個(gè)新的主題; 實(shí)際上, 它已有40年的歷史. 最早使用虛擬化技術(shù)的是IBM 7044計(jì)算機(jī), 它是基于MIT(麻省理工學(xué)院)為IBM704計(jì)算機(jī)開(kāi)發(fā)的分時(shí)系統(tǒng)CTSS(Compatible Time Sharing System), 和曼徹斯特大學(xué)的Atlas項(xiàng)目(世界最早的超級(jí)計(jì)算機(jī)之一), 首次使用了請(qǐng)求調(diào)頁(yè)和系統(tǒng)管理程序調(diào)用.
硬件虛擬化
IBM早在1960年就認(rèn)識(shí)到虛擬化技術(shù)的重要性, 于是開(kāi)發(fā)了型號(hào)為Model 67的System/360主機(jī). Model 67主機(jī)通過(guò)虛擬機(jī)監(jiān)視器(VMM, Virtual Machine Monitor)虛擬所有的硬件接口. 在早期的計(jì)算中, 操作系統(tǒng)被稱做Supervisor. 能夠運(yùn)行在其它操作系統(tǒng)之上的操作系統(tǒng)被稱做hypervisor(名稱首次出現(xiàn)在1970年).
VMM直接運(yùn)行在底層硬件上, 允許執(zhí)行多個(gè)虛擬機(jī)(VMs). 每一個(gè)VM(虛擬機(jī))運(yùn)行自己的操作系統(tǒng)實(shí)例 -- 早期時(shí)候稱為CMS, 或會(huì)話監(jiān)視系統(tǒng)(CMS, Conversational Monitor System). 然后VM繼續(xù)發(fā)展. 今天你能夠在System z9主機(jī)上發(fā)現(xiàn)VM, 它能夠向后兼容, 甚至是System/360.
處理器虛擬化
另外一個(gè)早期使用的虛擬化技術(shù), 仿真處理器, 也叫做P-code(or pseudo-code)機(jī). P-code是一種機(jī)器語(yǔ)言, 運(yùn)行在虛擬機(jī)上而不是實(shí)際的硬件. 知名的P-code語(yǔ)言在1970年由加州大學(xué)圣地亞哥分校的Pascal系統(tǒng)項(xiàng)目組開(kāi)發(fā). 它可以把Pascal程序編譯成P-code代碼, 然后在具有P-code功能的虛擬機(jī)上運(yùn)行. P-code程序具有高度可移植性, 能夠運(yùn)行在任何具有P-code功能的虛擬機(jī)上.
1960年的BCPL語(yǔ)言(基本組合程序設(shè)計(jì)語(yǔ)言, Basic Combined Programming Language)也使用了同樣的概念, 它是C語(yǔ)言的前身. 編譯器首先把BCPL代碼編譯成一個(gè)中間機(jī)器代碼: O-code. 然后, O-code被編譯成目標(biāo)機(jī)器代碼. P-code模型已被廣泛使用到各種編譯器當(dāng)中, 從而為編譯器移植到新的主機(jī)架構(gòu)提供了復(fù)雜性.(通過(guò)一個(gè)中間語(yǔ)言分成前端和后端).
Java虛擬機(jī)(JVM)
Java虛擬機(jī)也采用了P-code模型. 從而我們可以簡(jiǎn)單通過(guò)移植JVM程序到新架構(gòu)的機(jī)器上來(lái)廣泛發(fā)布Java程序.
指令虛擬化
近來(lái)頻繁出現(xiàn)的虛擬化概念: 指令虛擬化, 也叫做二進(jìn)制翻譯. 在這個(gè)模型中, 虛擬指令被動(dòng)態(tài)翻譯成底層硬件的物理指令. 程序執(zhí)行后, 代碼一段一段地被翻譯. 如果出現(xiàn)分支, 一套新的代碼指令將被引入和翻譯. 這十分類似于緩存操作, 指令塊從內(nèi)存移動(dòng)到本地的快速緩存內(nèi)存中執(zhí)行.
近來(lái)Transmeta公司設(shè)計(jì)的Crusoe中央處理器使用了該模型. 二進(jìn)制翻譯由Code Morphing專利技術(shù)實(shí)現(xiàn). 類似的一個(gè)實(shí)例, 全虛擬技術(shù)通過(guò)使用動(dòng)態(tài)生成代碼掃描來(lái)發(fā)現(xiàn)和重定向特權(quán)指令(解決特殊處理指令集中的問(wèn)題).
虛擬化技術(shù)的類型
現(xiàn)在不只存在一種虛擬化技術(shù). 事實(shí)上有多種方法可以使用不同層次的抽象來(lái)實(shí)現(xiàn)同樣的結(jié)果. 本章介紹Linux上三種最常用虛擬化技術(shù)的優(yōu)點(diǎn)和弱點(diǎn). 業(yè)屆有時(shí)使用不同的術(shù)語(yǔ)來(lái)描述同一個(gè)虛擬化技術(shù). 為了保持連續(xù)性, 下面使用的術(shù)語(yǔ)參考了其它的術(shù)語(yǔ).
虛擬化技術(shù)和游戲
一篇虛擬化技術(shù)的文章如果沒(méi)有提到復(fù)合式大型電玩模擬器(MAME)就不是一篇完整的文章. MAME, 就如名字一樣, 是一個(gè)能夠模擬以往arcade游戲的機(jī)器模擬器(全部). 做一個(gè)補(bǔ)充, 整個(gè)機(jī)器是被虛擬的, 包括聲音和圖形還有控制硬件. MAME是一個(gè)非常棒的應(yīng)用程序, 你也可以通過(guò)仔細(xì)閱讀源碼來(lái)了解它是如何實(shí)現(xiàn)的.
硬件模擬器
無(wú)可否認(rèn), 最復(fù)雜的虛擬化技術(shù)是硬件模擬器. 在這個(gè)方法中, 首先在主機(jī)系統(tǒng)上創(chuàng)建硬件VM, 然后模擬硬件的功能, 如圖1顯示:
圖1. 硬件模擬器: 使用VM模擬需要的硬件
正如你可能猜到, 硬件模擬器的主要問(wèn)題是速度極慢. 因?yàn)槊恳粋€(gè)指令在底層硬件都需模擬, 所以速度慢了100倍. 高保真模擬還包含了循環(huán)校驗(yàn), 用于模擬CPU的管道和緩存行為, 實(shí)際速度會(huì)慢了1000倍.
硬件模擬有自己的優(yōu)點(diǎn). 比如, 使用硬件模擬, 你能夠在基于ARM處理器的主機(jī)上模擬運(yùn)行基于PowerPC未經(jīng)任何修改的操作系統(tǒng). 你甚至能在每個(gè)不同模擬處理器上運(yùn)行多個(gè)虛擬機(jī).
模擬器和開(kāi)發(fā)
硬件模擬器最有意思的一個(gè)應(yīng)用是firmware(固件)和硬件協(xié)作開(kāi)發(fā). firmware開(kāi)發(fā)人員無(wú)需等待最新硬件的推出, 他們可以使用目標(biāo)硬件的虛擬機(jī)來(lái)驗(yàn)證實(shí)際代碼中的許多概念.
全虛擬化
全虛擬化(Full virtualization), 也稱為原始虛擬化技術(shù), 是另一種虛擬化方法. 該模型使用虛擬機(jī)協(xié)調(diào)客戶操作系統(tǒng)和原始硬件(見(jiàn)圖2). 這里"協(xié)調(diào)"是一個(gè)關(guān)鍵詞, 因?yàn)閂MM在客戶操作系統(tǒng)和裸硬件之間用于工作協(xié)調(diào). 一些受保護(hù)的指令必須由Hypervisor(虛擬機(jī)管理程序)來(lái)捕獲和處理. 因?yàn)椴僮飨到y(tǒng)是通過(guò)Hypervisor來(lái)分享底層硬件.
圖2. 全虛擬化: 使用Hypervisor分享底層硬件
全虛擬化的運(yùn)行速度要快于硬件模擬, 但是性能方面不如裸機(jī), 因?yàn)镠ypervisor需要占用一些資源. 全虛擬化最大的優(yōu)點(diǎn)是操作系統(tǒng)沒(méi)有經(jīng)過(guò)任何修改. 它的唯一限制是操作系統(tǒng)必須能夠支持底層硬件(比如, PowerPC).
老機(jī)器上的Hypervisors
一些老的硬件如x86, 全虛擬化遇到了問(wèn)題. 比如, 一些敏感的指令需要由VMM來(lái)處理(VMM不能設(shè)置陷阱). 因此, Hypervisors必須動(dòng)態(tài)掃描和捕獲特權(quán)代碼來(lái)處理問(wèn)題.
半虛擬化
半虛擬化(Paravirtualization)是另一種類似于全虛擬化的熱門技術(shù). 它使用Hypervisor(虛擬機(jī)管理程序)分享存取底層的硬件, 但是它的客戶操作系統(tǒng)集成了虛擬化方面的代碼. 該方法無(wú)需重新編譯或引起陷阱, 因?yàn)椴僮飨到y(tǒng)自身能夠與虛擬進(jìn)程進(jìn)行很好的協(xié)作.
圖3. 半虛擬化: 通過(guò)客戶操作系統(tǒng)分享進(jìn)程
上面提到過(guò), 半虛擬化需要客戶操作系統(tǒng)做一些修改(配合Hypervisor), 這是一個(gè)不足之處. 但是半虛擬化提供了與原始系統(tǒng)相近的性能. 與全虛擬化一樣, 半虛擬化可以同時(shí)能支持多個(gè)不同的操作系統(tǒng).
操作系統(tǒng)級(jí)的虛擬化
最后一個(gè)我們需要了解的虛擬化技術(shù)是操作系統(tǒng)級(jí)的虛擬化(Operating system-level virtualization), 它使用不同于上面的虛擬化方法. 該技術(shù)在操作系統(tǒng)之上虛擬多個(gè)服務(wù)器, 支持在單個(gè)操作系統(tǒng)上簡(jiǎn)單隔離每一個(gè)虛擬服務(wù)器(見(jiàn)圖4).
圖4. 操作系統(tǒng)級(jí)的虛擬化: 隔離單個(gè)服務(wù)器
操作系統(tǒng)級(jí)的虛擬化需要修改操作系統(tǒng)內(nèi)核, 它的優(yōu)點(diǎn)是具有原始主機(jī)的性能.
為什么虛擬技術(shù)如此重要?
在了解當(dāng)今主流的linux虛擬化技術(shù)之前, 我們先來(lái)看虛擬化技術(shù)的優(yōu)點(diǎn).
從商業(yè)角度來(lái)看, 使用虛擬化技術(shù)有非常多的原因. 不過(guò)大多是用于服務(wù)器加固. 簡(jiǎn)單來(lái)說(shuō), 如果你能夠在單個(gè)服務(wù)上虛擬多個(gè)系統(tǒng), 這樣少數(shù)的幾臺(tái)計(jì)算機(jī)顯然能夠節(jié)省耗電, 空間, 冷卻和管理開(kāi)支. 考慮到確定服務(wù)器利用狀況的困難, 虛擬化技術(shù)支持動(dòng)態(tài)遷移(Live Migration). 動(dòng)態(tài)遷移允許操作系統(tǒng)能夠遷移到另一臺(tái)全新的服務(wù)器上, 從而減少當(dāng)前主機(jī)的負(fù)載.
虛擬化技術(shù)對(duì)開(kāi)發(fā)人員來(lái)說(shuō)也非常重要. Linux內(nèi)核占用了一個(gè)單一的地址空間, 這意味內(nèi)核或任何驅(qū)動(dòng)程序錯(cuò)誤都能導(dǎo)致整個(gè)操作系統(tǒng)停止工作. 而通過(guò)虛擬化你可以運(yùn)行多個(gè)操作系統(tǒng), 如果其中一個(gè)系統(tǒng)由于錯(cuò)誤而宕機(jī), Hypervisor和其它的操作系統(tǒng)不會(huì)受到任何影響. 這對(duì)調(diào)試內(nèi)核來(lái)說(shuō)就如同調(diào)試用戶空間程序一樣.
Linux相關(guān)的虛擬化項(xiàng)目
表1顯示了幾個(gè)可能加入到Linux(內(nèi)核)的虛擬化技術(shù), 主要關(guān)注于開(kāi)源.
表1. Linux相關(guān)的虛擬化項(xiàng)目
CODE:
項(xiàng)目 / 類型 / 許可證
Bochs 模擬器 LGPL
QEMU 模擬器 LGPL/GPL
VMware 全虛擬化 閉源
z/VM 全虛擬化 閉源
Xen 半虛擬化 GPL
UML 半虛擬化 GPL
Linux-VServer 操作系統(tǒng)級(jí)虛擬化 GPL
OpenVZ 操作系統(tǒng)級(jí)虛擬化 GPL
更多其它的虛擬化技術(shù), 請(qǐng)查閱參考資料欄目.
Bochs(模擬器)
Bochs是一個(gè)仿真x86 CPU的計(jì)算機(jī)模擬器, 它具有可移植性和可運(yùn)行在多種平臺(tái)上, 如x86, PowerPC, Alpha, SPARC和MIPS. Bochs的優(yōu)點(diǎn)是不僅能模擬處理器, 而且能模擬整臺(tái)計(jì)算機(jī), 包括外設(shè)如鍵盤, 鼠標(biāo), 視屏圖像硬件, 網(wǎng)卡等.
Bochs能被配置成一臺(tái)老的Intel 386計(jì)算機(jī), 或更新的處理器如486, Pentium, Pentium Pro, 或64位處理器. 甚至能模擬圖形指令如MMX和3DNow.
你也能夠通過(guò)Bochs模擬器在Linux系統(tǒng)上運(yùn)行任何Linux發(fā)行版, 還有Microsoft? Windows? 95/98/NT/2000(和多種應(yīng)用程序), 甚至是BSD操作系統(tǒng)(FreeBSD, OpenBSD,等).
庫(kù)級(jí)的虛擬化
這里沒(méi)有討論另一個(gè)虛擬化技術(shù), 它通過(guò)庫(kù)來(lái)模擬操作系統(tǒng)的一部分. 比如Wine(一部分為linux開(kāi)發(fā)的win32 API)和LxRun(一部分為Solaris開(kāi)發(fā)的Linux API).
QEMU(模擬器)
QEMU是另一個(gè)類似于Bochs的模擬器, 它有一些值得注意的地方. QEMU支持2個(gè)操作模式. 一個(gè)是全系統(tǒng)模擬模式. 該模式類似Bochs模擬整個(gè)計(jì)算機(jī)系統(tǒng)(包括處理器和外設(shè)). 而且能在合理的速度下使用動(dòng)態(tài)翻譯模擬一些處理器架構(gòu)如X86, X86_64, ARM, SPARC, PowerPC和MIPS. 你還可以在Linux, Solaris和FreeBSD系統(tǒng)上模擬Windows系統(tǒng)(包括XP)和Linux系統(tǒng). QEMU支持其它的操作系統(tǒng)組合(更多信息見(jiàn)參考資料欄目).
QEMU的第二個(gè)模式: 用戶模式模擬. 該模式能寄存在Linux上, 不同平臺(tái)的二進(jìn)制程序也能運(yùn)行. 比如, 一個(gè)MIPS平臺(tái)上的二進(jìn)制程序能夠運(yùn)行在x86平臺(tái)上的Linux系統(tǒng). 其它支持的平臺(tái)包括ARM, SPARC和PowerPC, 而且還有更多正在開(kāi)發(fā)的平臺(tái).
VMware(全虛擬化)
VMware是一個(gè)商業(yè)級(jí)的全虛擬化技術(shù). Hypervisor是客戶操作系統(tǒng)和硬件之間的抽象層. 該抽象層允許任何其它客戶操作系統(tǒng)運(yùn)行在主機(jī)操作系統(tǒng)之上.
VMware也能虛擬I/O硬件, 增加了高性能設(shè)備驅(qū)動(dòng)到Hypervisor中.
整個(gè)虛擬(機(jī))環(huán)境實(shí)際上是一個(gè)單獨(dú)的文件, 這意味整個(gè)系統(tǒng)(包括客戶操作系統(tǒng), 虛擬機(jī)和虛擬硬件)可以簡(jiǎn)單快速地整合到一個(gè)新的主機(jī), 從而實(shí)現(xiàn)負(fù)載均衡.
z/VM(全虛擬化)
當(dāng)IBM System z?是一個(gè)全新名稱的時(shí)候, 事實(shí)上可以追述到1960年. System/360在1965年使用虛擬機(jī)方法實(shí)現(xiàn)了虛擬技術(shù). 令人感興趣的是System z能夠與最老的System/360系列主機(jī)兼容.
z/VM?是System z操作系統(tǒng)的Hypervisor. 核心程序是控制程序(CP), 向客戶機(jī)操作系統(tǒng)提供硬件資源虛擬, 包括Linux(見(jiàn)圖5). 允許在多個(gè)客戶操作系統(tǒng)上虛擬多個(gè)處理器和其它資源.
圖5. 使用z/VM的操作系統(tǒng)級(jí)虛擬化技術(shù)
z/VM可以為那些需要相互通訊的客戶操作系統(tǒng)虛擬一個(gè)客戶局域網(wǎng)(LAN). 整個(gè)客戶局域網(wǎng)位于Hypervisor中, 所以很安全.
Xen(半虛擬化)
Xen由XenSource開(kāi)發(fā), 一個(gè)開(kāi)源免費(fèi)的操作系統(tǒng)級(jí)準(zhǔn)虛擬技術(shù). 回顧一下半虛擬技術(shù), Hypervisor和操作系統(tǒng)共同協(xié)作, 雖然操作系統(tǒng)需要做一些修改, 但是性能上比較接近于原始性能.
Xen需要與系統(tǒng)共同協(xié)作(客戶操作系統(tǒng)需要修改), 只有打過(guò)補(bǔ)丁的系統(tǒng)才能使用Xen. 從Linux角度來(lái)看, Linux本身是開(kāi)源的, 結(jié)果是Xen的性能要好于全虛擬化技術(shù). 但是從系統(tǒng)支持(比如支持其它非開(kāi)源的操作系統(tǒng))的角度來(lái)看, 這顯然是一個(gè)不足之處.
在Xen上可以運(yùn)行Windows客戶機(jī), 但需要Intel Vanderpool或AMD Pacifica處理器的支持. 其它支持的操作系統(tǒng)包括Minix, Plan 9, NetBSD, FreeBSD, 和OpenSolaris.
用戶模式Linux(半虛擬化)
用戶模式Linux(UML, User-Mode Linux)支持在linux系統(tǒng)的用戶空間運(yùn)行其它Linux操作系統(tǒng). 每一個(gè)客戶操作系統(tǒng)是主機(jī)Linux系統(tǒng)上的一個(gè)標(biāo)準(zhǔn)的進(jìn)程(見(jiàn)圖6). UML允許多個(gè)Linux內(nèi)核(有自己的用戶空間)運(yùn)行在單個(gè)Linux內(nèi)核之中.
圖6. 用戶模式Linux: Linux寄存
在Linux 2.6內(nèi)核中, UML存在于主內(nèi)核樹(shù)中, 但是必須打開(kāi)和重新編譯才能使用UML. 一些修改包括, 設(shè)備虛擬, 允許客戶操作系統(tǒng)分享存在的物理設(shè)備, 比如塊設(shè)備(磁盤, CD-ROM, 和文件系統(tǒng)), 控制臺(tái), 網(wǎng)卡, 聲卡等.
注: 客戶操作系統(tǒng)內(nèi)核運(yùn)行在用戶空間模式, 內(nèi)核必須專門編譯才能在客戶系統(tǒng)中使用(可與主機(jī)操作系統(tǒng)內(nèi)核版本不同). 整個(gè)主機(jī)存在兩套內(nèi)核, 一個(gè)是主機(jī)內(nèi)核(直接位于物理硬件之上), 另一個(gè)是客戶內(nèi)核(運(yùn)行在主機(jī)內(nèi)核的用戶空間之中). 這些內(nèi)核甚至可以相互嵌套, 允許客戶機(jī)內(nèi)核運(yùn)行在另外一個(gè)客戶機(jī)內(nèi)核之中.
Linux-VServer(操作系統(tǒng)級(jí)虛擬化)
Linux-VServer是操作系統(tǒng)級(jí)的虛擬化解決方案. Linux-VServer虛擬Linux內(nèi)核, 可以有多個(gè)用戶空間環(huán)境, 也稱做虛擬專用服務(wù)器(VPS), 各個(gè)VPS各自獨(dú)立運(yùn)行. Linux-VServer是通過(guò)修改Linux內(nèi)核來(lái)隔離用戶空間.
為了隔離每個(gè)單獨(dú)的用戶空間, 我們先了解上下文環(huán)境. 上下文是一個(gè)VPS進(jìn)程的容器, 因此我們可以使用ps等工具來(lái)了解vps進(jìn)程的狀況. 系統(tǒng)首次初始化后, 內(nèi)核定義了一個(gè)缺省的上下文, 管理端能夠查看所有的上下文(所有正在執(zhí)行的進(jìn)程). 你會(huì)猜到, 內(nèi)核和內(nèi)部數(shù)據(jù)結(jié)構(gòu)需做一些修改來(lái)支持虛擬化.
Linux-VServer使用chroot隔離每個(gè)VPS的root目錄. 我們知道chroot允許指定新的root目錄, 但需額外的功能(叫做chroot-Barrier)來(lái)限制VPS不會(huì)跨越到上級(jí)目錄. 在設(shè)定一個(gè)隔離的root目錄后, 每一個(gè)VPS有自己的用戶列表和root口令.
Linux 2.4和2.6內(nèi)核支持Linux-VServer, 可運(yùn)行在許多平臺(tái)上, 包括x86, x86-64, SPARC, MIPS, ARM和PowerPC.
OpenVZ(操作系統(tǒng)級(jí)虛擬化)
OpenVZ是一個(gè)類似于Linux-VServer的操作系級(jí)級(jí)虛擬化解決方案. 它有一些自己獨(dú)特的地方. OpenVZ是一個(gè)內(nèi)嵌虛擬化的內(nèi)核(修改過(guò)的), 它支持用戶空間隔離, 虛擬專用主機(jī)(VPS)和一套用戶管理工具. 比如, 你可以通過(guò)下面命令簡(jiǎn)單創(chuàng)建一個(gè)新的VPS:
列表1. 從命令行創(chuàng)建一個(gè)VPS
$ vzctl create 42 --ostemplate fedora-core-4
Creating VPS private area 正在創(chuàng)建VPS專用區(qū)域
VPS private area was created VPS專用區(qū)域成功創(chuàng)建
$ vzctl start 42
Starting VPS ... 啟動(dòng)VPS
VPS is mounted 加載VPS分區(qū)
你也可以使用vzlist命令列出所有已創(chuàng)建的VPS, 這有點(diǎn)類似于標(biāo)準(zhǔn)的Linux命令ps(查看進(jìn)程的狀態(tài)).
OpenVZ包含一個(gè)兩級(jí)的CPU調(diào)度器來(lái)調(diào)度進(jìn)程. 首先, 調(diào)度器確定需要使用CPU的VPS. 然后第二級(jí)調(diào)度器根據(jù)進(jìn)程的優(yōu)先級(jí)來(lái)執(zhí)行vps進(jìn)程.
OpenVZ支持beancounters. 一個(gè)beancounters包含了定義vps資源屬性的許多參數(shù). 這為vps提供了控制, 定義多少可有內(nèi)存, 多少可用IPC資源, 等.
OpenVZ獨(dú)特的地方是能夠設(shè)置檢查點(diǎn)和vps遷移(從一臺(tái)服務(wù)器遷移到另一臺(tái)服務(wù)器). 檢查點(diǎn)能夠停止正在運(yùn)行vps并保存當(dāng)前狀態(tài)到一個(gè)文件. 該文件在遷移過(guò)程中可用于在新服務(wù)器上恢復(fù)運(yùn)行VPS.
OpenVZ支持許多硬件結(jié)構(gòu), 包括x86, x86-64, 和PowerPC.
全虛擬化和半虛擬化的硬件支持
回顧一下IA-32(x86)體系結(jié)構(gòu)上存在的一些問(wèn)題. 某個(gè)特權(quán)指令不能夠引起陷阱, 可基于模式返回不同結(jié)果. 比如, x86的STR指令可以獲取安全狀態(tài), 但返回值是基于特別請(qǐng)求者的權(quán)限級(jí)別. 當(dāng)試圖在不同級(jí)別虛擬不同操作系統(tǒng)的時(shí)候是一個(gè)問(wèn)題. 比如, x86支持4環(huán)保護(hù), 0級(jí)(最高權(quán)限)通常運(yùn)行操作系統(tǒng), 1和2級(jí)支持操作系統(tǒng)服務(wù), 3級(jí)(最低級(jí)別)支持應(yīng)用程序. 不過(guò)硬件廠商已經(jīng)認(rèn)識(shí)到這些問(wèn)題(和其它的問(wèn)題), 而且開(kāi)發(fā)了新的設(shè)計(jì)來(lái)支持和加速虛擬化技術(shù).
Intel正在開(kāi)發(fā)新的虛擬技術(shù), 能在x86(VT-x)和Itanium(VT-i)結(jié)構(gòu)上支持Hypervisors. VT-x支持兩個(gè)新的操作. 一個(gè)是VMM(root), 另一個(gè)是客戶操作系統(tǒng)(非root). root方式具有最高權(quán)限, 而非root方式是非特權(quán)的(甚至ring 0). 結(jié)構(gòu)方面也支持自定義指令(使用vmm)終止VM(客戶操作系統(tǒng))和保存處理器狀態(tài). 其它功能請(qǐng)查閱參考資源欄目.
AMD也正在開(kāi)發(fā)硬件級(jí)的虛擬化技術(shù), 代號(hào)為Pacifica. Pacifica維護(hù)了一個(gè)客戶操作系統(tǒng)的控制塊(通過(guò)特殊指令保存執(zhí)行狀態(tài)). VMRUN指令允許虛擬機(jī)(和它相聯(lián)系的客戶操作系統(tǒng))運(yùn)行直到VMM重新獲得控制權(quán)(可自定義). 可配置性允許VMM為每一個(gè)客戶機(jī)自定義權(quán)限. Pacifica也能使用主機(jī)和客戶機(jī)內(nèi)存管理單元(MMU)表來(lái)提高地址翻譯.
這些硬件虛擬化技術(shù)能夠應(yīng)用到許多的虛擬化技術(shù)當(dāng)中, 包括Xen, VMware, User-mode Linux, 和其它的.
Linux KVM(內(nèi)核虛擬機(jī))
最近的Linux新聞經(jīng)常報(bào)道Linux 2.6.20內(nèi)核增加了KVM虛擬化技術(shù). KVM是全虛擬化的解決方案, 它的特點(diǎn)是系統(tǒng)內(nèi)核通過(guò)添加內(nèi)核模塊使內(nèi)核自身成為一個(gè)Hypervisor(虛擬機(jī)管理程序). 內(nèi)核中的KVM模塊通過(guò)/dev/kvm字符串設(shè)備顯示被虛擬的硬件. KVM使用修改過(guò)的QEMU進(jìn)程做為客戶操作系統(tǒng)接口.
圖7. KVM的虛擬化
KVM模塊向內(nèi)核增加了一個(gè)新的執(zhí)行模式: 客戶模式. 官方原始內(nèi)核(vanilla kernel)支持內(nèi)核和用戶模式. 客戶模式用于執(zhí)行所有非I/O客戶代碼, 普通用戶模式支持客戶I/O.
增加KVM到Linux內(nèi)核是Linux發(fā)展的一個(gè)重要里程碑, 這也是第一個(gè)整合到Linux主線內(nèi)核的虛擬化技術(shù). KVM將包含于2.6.20內(nèi)核數(shù)中, 現(xiàn)在你也可以通過(guò)內(nèi)核模塊方式在2.6.19內(nèi)核使用kvm. 當(dāng)運(yùn)行在支持的硬件(需Intel VT和AMD SVM處理器)上, kvm支持Linux(32和64為)和Windows(32為)客戶機(jī). 更多KVM信息, 請(qǐng)查閱參考資源欄目
總結(jié)
虛擬化技術(shù)是一個(gè)新的而且重要的領(lǐng)域, 如果"新"包括了過(guò)去的40年. 在過(guò)去它已經(jīng)使用于許多場(chǎng)合, 但是現(xiàn)在最主要的一個(gè)焦點(diǎn)是服務(wù)器和操作系統(tǒng)的虛擬化. 比如像Linux, 虛擬化給性能, 可移植性和復(fù)雜性提供了許多選項(xiàng). 這也意味者你能夠?yàn)槟愕膽?yīng)用程序和項(xiàng)目選擇最合適的虛擬化方法.
騰佑科技(m.mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個(gè)國(guó)家版權(quán)局認(rèn)證。公司自成立以來(lái),一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計(jì)算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開(kāi)發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產(chǎn)品推薦