虛擬化主要指的是特殊的技術(shù),通過隱藏特定計算平臺的實際物理特性,為用戶提供抽象的、統(tǒng)一的、模擬的計算環(huán)境(稱為虛擬機)(IBM定義)。虛擬化為有效利用大型機的資源提供了技術(shù)支持。虛擬機技術(shù)也是多種多樣,而可以虛擬的層次或者可虛擬的方面也是遍布從硬件到應用層整個計算機系統(tǒng)。
虛擬化主要指的是特殊的技術(shù),通過隱藏特定計算平臺的實際物理特性,為用戶提供抽象的、統(tǒng)一的、模擬的計算環(huán)境(稱為虛擬機)(IBM定義)。虛擬化為有效利用大型機的資源提供了技術(shù)支持。虛擬機技術(shù)也是多種多樣,而可以虛擬的層次或者可虛擬的方面也是遍布從硬件到應用層整個計算機系統(tǒng)。
因此應該注意到虛擬化和虛擬機指的并不是同一個概念,虛擬化是一個為了簡化管理,優(yōu)化資源的解決方案,而虛擬機簡單的可以認為使這個解決方案的具體實現(xiàn)。
虛擬化分類
虛擬化可以分為對硬件的虛擬和對操作系統(tǒng)或者對軟件的虛擬。
硬件層面的虛擬化
從這個層面來講,有三種不同的技術(shù):
Full Virtualization(全虛擬化),幾乎是完整地模擬一套真實的硬件設備。大部分操作系統(tǒng)無須進行任何修改即可直接運行在全虛擬化環(huán)境中。像kvm等技術(shù)是全虛擬化。
Partial Virtualization(部分虛擬化),僅僅提供了對關(guān)鍵性計算組件或者指令集的模擬。操作系統(tǒng)可能需要做某些修改才能夠運行在部分虛擬化環(huán)境中。
Paravirtualization(半虛擬化),不對硬件設備進行模擬,虛擬機擁有獨立的運行環(huán)境,通過虛擬機管理程序共享底層的硬件資源。大部分操作系統(tǒng)需要進行修改才能夠運行在半虛擬化環(huán)境中。它的性能要稍微高于全虛擬化。像Xen。因為需要改動托管系統(tǒng)的內(nèi)核,所以xen是不支持win虛擬機的。
另外還有像硬件輔助虛擬化,就是宿
主機的硬件架構(gòu)在一定程度上提供對虛擬化的支持。像Intel-VT(Intel Virtualization Technology)與AMD-V(AMD Virtualization)都提供了這等架構(gòu)支持。
軟件層面的虛擬化
往往是指在同一個操作系統(tǒng)實例的基礎(chǔ)上提供多個隔離的虛擬運行環(huán)境,也常常被稱為
容器技術(shù)。LXC(Linux Container)采用了這種技術(shù),它主要是采用了linux本身提供的技術(shù),在一定程度上模擬虛擬化。
軟件虛擬化也可以理解成進程級虛擬機,其他虛擬化成為系統(tǒng)級虛擬機。在進程級虛擬機中負責虛擬化的軟件成為運行時軟件,而系統(tǒng)級虛擬機中負責虛擬化的軟件成為VMM(Virtual Machine Monitor )
不同虛擬化的優(yōu)缺點對比
對于硬件與軟件虛擬化兩種技術(shù),都是存在優(yōu)點和缺點。
對于硬件虛擬化,我們討論全虛擬化和部分虛擬化
因為現(xiàn)在大部分的虛擬化技術(shù)Xen、kvm都支持這兩種。硬件虛擬化基本上就是在一臺宿主機上虛擬了整個系統(tǒng),各臺虛擬機之間相互不可見。這會很明顯導致很多重復的線程和重復的內(nèi)存頁出現(xiàn),性能上肯定會有影響。所以采用這種技術(shù),一臺宿主機上虛擬機的個數(shù)肯定會有一定限制。
對于軟件虛擬化,我們討論LXC
LXC( Linux Containers)是一種基于容器的、操作系統(tǒng)層級(內(nèi)核)的、輕量級的虛擬化技術(shù)。LXC 可以在操作系統(tǒng)層次上提供虛擬環(huán)境(即容器)以隔離進程和資源,每個虛擬環(huán)境擁有自己的進程和獨立的網(wǎng)絡
空間。還可以為容器綁定特定的 CPU 和 Memory 節(jié)點,分配特定比例的 CPU 時間、IO 時間,限制可以使用的內(nèi)存大小(包括內(nèi)存和 SWAP 空間),提供 Device 訪問控制,提供獨立的 namespace(網(wǎng)絡、pid、ipc、mnt、uts)。
是通過cgroup對線程進行隔離,對資源進行限制;通過Namespace對調(diào)用系統(tǒng)提供的系統(tǒng)調(diào)用來進行資源隔離。LXC介紹。通過此也可以看出,它所有虛擬化出來的虛擬機都是運行在宿主機本身上的,它的線程和資源對宿主機都是可見的。這就不存在很多重復的線程和內(nèi)存也的問題,所以一臺宿主機上可以通過此技術(shù)虛擬出更多的虛擬機。
最近非常流行的Docker也是軟件虛擬化的一種,它的原理也是使用了linux提供的namespace對資源進行隔離,不過它提供了比LXC更強大的功能實現(xiàn)。