虛擬機

運行在一個完全隔離環境中的完整計算機系統

虛擬機(Virtual Machine)指通過軟體模擬的具有完整硬體系統功能的、運行在一個完全隔離環境中的完整計算機系統。在實體計算機中能夠完成的工作在虛擬機中都能夠實現。在計算機中創建虛擬機時,需要將實體機的部分硬碟和內存容量作為虛擬機的硬碟和內存容量。每個虛擬機都有獨立的CMOS、硬碟和操作系統,可以像使用實體機一樣對虛擬機進行操作。

虛擬機技術


虛擬機技術是虛擬化技術的一種,所謂虛擬化技術就是將事物從一種形式轉變成另一種形式,最常用的虛擬化技術有操作系統中內存的虛擬化,實際運行時用戶需要的內存空間可能遠遠大於物理機器的內存大小,利用內存的虛擬化技術,用戶可以將一部分硬碟虛擬化為內存,而這對用戶是透明的。

虛擬系統


虛擬系統通過生成現有操作系統的全新虛擬鏡像,它具有真實windows系統完全一樣的功能,進入虛擬系統后,所有操作都是在這個全新的獨立的虛擬系統裡面進行,可以獨立安裝運行軟體,保存數據,擁有自己的獨立桌面,不會對真正的系統產生任何影響,而且具有能夠在現有系統與虛擬鏡像之間靈活切換的一類操作系統。
流行的虛擬機軟體有VMware(VMWare ACE)、Virtual Box和Virtual PC,它們都能在Windows系統上虛擬出多個計算機。
虛擬系統和傳統的虛擬機(Parallels Desktop,Vmware,VirtualBox,Virtual pc)不同在於:虛擬系統不會降低電腦的性能,啟動虛擬系統不需要像啟動windows系統那樣耗費時間,運行程序更加方便快捷;虛擬系統只能模擬和現有操作系統相同的環境,而虛擬機則可以模擬出其他種類的操作系統;而且虛擬機需要模擬底層的硬體指令,所以在應用程序運行速度上比虛擬系統慢得多。

虛擬機分類


linux虛擬機

一種安裝在Windows上的虛擬linux操作環境,就被稱為linux虛擬機。它實際上只是個文件而已,是虛擬的linux環境,而非真正意義上的操作系統。但是它們的實際效果是一樣的。所以安裝在虛擬機上使用好。
windowsXP虛擬機vmware下安裝Linux我們在實際的Windows XP中(宿主計算機)再虛擬出一台電腦(虛擬機),並在上面安裝Linux系統,這樣,你就可以放心大膽地進行各種Linux練習而無須擔心操作不當導致宿主機系統崩潰了。並且你可以舉一反三,將一台電腦變成三台、四台,再分別安裝上其他的系統。(運行虛擬機軟體的操作系統叫Host OS,在虛擬機里運行的操作系統叫Guest OS)。
windowsXP虛擬機vmware下安裝Linux過程
第一步:
啟動VMware,在其主界面“主頁”標籤頁中點擊“新建虛擬機”按鈕打開新建嚮導。
第二步:
單擊“下一步”按鈕,進入虛擬機配置界面,這裡有兩個選擇:一是“典型”方式,它根據虛擬機的用途自動調整配置;二是“自定義”方式,它允許用戶自行設置虛擬機的主要參數。典型方式要比自定義方式簡單,但缺少一定的靈活性。方便起見,這裡我們選擇典型方式。
第三步:
單擊“下一步”按鈕進入虛擬機操作系統選擇界面,可以看到Windows、Linux、Novell等多種不同的系統,這裡我們點選“Linux”。

Java虛擬機

