複製鏈接
請複製以下鏈接發送給好友

虛擬機

鎖定
虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。在實體計算機中能夠完成的工作在虛擬機中都能夠實現。在計算機中創建虛擬機時,需要將實體機的部分硬盤和內存容量作為虛擬機的硬盤和內存容量。每個虛擬機都有獨立的CMOS、硬盤和操作系統,可以像使用實體機一樣對虛擬機進行操作。 [1] 
中文名
虛擬機
外文名
Virtual Machine
定    義
具有完整硬件系統功能的完整計算機系統
技 術
虛擬化技術的一種
與實體機區別
可以像使用實體機一樣使用
常見虛擬機
Java虛擬機,Linux虛擬機,windows虛擬機

虛擬機虛擬機技術

虛擬機技術是虛擬化技術的一種,所謂虛擬化技術就是將事物從一種形式轉變成另一種形式,最常用的虛擬化技術有操作系統中內存的虛擬化,實際運行時用户需要的內存空間可能遠遠大於物理機器的內存大小,利用內存的虛擬化技術,用户可以將一部分硬盤虛擬化為內存,而這對用户是透明的。又如,可以利用虛擬專用網技術(VPN)在公共網絡中虛擬化一條安全,穩定的“隧道”,用户感覺像是使用私有網絡一樣。 [2] 

虛擬機虛擬系統

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

虛擬機虛擬機分類

虛擬機linux虛擬機

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

虛擬機Java虛擬機

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

虛擬機安裝

虛擬機安裝過程

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

虛擬機注意事項

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

虛擬機雲中配置

虛擬機部署法則

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

虛擬機完成版鏡像

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

虛擬機按需裝配

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

虛擬機私有配置

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

虛擬機資源分配

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

虛擬機CPU

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

虛擬機RAM

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

虛擬機網絡帶寬

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

虛擬機磁盤性能

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

虛擬機主要用處

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

虛擬機常用軟件

虛擬機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採用。 [13] 
使用Vmware,可以同時運行Linux各種發行版、Dos、Windows各種版本,Unix等,甚至可以在同一台計算機上安裝多個Linux發行版、 多個Windows版本。 [2] 
優點: [2] 
1. 可同時在同一台PC上運行多個操作系統,每個OS都有自己獨立的一個虛擬機, 就如同網絡上一個獨立的PC。

2. 在Windows NT/2000上同時運行兩個VM,相互之間可以進行對話,也可以在全屏方式下進行虛擬機之間對話,不過此時另一個虛擬機在後台運行。 

3. 在VM上安裝同一種操作系統的另一發行版,不需要重新對硬盤進行分區。

4. 虛擬機之間共享文件、應用、網絡資源等。

5. 可以運行C/S方式的應用,也可以在同一台計算機上,使用另一台虛擬機的所有資源。 [2] 

虛擬機Parallels Desktop

Parallels Desktop Parallels Desktop
Parallels Desktop是適用於Mac OS平台上的虛擬機解決方案。無需重啓即可在同時一台Mac電腦上隨時訪問Windows和Mac兩個系統上的眾多應用程序。與VMware最大的區別在於Parallels Desktop無需重啓,兩個系 統同時運行。兩系統間可以實現文件互傳,素材共用。 [14] 
融合模式(Coherence)支持不顯示Windows但是仍使用其應用程序,或者在Mac上保 留熟悉的Windows背景與開始菜單。兩種同時運行Windows與Mac應用程序的方式都不會對 性能產生任何影響。 [14] 
多虛擬機支持:Windows、Linux、Chrome OS、Mac OS、Android OS等。 [14] 
優點: [14] 
無縫集成。在Mac設備上也能使用Siri®與Cortana,它還支持iCloud、Dropbox與Google DriveTM。

● 性能好。比如暫停虛擬機與重啓操作系統的速度較VMware Fusion 8.5快了3倍,可以實時優化虛擬磁盤,只有在實際需要
時才會佔用空間。 [14] 
● 開發神器。免費為DockerJenkins和Chef等常用開發工具提供支持。
 [14] 

虛擬機Virtual PC

Virtual PC微軟公司(Microsoft)收購過來的,最早不是微軟開發的。Virtual PC可以允許你在一個工作站上同時運行多個PC操作系統,當你轉向一個新OS時,可以為你運行傳統應用提供一個安全的環境以保持兼容性,它可以保存重新配置的時間,使得你的支持,開發,培訓工作可以更加有效。 [15] 
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網卡。 [15] 
Virtual PC可以在你的電腦上能同時模擬多台電腦,虛擬的電腦使用起來與一台真實的電腦一樣,可以進行bios設定,可以給它的硬盤進行分區,格式化,操作系統可以安裝DOSWindows 95Windows 98Windows MEWindows 2000Windows XPWindows Server 2003UNIXLINUX等等,可以在Windows XP裏運行Linux。 [16] 
優點: [16] 
●兼容性好。和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是開源軟件。
 [17] 
VirtualBox 3.2.0支持的操作系統包括:DebianFedoraLinuxMac OS (Intel),Mandriva,OpenSolaris,PCLiunxOS,Red Hat,SUSE Linux,Solaris 10,Ubuntu,Windows,XandrosopenSUSE等。
 [17] 
Oracle VM VirtualBox支持的客户端操作系統包括:從3.1到Vista的所有版本的Windows、Linux 2.2、2.4和2.6內核、Solaris x86OS/2、、OpenBSDNetwareFreeBSD和DOS。在2007年1月,InnoTek以GNU General Public License (GPL)釋出VirtualBox,並提供二進位版本及開放源碼版本的代碼。最新版本是VirtualBox 4.3.12-93733。
 [17] 
優點:

 [17] 
1.它小巧精悍,安裝文件下載方便,安裝起來佔用的硬盤空間也小。

2.它支持的操作系統類型,更新的要比VMware WorkStation快。

3.它是免費的。


虛擬機VMLite

VMLite是全球首款中國人自己設計的高速虛擬機,VMLite發佈的短短几周內已經吸引了全球上萬名虛擬機玩家註冊下載並使 用VMLite軟件。 [18] 
VMLite是一個虛擬機軟件,其附帶的VMLite XP模式與微軟推出的Windows XP模式幾乎一模一樣,但是卻不要求你的CPU非得支持虛擬化才能運行。VMLite允許你直接使用從微軟網站上下載下來的Windows XP模式安裝文件,來建立Windows XP虛 擬機。VMLite XP模式配置完成後,在Windows 7的開始菜單中也會出現虛擬機中安裝的軟件的快捷方式;在虛擬機中運行的程 序,可以無縫的在Windows 7桌面上顯示,看起來就跟在本機中運行一樣。 [18] 

VMLite已經包括VMLite XP Mode、VMLite Workstation、MyOldPCs、VMLite VirtualApps Studio、VMLite VirtualApps Player、VBoot六大產品,非常全面。 
 [18] 
優點: [18] 
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以及讓玩家玩遍對畫質要求高的最時尚的網遊 [18] 
參考資料
展開全部 收起