Java虛擬機(JVM)是Java Virtual Machine的縮寫,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能模擬來實現的。Java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。
※優點
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行,至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平台上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。
Java虛擬機是Java語言底層實現的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助於理解Java語言的一些性質,也有助於使用Java語言。對於要在特定平台上實現Java虛擬機的軟體人員,Java語言的編譯器作者以及要用硬體晶元實現Java虛擬機的人來說,則必須深刻理解Java虛擬機的規範。另外,如果想擴展Java語言,或是把其它語言編譯成Java語言的位元組碼,也需要深入地了解Java虛擬機。
※支持的數據類型
Java虛擬機支持Java語言的基本數據類型如下:
● byte://1位元組有符號整數的補碼
● short://2位元組有符號整數的補碼
● int://4位元組有符號整數的補碼
● long://8位元組有符號整數的補碼
● float://4位元組IEEE754單精度浮點數
● double://8位元組IEEE754雙精度浮點數
● char://2位元組無符號Unicode字元
幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數據類型的數據在Java執行時不需要用硬體標記。操作這些原始數據類型數據的位元組碼(指令)本身就已經指出了操作數的數據類型,例如iadd、ladd、fadd和dadd指令都是把兩個數相加,其操作數類型別是int、long、float和double。虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數據是由integer指令,包括integer返回來處理的。boolean型的數組則是用byte數組來處理的。虛擬機使用IEEE754格式的浮點數。不支持IEEE格式的較舊的計算機,在運行Java數值計算程序時,可能會非常慢。
虛擬機支持的其它數據類型包括:
● object//對一個Javaobject(對象)的4位元組引用
● returnAddress//4位元組,用於jsr/ret/jsr-w/ret-w指令
注:Java數組被當做object處理。
虛擬機的規範對於object內部的結構沒有任何特殊的要求。在Sun公司的實現中,對object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向該object的數據。用Java虛擬機的位元組碼錶示的程序應該遵守類型規定。Java虛擬機的實現應拒絕執行違反了類型規定的位元組碼程序。Java虛擬機由於位元組碼定義的限制似乎只能運行於32位地址空間的機器上。但是可以創建一個Java虛擬機,它自動地把位元組碼轉換成64位的形式。從Java虛擬機支持的數據類型可以看出,Java對數據類型的內部格式進行了嚴格規定,這樣使得各種Java虛擬機的實現對數據的解釋是相同的,從而保證了Java的與平台無關性和可移植性。
※體系結構
Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區域。這五部分是Java虛擬機的邏輯成份,不依賴任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。
Java指令集
Java虛擬機支持大約248個位元組碼。每個位元組碼執行一種基本的CPU運算,例如,把一個整數加到寄存器,子程序轉移等。Java指令集相當於Java程序的彙編語言。
Java指令集中的指令包含一個單位元組的操作符,用於指定要執行的操作,還有0個或多個操作數,提供操作所需的參數或數據。許多指令沒有操作數,僅由一個單位元組的操作符構成。
虛擬機的內層循環的執行過程如下:
do{
取一個操作符位元組;
根據操作符的值執行一個動作;
}while(程序未結束)
由於指令系統的簡單性,使得虛擬機執行的過程十分簡單,從而有利於提高執行的效率。指令中操作數的數量和大小是由操作符決定的。如果操作數比一個位元組大,那麼它存儲的順序是高位位元組優先。例如,一個16位的參數存放時佔用兩個位元組,其值為:
第一個位元組*256+第二個位元組位元組碼指令流一般只是位元組對齊的。指令tabltch和lookup是例外,在這兩條指令內部要求強制的4位元組邊界對齊。
寄存器
Java虛擬機的寄存器用於保存機器的運行狀態,與微處理器中的某些專用寄存器類似。
Java虛擬機的寄存器有四種:
● pc:Java程序計數器。
● optop:指向操作數棧頂端的指針。
● frame:指向當前執行方法的執行環境的指針。
● vars:指向當前執行方法的局部變數區第一個變數的指針。
Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數,其目的是為了保證指令集的簡潔性和實現時的高效性(特別是對於寄存器數目不多的處理器)。
所有寄存器都是32位的。
Java虛擬機的棧有三個區域:局部變數區、運行環境區、操作數區。
(1)局部變數區
每個Java方法使用一個固定大小的局部變數集。它們按照與vars寄存器的字偏移量來定址。局部變數都是32位的。長整數和雙精度浮點數佔據了兩個局部變數的空間,卻按照第一個局部變數的索引來定址。(例如,一個具有索引n的局部變數,如果是一個雙精度浮點數,那麼它實際佔據了索引n和n+1所代表的存儲空間。)虛擬機規範並不要求在局部變數中的64位的值是64位對齊的。虛擬機提供了把局部變數中的值裝載到操作數棧的指令,也提供了把操作數棧中的值寫入局部變數的指令。
(2)運行環境區
在運行環境中包含的信息用於動態鏈接,正常的方法返回以及異常傳播。
·動態鏈接
運行環境包括對指向當前類和當前方法的解釋器符號表的指針,用於支持方法代碼的動態鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變數時使用符號。動態鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號,並把變數訪問翻譯成與這些變數運行時的存儲結構相應的偏移地址。動態鏈接方法和變數使得方法中使用的其它類的變化不會影響到本程序的代碼。
·正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。執行環境在正常返回的情況下用於恢復調用者的寄存器,並把調用者的程序計數器增加一個恰當的數值,以跳過已執行過的方法調用指令,然後在調用者的執行環境中繼續執行下去。
·異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中的原因是:①動態鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用。
(3)操作數棧區機器指令只從操作數棧中取操作數,對它們進行操作,並把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。操作數棧是32位的。它用於給方法傳遞參數,並從方法接收結果,也用於支持操作的參數,並保存操作的結果。例如,iadd指令將兩個整數相加。相加的兩個整數應該是操作數棧頂的兩個字。這兩個字是由先前的指令壓進堆棧的。這兩個整數將從堆棧彈出、相加,並把結果壓回到操作數棧中。
每個原始數據類型都有專門的指令對它們進行必須的操作。每個操作數在棧中需要一個存儲位置,除了long和double型,它們需要兩個位置。操作數只能被適用於其類型的操作符所操作。例如,壓入兩個int類型的數,如果把它們當作是一個long類型的數則是非法的。在Sun的虛擬機實現中,這個限制由位元組碼驗證器強制實行。但是,有少數操作(操作符dupe和swap),用於對運行時數據區進行操作時是不考慮類型的。
※無用單元收集堆
Java的堆是一個運行時數據區,類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無用單元收集演演算法,可以根據系統的需求使用各種各樣的演演算法。
※方法區
方法區與傳統語言中的編譯後代碼或是Unix進程中的正文段類似。它保存方法代碼(編譯后的java代碼)和符號表。在當前的Java實現中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現。每個類文件包含了一個Java類或一個Java界面的編譯后的代碼。可以說類文件是Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規範中對類文件的格式也作了詳細的說明。其具體細節請參考Sun公司的Java虛擬機規範。

安裝


安裝過程

下面通過例子,介紹使用VMware Workstation創建虛擬機的方法與步驟。
1.運行VMware Workstation 6,單擊“File→New→Virtual Machine”命令,進入創建虛擬機嚮導,或者直接按“Crtl+N”快捷鍵同樣進入創建虛擬機嚮導。
2.在彈出的歡迎頁中單擊“下一步”按鈕。
3.在“Virtual machine configuration”選項區域內選擇“Custom”單選按鈕。
4.在Choose the Virtual Machine Hardware Compatibility頁中,選擇虛擬機的硬體格式,可以在Hardware compatibility下拉列表框中,在VMware Workstation 6、VMware Workstation 5或VMware Workstation 4三者之間進行選擇。通常情況下選擇Workstation 6的格式,因為新的虛擬機硬體格式支持更多的功能,選擇好后單擊“下一步”按鈕。
5.在Select a Guest Operating System對話框中,選擇要創建虛擬機類型及要運行的操作系統,這裡選擇Windows 2000 Professional操作系統,單擊“下一步”按鈕。
6.在Name the Virtual Machine對話框中,為新建的虛擬機命名並且選擇它的保存路徑。
7.在Processors選項區域中選擇虛擬機中CPU的數量,如果選擇Two,主機需要有兩個CPU或者是超線程的CPU。
8.在Memory for the Virtual Machine頁中,設置虛擬機使用的內存,通常情況下,對於Windows 98及其以下的系統,可以設置64MB;對於Windows 2000/XP,最少可以設置96MB;對於Windows 2003,最低為128MB;對於Windows Vista虛擬機,最低512MB。
9.在Network Type頁中選擇虛擬機網卡的“聯網類型”
選擇第一項,使用橋接網卡(VMnet0虛擬網卡),表示當前虛擬機與主機(指運行VMware Workstation軟體的計算機)在同一個網路中。
選擇第二項,使用NAT網卡(VMnet8虛擬網卡),表示虛擬機通過主機單向訪問主機及主機之外的網路,主機之外的網路中的計算機,不能訪問該虛擬機。
選擇第三項,只使用本地網路(VMnet1虛擬網卡),表示虛擬機只能訪問主機及所有使用VMnet1虛擬網卡的虛擬機。主機之外的網路中的計算機不能訪問該虛擬機,也不能被該虛擬機所訪問。
選擇第四項,沒有網路連接,表明該虛擬機與主機沒有網路連接。
10.在Select I/O Adapter Type頁中,選擇虛擬機的SCSI卡的型號,通常選擇默認值即可。
11.在Select a Disk頁中,選擇Create a new virtual disk(創建一個新的虛擬硬碟)。
12.在Select a Disk Type頁中,選擇創建的虛擬硬碟的介面方式,通常選擇默認值即可。
13.在Specify Disk Capacity頁中設置虛擬磁碟大小,對於一般的使用來說,選擇默認值即可。
14.在Specify Disk File頁的Disk file選項區域內設置虛擬磁碟文件名稱,通常選擇默認值即可,然後單擊完成按鈕。
15.安裝VMware Tools:在虛擬機中安裝完操作系統之後,接下來需要安裝VMware Tools。VMware Tools相當於VMware虛擬機的主板晶元組驅動和顯卡驅動、滑鼠驅動,在安裝VMware Tools后,可以極大提高虛擬機的性能,並且可以讓虛擬機解析度以任意大小進行設置,還可以使用滑鼠直接從虛擬機窗口中切換到主機中來。
● 從VM菜單下選擇安裝VMware Tools。
● 按照提示安裝,最後重新啟動虛擬機即可。

注意事項

在虛擬機中安裝操作系統,和在真實的計算機中安裝沒有什麼區別,但在虛擬機中安裝操作系統,可以直接使用保存在主機上的安裝光碟鏡像(或者軟盤鏡像)作為虛擬機的光碟機(或者軟碟機)。
可以用打開前文創建的Windows2000虛擬機配置文件,在Virtual Machine Settings頁中的Hardware選項卡中,選擇CD-ROM項,在Connection選項區域內選中Use ISO image單選按鈕,然後瀏覽選擇Windows 2000安裝光碟鏡像文件(ISO格式)。如果使用安裝光碟,則選擇Use physical drive並選擇安裝光碟所在光碟機。
選擇光碟機完成後,然後單擊工具欄上的播放按鈕,打開虛擬機的電源,用滑鼠在虛擬機工作窗口中單擊一下,進入虛擬機。
如果想從虛擬機窗口中切換回主機,需要按下Ctrl+Alt熱鍵。

雲中配置


部署法則

啟動和停止虛擬機是使用雲計算資源的例行公事。在雲中部署虛擬機有兩個基本的選項:客戶可以拷貝一個預先配置好的虛擬機鏡像(也被稱為最終版),或者他們可以按照需求裝配一個自定義的虛擬機鏡像。
要啟用一個虛擬機,首先要從雲目錄中選擇一個機器鏡像。當部署一個跟Apache Web或者是Jboss應用伺服器有關的應用時,最好選擇一個預先裝好這些組件的Linux鏡像。如果你是一個.NET程序員,最好選擇一個預先安裝並配置好開發工具的Windows操作系統。除了選擇一個安裝好必備軟體的虛擬機鏡像之外,還必須確認這些軟體是最新的並且打過補丁。一旦你選擇好了鏡像,下一步就是在雲中部署這個鏡像。

完成版鏡像

使用最終版鏡像有幾大優勢。最主要的是它可以保證虛擬機的一致性。此外,以一個已有的鏡像開始可以節省很多精力和時間。終端客戶不必去關心怎麼安裝程序庫或者附加的包;他們可以依靠雲管理員來維護最終版鏡像。
終端用戶擁有的選項受限是這個方法的缺陷;鏡像目錄通常會包含常用的鏡像而不是一些不常用的組件集合。對於一個專業的虛擬機鏡像,你可以選擇一個最終版並且安裝所需的組件。如果一個終端用戶經常部署自定義的鏡像,那麼他必須保留一個鏡像的副本,但是這就意味著用戶必須自己打補丁,從而失去了使用最終版的優勢。
考慮專業的雲中實例並不是很重要的情況:你的網頁應用已經在你配置負載均衡后的環境中運行了幾周,如果你的應用突然發生了中斷,你可能會考慮為負載均衡集群增加幾台伺服器。在這種情況下,你需要在集群中運行完全相同的鏡像以保持一致性。如果你以前重做過這個鏡像,那麼系統中就可能出現不同版本的組件。這種情況也會發生在一個組件在兩次部署期間發布了新版本。

按需裝配

每次部署新鏡像時創建自定義鏡像使終端用戶可以自己安裝所需的組件。雲用戶喜歡以一個基礎系統鏡像開始,然後安裝應用程序組件(資料庫,應用伺服器和web伺服器)。然而,如果沒有工具的幫助,創建所需的雲對於經常性的部署是不切實際的。在這種情況下,應考慮使用配置管理工具(例如Chef或者Puppet),它們允許你指定你想包含在鏡像中的組件。如果最新版本的應用和補丁對於鏡像至關重要,按需裝配它們是最好的選擇。舉例來說,如果你有一份資料庫伺服器的標準配置,創建一個Chef或者Puppet腳本來創建鏡像可以保證你擁有最新版本的組件。
按需裝配還有助於在多伺服器中保持一致性,因為資料庫管理員不太喜歡點對點的為一個過時的最終版鏡像打補丁。
兩種部署雲中虛擬機方法(創建最終版鏡像和創建按需迭代鏡像)並不是相互獨立的。舉例來說,當你需要創建一個伺服器集群時,你應該建立腳本來裝配一個自定義的鏡像並使它成為最終版。首先通過配置管理工具創建多個虛擬機鏡像然後使用這個鏡像創建多個虛擬機實例。在這個場景中,只要你需要為集群添加新的虛擬伺服器就要保留最終版鏡像。
這裡並沒有單一的途徑來在雲環境中裝配和部署鏡像。最終版鏡像在以一致性為主的案例中運作良好;而裝配按需版本則可以保證你的環境中運行著最新的組件。

私有配置

行業對話已經超越了解什麼是雲計算,企業IT環境中要決定如何能更好的部署它。這種演變與過去的虛擬化候選人的辯論相似——懂得如何確定物理伺服器能否成為一個好的虛擬機。
1.雲負荷需要什麼樣的網路呢?如虛擬伺服器的線程、內存的需求、網路資源的總負荷、私有雲中的應用程序的消耗,這些都是極為重要的。
繁忙的網路資源負荷的需求,在區域網中鏈接到其他伺服器,這樣是不會製造出最好的雲候選者。把這些負荷放入到私有雲中,可能會造成帶寬或延遲等問題,會影響雲的整體性能。衡量雲伺服器和位於本地數據中心的其他伺服器的網路利用率。
2、還有什麼其他服務與私有雲互連嗎?考慮到雲負荷與其他網路中的雲工作量負荷之間的交流。例如,幾乎所有基於Windows的IT服務都傾向於Active Directory認證,因為桌面操作系統都是這樣做的。域控制者必須處理大量的通信,所以把它們完全轉移到雲中可能是一個壞主意。
另外,服務與本地數據中心的其他服務有一些交互,不太可能因為位置的遷移而受影響。延遲影響不大。查看虛擬機中的互操作,是一個好的辦法,可以找到雲中就緒的資源。
3、私有雲中的工作負荷和其他工作負荷之間是否存在明顯的分隔(例如,“硬線”)?隔離雲服務可以作為良好的雲候選人和壞的之間的分隔線。孤立服務,可以製造出傑出的雲候選人,例如,那些服務是否位於你的DMZ中。按照設計,DMZ有“硬線”環繞著它的服務,尤其是防火牆中,可以把它在網路和區域網中分隔出來。分隔意味著你可以非常容易的把所有內容從DMZ移到雲中。DMZ可以很明確的劃分,什麼可以製造出優秀的私有雲候選者。結合不同雲服務、DMZ服務之間的虛擬防火牆的隔離,很有可能在雲中獲得成功。
4、雲服務可以友好的複製嗎?一些IT服務已經在心裡開始設計複製了:設計通信是為了支持延遲、帶寬的類型,你會在區域網與雲通信中體驗。這些服務可能包括異地備份、伺服器故障轉移、或者其他服務的協議,為不能滿足區域網速度的網路做準備。
5、如果私有雲中的數據妥協,你會多痛苦呢?最後的檢查,確實是早期圍繞雲安全和數據所有權的關注的一個直接結果。選擇把虛擬機放到雲中的時候,圍繞數據的安全、所有權和管理問題必須是要考慮的因素,一些虛擬機和某些IT資源與數據一起工作,如果丟失或者妥協,會為企業帶來明顯的痛苦。
注意,一個潛在的啟用雲虛擬機的數據類型可以處理。如果丟失或者暴露,數據的價值大於遷移到雲中,那麼最好把虛擬機放在數據中心。
為私有雲選擇正確的虛擬機,你要分析每一個虛擬機和服務所用的資源。你也需要檢查把這些資源移向雲中的風險。有了正確的調查,就可以找到最好的資源和服務,並且可以相對容易的部署到私有雲中。

資源分配


虛擬機資源涉及多個方面:CPU、內存、網路以及磁碟。在規劃虛擬機時應該考慮這些資源之間的關係,否則,分配的資源不合理將導致虛擬機內的應用程序性能表現不佳。

CPU

虛擬機每個vCPU只運行在一個物理核心之上,因此CPU頻率越高虛擬機的運行速度也就越高,vCPU數量越多有助於提升應用的性能表現。如果虛擬機需要佔用大量的CPU時間,那麼可以考慮為虛擬機分配第二個vCPU,但是,為虛擬機分配兩個以上vCPU並不一定讓應用運行的更快,因為只有多線程應用才能有效地使用多個vCPU。

RAM

RAM資源通常有限,因此在給虛擬機分配RAM時需要格外小心。物理內存被完全用完后,必須確定哪些虛擬機能夠保留物理內存,哪些虛擬機要釋放物理內存。這稱之為“內存回收”。當虛擬機佔用的物理內存被回收后,存在的一個風險就是會對虛擬機的性能造成影響。虛擬機被回收的內存越多,相應的風險也就越大。
最明智的是只為虛擬機分配完成工作所需要的內存。分配額外的內存將會增加回收風險。另一方面,當虛擬機操作系統將未被使用的內存用作磁碟緩存時,將會顯著降低對磁碟系統的性能要求,所以這裡有一個折衷問題。

網路帶寬

網路帶寬包括兩個方面:一是虛擬機和虛擬交換機之間的帶寬,二是虛擬交換機與外部網路之間的帶寬。對於與外部物理網路的連接,一定要確保主機具備速度最快的物理網卡。進行大量網路傳輸的虛擬機,虛擬機以及數據包的傳輸都會消耗CPU時間。因此,運行在CPU受限的伺服器之上的虛擬機由於CPU無法快速響應請求可能會面臨網路吞吐量不高的情況。

磁碟性能

磁碟性能往往是無聲的性能殺手。虛擬機磁碟性能受陣列磁碟數量、類型以及運行在其上的虛擬機的數量的限制。因為集中地共享存儲架構將導致通過同一位置訪問所有的虛擬機磁碟,陣列的存儲控制器以及磁碟過載情況很容易出現,只剩下虛擬機在等待存儲的響應。
虛擬機等待磁碟IO、虛擬機CPU空閑對性能的影響有很大不同。等待IO的虛擬機無法做其他工作,因此高I/O等待時間意味著性能肯定會下降。進行周密的存儲設計以避免上述情況的發生至關重要。
合理選擇磁碟提升虛擬機性能。在虛擬化中,hypervisor將工作負載從運行在底層的物理硬體中抽象出來,允許快速分配並共享計算資源,遷移工作負載。儘管hypervisor以及與虛擬化兼容的處理器性能開銷很小,但是虛擬化層的存在卻對性能有影響。
當磁碟性能對工作負載至關重要時,某些管理員可能會選擇以直通模式配置LUN,允許虛擬機的操作系統繞過hypervisor與直接LUN進行通信。例如,Windows伺服器虛擬機可能使用直通模式繞過Hyper-V直接訪問磁碟,這對SQL Server資料庫的性能有些許提升。然而,由於客戶操作系統(採用直通模式)以及hypervisor試圖同時訪問磁碟,那麼hypervisor必須被配置為忽略直通LUN。
直通模式存在的問題是其不被某些重要的虛擬化功能比如虛擬機快照或者集群所支持。因此,虛擬機在實際上可能會受益於虛擬化提供的各種功能特性而非採用直通模式所帶來的處於邊緣地位的性能提升。管理員需要評估虛擬機的需求並確定直通模式的適宜性。
除直通模式外,Hyper-V以及其他hypervisor還提供了其他磁碟存儲選項。例如,當.VHD文件被創建時,大小固定的磁碟將分配所有的數據塊。一旦被創建,大小固定的磁碟就不能夠進行調整了。然而,動態擴展磁碟從一開始創建的就是沒有數據塊的.VHD文件,當數據寫入到.VHD文件中后磁碟空間才會被分配出去。這和精簡配置類似,儘管在邏輯上創建了一塊磁碟,但實際的磁碟空間只有數據寫入時才會被用到。
差分磁碟是一種特殊的動態擴展磁碟類型。其設計思路是父磁碟擁有固定的鏡像而且差分磁碟與父磁碟相關聯,因此寫入到磁碟的數據被存放在差分磁碟而非.VHD文件中。讀請求首先檢查差分磁碟的.VHD文件,如果沒有更改,就會讀父.VHD文件。當需要標準化的磁碟鏡像而且回滾功能很重要時,差分是一個不錯的主意,但是管理員在維護父子磁碟配置時可能會面臨挑戰。

主要用處


1.演示環境,可以安裝各種演示環境,便於做各種例子
2.保證主機的快速運行,減少不必要的垃圾安裝程序,偶爾使用的程序,或者測試用的程序在虛擬機上運行
3.避免每次重新安裝,銀行等常用工具,不經常使用,而且要求保密比較好的,單獨在一個環境下面運行
4.想測試一下不熟悉的應用,在虛擬機中隨便安裝和徹底刪除
5.體驗不同版本的操作系統,如Linux、Mac等。
終端虛擬化由於其帶來的維護費用的大幅降低而受到追捧——如能降低佔用空間,降低購買軟硬體設備的成本,節省能源和更低的維護成本。它比實際存在的終端設備更加具備性價比優勢。但這些並非是教育行業和廠商對虛擬化技術情有獨鐘的惟一原因。另一方面,一般較少提及,虛擬化技術能大幅提升系統的安全性。

常用軟體


VMware Workstation
VMware是EMC公司旗下獨立的軟體公司,1998年1月,Stanford大學的Mendel Rosenblum教授帶領他的學生Edouard Bugnion和Scott Devine及對虛擬機技術多年的研究成果創立了VMware公司,主要研究在工業領域應用的大型主機級的虛擬技術計算機,並於1999年發布了它的第一款產品:基於主機模型的虛擬機VMware Workstation。爾後於2001年推出了面向伺服器市場的VMware GSX Server和VMware ESX Server。今天VMware是虛擬機市場上的領航者,其首先提出並採用的氣球驅動程序(balloon driver),影子頁表(shadow page table),虛擬設備驅動程序(Virtual Driver)等均已被後來的其它虛擬機如Xen採用。
使用Vmware,可以同時運行Linux各種發行版、Dos、Windows各種版本,Unix等,甚至可以在同一台計算機上安裝多個Linux發行版、多個Windows版本。
優點:
1.可同時在同一台PC上運行多個操作系統,每個OS都有自己獨立的一個虛擬機,就如同網路上一個獨立的PC。
2.在Windows NT/2000上同時運行兩個VM,相互之間可以進行對話,也可以在全屏方式下進行虛擬機之間對話,不過此時另一個虛擬機在後台運行。
4.在VM上安裝同一種操作系統的另一發行版,不需要重新對硬碟進行分區。
5.虛擬機之間共享文件、應用、網路資源等。
6.可以運行C/S方式的應用,也可以在同一台計算機上,使用另一台虛擬機的所有資源。
Parallels Desktop
Parallels Desktop
Parallels Desktop
Parallels Desktop是一款用於在Mac電腦中運行Windows系統的跨平台、多任務虛擬機軟體,無需重啟即可在同時一台Mac電腦上隨時訪問Windows和Mac兩個系統上的眾多應用程序。與VMware最大的區別在於Parallels Desktop無需重啟,兩個系統同時運行。兩系統間可以實現文件互傳,素材共用。
融合模式(Coherence)支持不顯示Windows但是仍使用其應用程序,或者在Mac上保留熟悉的Windows背景與開始菜單。兩種同時運行Windows與Mac應用程序的方式都不會對性能產生任何影響。
多虛擬機支持:Windows、Linux、Chrome OS、Mac OS、Android OS等。
優點:
無縫集成。在Mac設備上也能使用Siri®與Cortana,它還支持iCloud、Dropbox與Google DriveTM。
性能好。比如暫停虛擬機與重啟操作系統的速度較VMware Fusion 8.5快了3倍,可以實時優化虛擬磁碟,只有在實際需要
時才會佔用空間。
開發神器。免費為DockerJenkins和Chef等常用開發工具提供支持。
Virtual PC

Virtual PC是微軟公司(Microsoft)收購過來的,最早不是微軟開發的。Virtual PC可以允許你在一個工作站上同時運行多個PC操作系統,當你轉向一個新OS時,可以為你運行傳統應用提供一個安全的環境以保持兼容性,它可以保存重新配置的時間,使得你的支持,開發,培訓工作可以更加有效。
Virtual PC在使用PowerPC處理器的Mac OS X版本上,其模擬機“使用”Intel Pentium 4處理器及440BX系列的主板;而 在Windows版本上,會使用電腦本身的處理器。模擬電腦上使用一塊標準的SVGA VESA圖卡,並與S3 Trio 64 PCI 8 MByte Video RAM版本的兼容。主板使用American Megatrends (AMI)的BIOS。並有“內置”的Creative Labs Sound Blaster 16 PnP音效卡(Vista上或運行模擬Vista環境時,則使用Vista本身的音效系統,因為Vista並不支援Creative Labs Sound Blaster)及DEC 21041或DEC 21140的Ethernet網卡。
Virtual PC可以在你的電腦上能同時模擬多台電腦,虛擬的電腦使用起來與一台真實的電腦一樣,可以進行bios設定,可以給它的硬碟進行分區,格式化,操作系統可以安裝DOS,Windows 95,Windows 98,Windows ME,Windows 2000,Windows XP,Windows Server 2003,UNIX,LINUX等等,可以在Windows XP里運行Linux。
優點:
●兼容性好。和xp及其他微軟的系統的兼容性是最好的。
●佔用內存小,使用方便。
●對網路的支持好,安裝完成系統后配置一下ip即可上網。
Oracle VM VirtualBox

Oracle VM VirtualBox是由Sun Microsystems公司出品的軟體(Sun Microsystems於2010年被Oracle收購),原由德國innotek公司開發。2008年2月12日,Sun Microsystems宣布將以購買股票的方式收購德國Innotek軟體公司,新版不再叫做Innotek VirtualBox,而改叫Sun xVM VirtualBox。2010年1月21日,歐盟終於同意Oracle收購Sun,VirtualBox再次改名變成Oracle VM VirtualBox。VirtualBox是開源軟體。
VirtualBox 3.2.0支持的操作系統包括:Debian,Fedora,Linux,Mac OS (Intel),Mandriva,OpenSolaris,PCLiunxOS,Red Hat,SUSE Linux,Solaris 10,Ubuntu,Windows,Xandros,openSUSE等。
Oracle VM VirtualBox支持的客戶端操作系統包括:從3.1到Vista的所有版本的Windows、Linux 2.2、2.4和2.6內核、Solaris x86、OS/2、、OpenBSD、Netware、FreeBSD和DOS。在2007年1月,InnoTek以GNU General Public License (GPL)釋出VirtualBox,並提供二進位版本及開放源碼版本的代碼。最新版本是VirtualBox 4.3.12-93733。
優點:
1.它小巧精悍,安裝文件下載方便,安裝起來佔用的硬碟空間也小。
2.它支持的操作系統類型,更新的要比VMware WorkStation快。
3.它是免費的。
VMLite
VMLite是全球首款中國人自己設計的高速虛擬機,VMLite發布的短短几周內已經吸引了全球上萬名虛擬機玩家註冊下載並使用VMLite軟體。
VMLite是一個虛擬機軟體,其附帶的VMLite XP模式與微軟推出的Windows XP模式幾乎一模一樣,但是卻不要求你的CPU非得支持虛擬化才能運行。VMLite允許你直接使用從微軟網站上下載下來的Windows XP模式安裝文件,來建立Windows XP虛 擬機。VMLite XP模式配置完成後,在Windows 7的開始菜單中也會出現虛擬機中安裝的軟體的快捷方式;在虛擬機中運行的程 序,可以無縫的在Windows 7桌面上顯示,看起來就跟在本機中運行一樣。

目前為止,VMLite已經包括VMLite XP Mode、VMLite Workstation、MyOldPCs、VMLite VirtualApps Studio、VMLite VirtualApps Player、VBoot六大產品,非常全面。
優點:
1)VMLite是世界上運行速度最快的虛擬機
2)VMLite對硬體安裝沒有任何要求,就是對你的計算機配置沒有任何要求,比如不需要兼容VT-x或者AMD-V
3)VMLite不運行遠程程序所以速度非常快
4)VMLite文件共享快
5)VMLite擁有超大磁碟容量:2TB
6)VMLite支持32位和64位系統
7)VMLite支持多個虛擬CPU同時運行
8)VMLite支持3D動畫效果擁有32位高清晰顯卡,可以高清晰度的欣賞google earth以及讓玩家玩遍對畫質要求高的最時尚的網游