虛擬機(Virtual Machine,VM)是一種計算機程序或系統,它通過軟件模擬物理計算機的硬件運行環境,使得多個操作系統能夠在同一臺物理機器上同時運行。虛擬機通過虛擬化技術將物理資源(如CPU、內存、存儲、網絡等)抽象成邏輯資源,為每個虛擬機提供獨立的計算環境,因此虛擬機彼此之間相互隔離,并能夠運行不同的操作系統和應用程序。通俗來說,虛擬機本質上是一個計算機系統,它能在一個完全隔離的環境下,利用軟件模擬硬件系統的所有功能。在保證虛擬機可以隔離運行的同時,還可以做到虛擬機與物理主機之間的資源同步。
1961年,麻省理工學院在IBM 7094型機器上實現了首個分時系統CTSS,之后,system/360機也支持了分時系統。1972年,IBM正式將system/370機的分時系統命名為虛擬機。1996年,Java虛擬機隨著JDK1.0的發布推出,隨后又出現了例如HotSpot VM,OpenJ9等不同的JVM實現方式。
虛擬機的實現方式可能會依賴特殊的軟件和硬件。虛擬機分為兩種類型:系統虛擬機和進程虛擬機。系統虛擬機(如VMware、VirtualBox)能夠運行完整的操作系統,而進程虛擬機(如 Java 虛擬機)用于運行特定的應用程序。虛擬機的主要優勢在于資源利用率高、靈活性強以及易于管理,特別適用于服務器虛擬化、開發測試環境的構建、應用隔離、云計算平臺、數據中心整合和高性能計算場景,但它們在性能上相較于直接運行在硬件上的操作系統略有損耗,性能損耗主要源于虛擬化層的資源調度和硬件模擬開銷。
概述
虛擬機的定義
系統虛擬機
虛擬機的定義最早由Popek和Goldberg提出,被稱為實體計算機的高效且獨立的副本。這類虛擬機被稱為系統虛擬機,是一種嚴密隔離且內含操作系統和應用的軟件容器。每個自包含虛擬機都是完全獨立的。通過將多臺虛擬機放置在一臺計算機上,可以僅在一臺物理服務器或“主機”上運行多個操作系統和應用。
進程虛擬機
進程虛擬機能夠支持單一進程。在進程虛擬機中,虛擬化軟件被放置在ABI接口,操作系統和硬件組合的上面。虛擬軟件仿真用戶級指令和操作系統調用。通常底層平臺被稱作主機,運行在虛擬軟件中的應用程序稱作客戶機。與虛擬機相應的被虛擬機仿真的真實平臺被稱作本地機。在進程虛擬機中,虛擬軟件通常被稱作運行時。運行時被創建用來支持客戶進程并且運行在操作系統上。虛擬機支持客戶進程,只要客戶進程執行,虛擬機終止直到客戶進程終止。
系統虛擬機和進程虛擬機的區別
進程虛擬機的運行位于用戶程序、操作系統和物理機之間,消除了用戶程序與機器平臺之間的依賴關系。而系統虛擬機則運行在操作系統和物理機之間,徹底擺脫了軟件和硬件之間的依賴關系。
虛擬化技術的概念
虛擬化是通過“軟件定義”把物理硬件抽象邏輯化,實現邏輯資源與底層硬件相隔離,通過對邏輯資源有效的管理利用,實現物理硬件資源效率最大化。虛擬化技術就是將事物從一種形式轉變成另一種形式的方法,虛擬機技術就是虛擬化技術的一種。計算機世界中最常用的虛擬化技術有操作系統中虛擬內存,若用戶需要的內存空間大于物理機器的內存,可以利用內存的虛擬化技術,將一部分HDD虛擬化為內存,在對用戶透明的情況下,和物理內存一起完成用戶的操作。又比如,可以利用虛擬專用網技術(VPN)在公共網絡中虛擬出一條安全穩定的“隧道”,讓用戶感覺像是使用私有網絡一樣。
虛擬機監視器
虛擬機監視器,也稱為hypervisor或Virtual Machine Monitor。虛擬機通常包含整個操作系統及其應用程序,同時也需要運行一個Hypervisor來控制虛擬機。Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享一套基礎物理硬件,因此也可以看作是虛擬環境中的"元"操作系統,它可以協調訪問服務器上的所有物理設備和虛擬機。Hypervisor是所有虛擬化技術的核心。非中斷地支持多工作負載遷移的能力是hypervisor的基本功能。當服務器啟動并執行Hypervisor時,它會給每一臺虛擬機分配適量的內存、CPU、網絡和磁盤,并加載所有虛擬機的客戶操作系統。
虛擬機管理器
虛擬機管理器也稱為虛擬機監控器 (VMM),用于管理相互獨立運行的虛擬機。它在邏輯上將虛擬機彼此分離,為每個虛擬機分配自己的底層計算能力、內存和存儲分片。這可防止VM相互干擾。因此,當一個操作系統崩潰或受到安全攻擊時,其他操作系統可不受影響。虛擬機管理器是一個小型軟件層,支持多個操作系統相互獨立地并行運行,共享相同的物理計算資源。 這些操作系統采用虛擬機 (VM) 的形式,也就是在軟件中模擬整個計算硬件環境的文件。
虛擬機與物理機的區別
虛擬機指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。物理機是相對于虛擬機而言的對實體計算機的稱呼。物理機提供給虛擬機以硬件環境,有時也稱為“寄主”或“宿主”。通過物理機和虛擬機的配合,一臺計算機上可以安裝上多個操作系統(一個外界操作系統和虛擬機中的數個操作系統),并且幾個操作系統間還可以實現通信,就像是有多臺計算機一樣。
發展歷程
初始階段
1960年,為了應對物理學領域的計算需求,美國啟動 Atlas 超級計算機(Super Computer)項目。1961年,由麻省理工學院的Fernando Corbato教授帶領團隊開始研發CTSS(Compatible Time Sharing System,兼容性分時系統)項目,并由IBM提供硬件設備和工程師進行支持。同年,IBM 7094機實現了分時系統,這一技術將CPU占用切分為多個極短的時間片(大約1/100秒),每個時間片都執行不同的任務。通過對這些時間片的輪詢,可以實現將一個CPU虛擬化或偽裝成多個CPU,并且讓每個虛擬CPU看起來都在同時運行,這可以看作是虛擬機的雛形。1964 年,IBM征召六萬多名新員工,創建五座新工廠,推出了System/360。System/360 不僅實現了讓單一操作系統適用于整個系列的產品,還實現了基于全硬件虛擬化的虛擬機解決方案1966年,馬丁·理察德在劍橋大學,以CPL編程語言為基礎,發明了BCPL編程語言,同時,BCPL編譯器的O-code Machine出現,它用于執行O-code的虛擬機,推動了虛擬機的進程。1967年,IBM開發的CP/CMS操作系統(Control Program/Cambridge Monitor System)首次實現了虛擬機的概念。1970年,Euler語言使用了一種叫P的中間語言,后來被Pascal語言所普及,標志著結構化程序設計時期的開始。1972年,IBM正式將system/370機的分時系統命名為虛擬機,虛擬機就此正式誕生了。1979年,unix的第7個版本引入了chroot機制,意味著第一個操作系統虛擬化誕生了。1980年,smalltalk80的出現,推進了即時編譯(JIT)作為使用進程虛擬機的實現方式。后期出現的比較有名的Smalltalk虛擬機有VisualWorks、Squeak虛擬機以及Strongtalk等。
發展階段
20世紀80年代至90年代,為解決x86服務器帶來了的如基礎架構利用率低等難題,虛擬化技術及公司如同雨后春筍般涌現。1987年,Insignia Solutions公司演示了一個被稱為SoftPC的軟件仿真器,這個模擬器允許用戶在Unix工作站上運行操作系統(DOS)應用。當時一個可以運行操作MS DOS的個人電腦需要1500美金,而使用SoftPC模擬,就可以直接在大型工作站上運行微軟 DOS。1989年,InsigniaSolutions發布了麥金塔版的SoftPC,使蘋果公司用戶不僅能運行DOS,還能運行Windows 操作系統。1990年,IBM推出的system/390機支持邏輯分區,即將一個CPU分為若干份(最多10份),而且每份CPU都是獨立的,也就是一個物理CPU可以邏輯的分為10個CPU。1996年1月23日,JDK1.0誕生,它是JAVA真正意義上第一臺JVM虛擬機,隨后又出現了例如HotSpot JVM,OpenJ9等不同的JVM實現方式。1997年,蘋果公司開發了Virtual PC,后來又賣給了Connectix 公司。1998年,x86仿真仿真器Bochs發布。同年,威睿公司成立,1999年,VMware公司發布了第一個用于x86架構的虛擬化產品VMware Workstation,使得普通用戶可以在個人電腦上運行多個操作系統。2001年,VMWare發行了ESX和GSX,也就是現在經常使用的esxi的前身。同年,Fabrice Bellard發布了采用動態二進制翻譯技術的開源虛擬化軟件QEMU的第一個版本。
2003年,Connectix被微軟收購,后續推出了Microsoft Virual PC。同年,VMWare被Dell EMC收購。也在這一年,英國劍橋大學的一位講師發布了開源虛擬化項目Xen,并成立XenSource公司,通過半虛擬化技術為x86-64提供虛擬化支持。2004年,微軟發布Virtual Server 2005計劃,象征著虛擬化技術正式進入主流市場。2005年,OpenVZ發布,這是Linux操作系統的容器化技術實現,同時也是LXC的核心實現。2006年,Intel和AMD等廠商相繼將對虛擬化技術的支持加入到x86體系結構的中央處理器中。2006年,首個在 macOS 上運行的商業虛擬化軟件Parallels Desktop誕生。2007年1月,Sun公司發布了開源虛擬化軟件VirtualBox。同年Xen被Citrix收購。2007年2月,Linux Kernel 2.6.20合入了由以色列公司Qumranet開發的虛擬化內核模塊KVM。2008年,Microsoft Hyper-V問世。它是Windows Server中的虛擬化功能,推動了企業級虛擬化的發展。Hyper-V作為Type 1 Hypervisor,直接運行在物理硬件之上,提供了高性能和高可用性的虛擬化解決方案。
逐漸成熟階段
2010年10月21日,美國航空航天局 發布了云操作系統OpenStack,推動了云計算在中國的全面爆發。2010年,虛擬化技術是Microsoft Azure云計算平臺的基礎。2011年5月,IBM和Red Hat,聯合惠普和英特爾一起,成立了開放虛擬化聯盟(Open Virtualization Alliance)。2013年3月15日,在加利福尼亞州圣克拉拉召開的Python開發者大會上,DotCloud的創始人兼首席執行官Solomon Hvkes首次提出了Docker這一概念。2014年6月,Docker發布了第一個正式版本v1.0。同年,Redhat和AWS宣布為 Docker提供官方支持。2015年7月21日,Kubernetes v1.0發布,標志著云原生時代來臨。2018年,IBM正式收購Red Hat。同年,微軟收購GitHub。2019年,開源盛會KubeCon + CloudNativeCon + Open Source Summit、Open Infrastructure Summit相繼在上海舉辦。
常見標準和協議
CIM
CIM(Common Information Model)是一種標準化的信息模型,用于管理虛擬化基礎設施。CIM提供了跨廠商、跨平臺的管理接口,使得虛擬化環境中的設備可以通過通用語言進行操作和管理。通過 CIM,管理員可以使用統一的方式監控和管理虛擬機、主機、網絡和存儲資源。該框架包括一個CIM對象管理器(通常稱為"CIM代理程序"),以及一組CIM提供程序。CIM提供程序用于管理和訪問設備驅動程序及底層硬件。這些提供程序可以由硬件供應商(如服務器制造商和硬件設備供應商)編寫,以便監控和管理其設備。CIM代理程序從所有的CIM提供程序中獲取信息,并使用標準的API將這些信息提供給外部。
OVF
OVF(Open Virtualization Format)是一種開放標準,用于描述和分發虛擬設備的打包格式。它將虛擬機的配置、元數據以及相關的虛擬磁盤打包成一個便攜的、獨立于平臺的文件。OVF支持在不同虛擬化平臺之間進行虛擬機的遷移,實現跨平臺的互操作性。OVA(開放虛擬化格式應用程序)是OVF的單文件發行版。當將虛擬機導出為OVF文件時,會創建一個包含OVF文件和虛擬磁盤文件的目錄。
vSwitch
在一個物理網絡拓撲中,常見的連接方式是路由器與交換機之間的連接,以及交換機與PC機之間的連接。這樣不同的服務器和PC機可以通過交換機的連接相互連通。vSwitch是一種由esxi內核提供的虛擬交換機,用于連接不同的虛擬機和管理界面。它可以由一塊或多塊虛擬機網卡組成,但不同的vSwitch無法使用同一塊虛擬機網絡適配器。在安裝過程中,默認會創建第一個虛擬交換機vSwitch0,用于主控臺和虛擬機聯機等功能。vSwitch的作用類似于物理網絡中的交換機,它使得虛擬機能夠進行內部通信和與外部網絡進行連接。
vRouter
vRouter(虛擬路由器)模擬了傳統基于硬件的第三層IP路由器的功能。通過網絡功能虛擬化(NFV)的方式,虛擬路由器將原本依賴于專用硬件設備的路由功能轉換為在軟件上運行,而不再依賴于商用硬件設備。這樣做的好處包括降低硬件成本,并且有助于實現硬件的互操作性,不需要依賴特定的硬件平臺。此外,vRouter 支持動態路由協議,可以根據虛擬機的需求進行靈活配置,幫助虛擬化平臺在復雜網絡環境中實現高效的數據包轉發和路由決策。
常見的虛擬機軟件
Oracle VM VirtualBox
Oracle VM VirtualBox是一款開源、低開銷、跨平臺的桌面虛擬化軟件,可以支持多達32個虛擬CPU的大量工作負載,受支持的主機操作系統包括Windows、Linux和Mac OS。通過該軟件,開發人員能夠在一臺設備上運行多個操作系統。同時,使用 VirtualBox可以減少桌面和服務器配置,從而降低運營成本,縮短在本地和云端安全部署應用所需的時間。
VMware Workstation Pro
VMware Workstation Pro是一款標準桌面Hypervisor,使用它可在Windows或Linux桌面上運行Windows、Linux和BSD虛擬機。借助VMware Workstation Pro,可以運行復雜的本地虛擬環境,從而在同一桌面PC上模擬操作系統、平臺和云環境。在開發和測試中使用VMware Workstation Pro,可以修復更多錯誤并按時交付高質量代碼。VMware Workstation Pro具備虛擬網絡連接功能,為虛擬機創建和配置復雜的IPv4和IPv6虛擬網絡,并增加網絡延遲和帶寬模擬功能。
特性
優點
分區
虛擬機的分區特性是其能夠在一臺物理機上同時運行多個操作系統,并且可以根據需要分配系統資源給不同的虛擬機。這種分區特性使得虛擬機成為一種靈活且高效的解決方案,能夠滿足不同用戶的需求。通過虛擬化技術,一個物理服務器可以被劃分為多個虛擬機,每個虛擬機都具有自己的操作系統和應用程序,而且彼此之間是相互隔離的。這樣的分區特性使得虛擬機能夠更好地利用物理資源,提高系統的利用率,并且能夠靈活地調整和配置不同虛擬機的資源分配,以滿足不同工作負載的需求。
封裝
虛擬機的這一特性可以讓它將整個虛擬機的狀態保存到一個文件中,使得移動和復制虛擬機變得像移動和復制文件一樣簡單。這種封裝特性使得虛擬機的部署和管理變得更加便捷。
獨立于硬件
通過將軟件與物理主機分離,用戶可以在單個硬件上運行多個操作系統,從而節省企業的時間、管理成本和物理空間。此外,虛擬機還能夠支持舊版應用程序,從而減少或消除將舊應用遷移到更新或不同操作系統的需求和成本。
缺點
虛擬機會面臨性能不穩定的問題。當在同一臺物理主機上運行多個虛擬機時,可能會導致性能不穩定,特別是當不滿足特定應用程序的基礎架構要求時。由于虛擬機需要運行額外的操作系統和應用程序,因此會占用一定的內存和處理器資源。這意味著用戶在同時使用多個虛擬機時,可能會感到電腦變慢或資源緊張。虛擬機中的數據也可能會因為軟件故障、電腦崩潰或其他問題而丟失。此外,如果物理服務器崩潰,那么在其上運行的所有虛擬機和應用程序都將受到影響。因此,在使用虛擬機時,需要確保電腦的硬件及軟件配置足夠強大以滿足需求。不正確配置或使用虛擬機也可能導致電腦受到一些潛在的威脅。例如,虛擬機可能會暴露電腦系統的漏洞,使得惡意軟件有機會侵入電腦。
相關技術
許多虛擬機使用仿真的方法來實現其功能。仿真是將一個具有不同接口和功能的系統或子系統轉化為具備特定接口和功能的系統或子系統的過程。指令集仿真在虛擬機中起著重要的作用,因為虛擬機需要在特定指令集的主機處理器上運行使用不同指令集編譯的二進制程序。
CPU虛擬化
CPU虛擬化指通過技術手段使客戶虛擬機能夠使用與物理CPU相同的指令集架構。其中,指令集架構包含軟件可感知的狀態(如寄存器、內存)及作用于這些狀態的指令。借助CPU虛擬化,客戶虛擬機可在虛擬環境中運行,并實現與物理CPU的交互,如同在物理環境中運行一般。這一技術在保持與物理CPU指令集架構兼容的同時,能夠為用戶提供靈活且可擴展的計算資源。虛擬CPU(vCPU)作為分配給虛擬機的邏輯處理器,由Hypervisor負責調度管理物理CPU核心資源,并可通過支持超線程技術提升資源利用率。
內存虛擬化
在傳統的系統中,內存地址分為虛擬地址空間和物理地址空間。應用程序使用虛擬地址來訪問內存,而CPU根據虛擬地址到物理地址的映射,將虛擬地址轉換為可以直接訪問的物理地址。這種映射關系維護了從虛擬地址空間到物理地址空間的映射關系。內存虛擬化的核心任務之一就是維護和處理這種雙重內存地址空間的映射關系。虛擬化技術允許多個應用程序同時運行在同一臺物理機上,每個應用程序都有自己的虛擬地址空間,而這些虛擬地址空間又映射到實際的物理地址空間,從而實現了更高效的資源利用和隔離保護。
設備虛擬化
設備虛擬化涵蓋了多種方法,例如軟件模擬、半虛擬化、直接I/O訪問和SR-IOV等。其中,軟件模擬是最簡單的設備虛擬化方式。它通過截獲客戶操作系統所發出的設備I/O操作,并完全模擬設備I/O操作的響應,以確保設備虛擬化對客戶操作系統透明。
解碼-分派解釋
解釋器程序是一個模擬和操作機器的程序,它模擬了實現了源指令集的完整結構狀態的機器。這個機器包括所有的結構寄存器和主存儲器。解釋器維護了客戶機主存的一份鏡像,包括程序代碼和數據。此外,解釋器還維護了一個稱為上下文塊的表,其中包含源結構狀態的各種組件,如通用寄存器、程序計數器、條件碼和控制寄存器。這樣,解釋器能夠模擬和操作客戶機的整個狀態,使得源指令集可以在解釋器上執行。解釋器操作源程序時,它會逐條執行指令并根據指令讀取和修改程序的狀態。這種類型的解釋器通常被稱為解碼-分派解釋器。它的工作方式是通過一個中央循環來解碼每條指令,并將指令分派給對應的解釋例程來執行。解釋器的主要任務是解析指令、執行對應的操作,并根據需要更新程序的狀態。這種設計方式可以使解釋器更加靈活,可以處理多種不同的指令,并根據指令的類型來執行相應的操作。
線索解釋
解碼-分派解釋器的主循環包含一些直接和間接的分支指令,但這些分支指令對于性能來說可能會造成一定的影響,特別是在無法準確預測它們的情況下。解釋器主循環的結構通常在循環頂部進行停止或中斷的測試,然后使用一個寄存器間接分支來進行switch語句的跳轉,接著是對解釋例程的調用,并通過第二個寄存器間接分支返回到主循環,最后通過一個分支來終止循環。線索解釋的一個關鍵特點是使用表格來實現分派的間接跳轉。這種間接的跳轉方法有一個優勢,就是解釋例程能夠被獨立地進行修改和重定位。由于使用了分派表進行跳轉,這種方法被稱為間接線索解釋。
Xen
Xen是一款開放源代碼虛擬機監視器,可在單一物理主機上運行多個客戶操作系統。Xen兼容IA-32、x86-64,Itanium和ARM計算機架構。Xen Hypervisor直接運行在硬件之上,負責CPU、內存和中斷的調度。在Xen之上運行多個虛擬機,每一個運行的虛擬機實例叫做Domain(域)或者Guest。其中,有一個特殊的域Domain 0,它包含了系統中所有的驅動,同時,也包含控制棧用來管理虛擬機的創建,銷亡和配置等。
KVM
基于內核的虛擬機是一種基于Linux內核的開源虛擬化技術,是集成到Linux內核的Hypervisor,是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務調度、內存管理與硬件設備交互等,從而實現對虛擬機的管理。
主要實現方式
半虛擬化
半虛擬化是一種通過修改Guest OS部分訪問特權狀態的代碼以便直接與hypervisor交互的技術。在半虛擬化虛擬機中,部分硬件接口以軟件的形式提供給Guest OS,這可以通過Hypercall(VMM提供給Guest OS的直接調用,與系統調用類似)的方式來提供。相較于全虛擬化,半虛擬化VMM只需要模擬部分底層硬件,因此Guest OS不做修改是無法在虛擬機中運行的,甚至運行在虛擬機中的其它程序也需要進行修改。
全虛擬化
全虛擬化(Full Virtualization)是硬件虛擬化的一種,允許未經修改的客戶操作系統隔離運行。實現一個比主機操作系統優先級更高的hypervisor或超級操作系統(Super OS)是全虛擬化的基礎。監視器或超級操作系統需要兩個關鍵特性來提供并保護虛擬化環境。第一,操作系統無關的儲存管理,可以為不同的虛擬環境(如Linux、Windows和嵌入式環境)提供資源,并保護這些環境不會被未經授權地訪問;第二,虛擬化環境的切換,以向虛擬機分配物理計算資源。
操作系統虛擬化
在傳統操作系統中,所有用戶的進程本質上是在同一個操作系統的實例中運行,因此內核或應用程序的缺陷可能影響到其它進程。操作系統虛擬化(OS-level virtualization) 是一種在服務器操作系統中使用的、沒有VMM層的輕量級虛擬化技術,內核通過創建多個虛擬的操作系統實例來隔離不同的進程,不同實例中的進程完全不了解對方的存在。通俗來說,操作系統虛擬化是操作系統的虛擬化,需要隔離操作系統資源。
安全及隔離
虛擬機提供了較好的隔離性,每個虛擬機運行在獨立的環境中,相互之間不會產生影響。這使得虛擬機可以運行不同版本的操作系統和應用程序,提供更好的兼容性。由于虛擬機具備一定的隔離特性,每個虛擬機都能獲得獨立的CPU指令、內存和存儲等物理資源。這意味著虛擬機可以在硬件級別上實現故障隔離和安全隔離,同時還能利用先進的資源控制功能來保持良好的性能。
安全性問題
虛擬機在安全性面臨著四方面的挑戰。第一,虛擬機逃逸。虛擬機逃逸是指在攻擊者已經控制了一個虛擬機的情況下,通過利用各種安全漏洞來攻擊虛擬機管理程序,從而使進程逃離虛擬機的運行環境,進入到宿主機的操作系統中;第二,rootkit攻擊。Rootkit是一種特殊的惡意軟件,主要用于在被感染目標上隱藏自身以及指定的文件、進程和網絡鏈接等信息。通常,Rootkit會與木馬、后門等其他惡意程序相結合使用。這種攻擊方式通常可以繞過自動執行的網絡安全控制功能,如入侵檢測系統;第三,分布式拒絕服務(DDoS)攻擊。DDoS攻擊利用大量合法請求占用網絡資源,以使網絡癱瘓為目的;第四,虛擬機信息竊取和篡改。在一個虛擬主機服務器上,虛擬機被封裝在一個單獨的虛擬磁盤文件中。只要擁有虛擬化工作環境管理員權限,就可以方便地訪問該虛擬化工作環境并讀取該文件中的數據,而且不會在系統中留下任何痕跡。現代虛擬化平臺引入了多種機制,如虛擬防火墻、虛擬網絡隔離和資源限制來進一步加強安全性。
隔離技術
物理資源與虛擬資源隔離
在虛擬機監視器層提供安全隔離措施,以控制虛擬機與宿主機之間的數據通信,并限制或禁止虛擬機對物理存儲實體的直接訪問,進而確保每個虛擬機都能以獨立的方式訪問CPU指令、內存和存儲等物理資源。
虛擬CPU指令隔離
通過將每個虛擬CPU與物理主機的物理處理器核心綁定,實現虛擬CPU之間的隔離。每個物理CPU核心只能被一個虛擬CPU核心綁定。這種綁定方式確保每個虛擬CPU的計算負載和指令都在對應綁定的物理核心上運行,從而實現了虛擬CPU之間的相互隔離。
內存隔離
使用基于內核的虛擬機+QEMU虛擬化技術,以Linux操作系統作為基礎平臺是一種常見的技術方案。在這種方案中,每個虛擬機對應一個QEMU進程。QEMU進程負責為虛擬機提供所需的內存和其他資源。虛擬機使用的內存資源實際上是分配給QEMU進程的。在Linux操作系統下,不同的進程之間是相互隔離的,它們的虛擬地址空間相互獨立。每個進程無法訪問其他進程的地址空間,因此虛擬化系統中每個虛擬機的內存空間也是相互隔離的。這樣可以確保各個虛擬機之間的安全性和隔離性。
管理與配置
創建與部署
虛擬機的創建與部署是將虛擬機映射到物理機的過程。手動創建和部署獨立虛擬機有三種辦法,分別是通過空白虛擬硬盤創建和部署虛擬機、通過現有虛擬硬盤創建和部署虛擬機以及通過現有虛擬機創建和部署虛擬機。也可以使用虛擬到虛擬轉換、物理到虛擬機轉換、使用虛擬機模板、使用服務部署等四種自動創建和部署的方法。在部署虛擬機過程中,hypervisor需要在兩個位置之間移動和復制大文件。
資源分配
CPU分配原則
虛擬機的CPU分配原則是盡量避免過量使用虛擬CPU。對于單線程應用程序而言,并不需要多線程處理。虛擬機的虛擬CPU數量應該小于或等于物理CPU核心數。例如,在雙路雙核服務器配置下,虛擬機最多應使用兩個虛擬CPU。
內存分配原則
在資源評估后,虛擬機內存分配須確保虛擬機所需的實際內存盡量不超過物理內存總量。這意味著當應用程序需要更多內存時,會采用磁盤內存來解決,但這可能會降低系統性能。對于關鍵應用程序而言,固定內存的方法可以考慮,以確保性能的穩定性。
磁盤使用原則
虛擬機的磁盤性能受到多個因素的限制,包括陣列磁盤的數量、類型以及運行在其上的虛擬機數量。磁盤訪問性能對于虛擬機數量有一定的影響。內置磁盤的可用性和IO吞吐能力相對較弱,因此不建議將虛擬機存放在內置磁盤上,而是推薦使用外置高性能磁盤陣列。
快照與備份
虛擬機快照是虛擬機的一項重要功能,它允許用戶在虛擬機運行狀態下捕獲其當前的系統狀態,包括 CPU 狀態、內存狀態、虛擬硬盤狀態和設備配置等。虛擬機的快照類似于數據庫的照片,即在特定時間點(創建快照的時間點)拍攝的數據庫照片。但是這張照片是可以應用于SQL語句的新數據庫。創建快照后,將標識原始數據庫的所有數據頁。如果在創建快照后修改了數據頁面,則將復制數據頁,并復制未修改的數據頁;虛擬機的備份,本質上是一個副本。等效于COPY在某個時間點將數據庫中所有內容的副本放入特定文件(備份文件,通常是.bak)中。備份的結果是一個文件,可以將其復制或寫入磁帶。備份與恢復機制確保在硬件故障或系統錯誤的情況下,可以快速恢復虛擬機的運行。虛擬化平臺通常提供自動化的備份與恢復工具,如 VMware 的 vSphere DataProtection 或 Microsoft 的 Hyper-VBackup。
性能監控與優化
虛擬機常見的性能問題包括CPU負載不足、系統吞吐量不夠、重復查詢泛濫、連接池連接占用、不合理的使用等。虛擬機性能優化的原則是盡可能減少創建對象的數量、減少使用全局變量和大對象。如果出現性能問題時,可以從線程池、連接池、虛擬機啟動參數、程序算法等方面進行調優。
主要應用
服務器虛擬化
現代計算機系統性能快速發展,特別是近年來多核CPU的發展,為虛擬機應用提供了更大的舞臺。通過虛擬機,可以實現服務器的整合,將原本分布在不同計算機和操作系統上的任務整合到一臺計算機上,從而顯著降低信息系統的購置、運行和維護成本。
云計算平臺中的虛擬機
虛擬機也是云計算的基礎,支持云計算的彈性擴展和資源共享,使得計算資源更加高效地利用。云計算基于虛擬機技術,為用戶提供可定制和可保證服務質量的計算能力,使得計算成為一種按需定制的公共服務。以Amazon Web Services(AWS)為例,AWS使用虛擬化技術在其數據中心中運行數百萬個虛擬機實例,為全球用戶提供按需計算資源。虛擬機的出現使得Guest OS和底層硬件之間的耦合度降低,因此可以將虛擬機的狀態完整地遷移到其他計算機系統并恢復運行。這種在線遷移的能力為集群均衡、移動計算和高可靠系統的實現提供了一種革新的技術手段。
桌面虛擬化
桌面虛擬化是一種方法,允許用戶從設備單獨桌面工作空間上遠程訪問和運行應用程序。一種常見情況是,當用戶使用遠程訪問軟件從其家庭 PC 登錄到其辦公室 PC 時。桌面虛擬化也可以指在一臺設備上運行多個虛擬機,以保持工作負載的獨立和隔離。VMware Workstation Player是一款桌面虛擬化應用,無需重新啟動即可在同一計算機上運行一個或多個操作系統。
數據中心虛擬化
在數據中心虛擬化中,虛擬服務器是從傳統的物理服務器創建的。此過程通過在管理程序的幫助下模仿其處理器、操作系統和其他資源來抽象物理硬件。管理程序是一種創建和管理虛擬機的軟件,它將 CPU、內存和存儲等資源視為一個池,可以在現有虛擬機之間或新虛擬機之間重新分配。
影響評價
影響
隨著數字化發展的影響,網絡數據海量增加,虛擬機的影響越來越凸顯。虛擬機的開發程度不僅僅局限于桌面操作系統,甚至可以在Windows 10上模仿Android,來使用手機系統,方便著人們的工作生活。虛擬機的出現,能夠使物理資源更好地利用,系統的利用率得以提高,并且能夠靈活地調整和配置不同虛擬機的資源分配,以滿足不同工作負載的需求,進而降低公司的運維成本。同時,它還可以提供靈活性、安全性、經濟性和管理性等多種好處,但是也存在一定的性能問題和硬件限制等問題。
評價
虛擬機有諸多優點。2018年7月,波場Tron技術負責人趙宏評價虛擬機:“虛擬機解決了復雜指令的去中心化執行。”2019年7月,南京大學學工處副處長李浩也曾評價虛擬機:“在高考錄取過程中,使用虛擬機對錄檢信息切割,使得錄取進程更加安全高效。”
正如一個硬幣有兩面,虛擬機在發展的過程中也存在著一定的問題。2017年4月,中新經緯官方針對虛擬機的安全問題曾這樣評價虛擬機:“虛擬機逃逸會產生云計算環境下的新型安全問題。”2021年5月,河北新聞網官方也就虛擬機的穩定性及安全性問題評價虛擬機:“虛擬機存在著性能不穩定問題,亟需整改。”
參考資料 >
什么是虛擬化?.VMWare官網.2023-05-22
虛擬化的發展歷程和實現方式.微信公眾平臺.2023-07-04
智慧產業學院.虛擬化技術發展史.2023-07-13
早期操作系統的發展階段.騰訊云.2023-07-13
虛擬化基本介紹與發展歷史.華為云.2023-07-13
Java虛擬機--虛擬機發展史.騰訊云.2023-07-13
Java release.Java.2023-05-28
一文讀懂虛擬機.微信公眾平臺.2023-07-04
虛擬機& 容器技術 原.騰訊云.2023-07-13
類型 1 虛擬機管理器.IBM.2023-07-13
三張圖看懂:什么是物理機、虛擬機、容器?.今日頭條.2023-07-13
物理機、虛擬機、云主機、物理服務器、裸金屬都是什么?.PHP中文網.2023-07-13
C語言發展史的點點滴滴.網易號.2023-07-20
深入理解JVM虛擬機 - 虛擬機的發展歷史.阿里云.2023-07-05
VMware 時間軸.VMWare官方網站.2023-05-28
Acquisitions.microsoft.2023-05-28
基于 CIM 的硬件監控工具的控制訪問.VMware.2023-07-20
OVF.VMware.2023-07-20
vSphere網絡原理及vSwitch.開發者社區.2023-07-20
虛擬路由器.SDN.2023-07-20
Oracle VM VirtualBox 的特性.Oracle.2023-07-20
VMware Workstation Pro.VMware.2023-07-20
信息技術國產化趨勢下,如何從VMware等虛擬化平臺遷移至國產虛擬機.搜狐網.2023-07-13
虛擬機對電腦的傷害大嗎.PHP中文網.2023-07-13
Xen與KVM虛擬化技術調研報告.lyan.2023-07-20
云服務器有哪些虛擬化技術.天翼云.2023-07-20
Docker和虛擬機有什么區別?.騰訊云.2023-07-13
基于KVM/QEMU虛擬化系統的多租戶安全隔離技術研究.中國婁底.2023-07-13
虛擬機安全嗎.Worktile.2023-07-20
基于KVM/QEMU虛擬化系統的多租戶安全隔離技術研究.國家保密局.2023-07-20
創建和部署虛擬機概述.微軟.2023-07-13
企業云融合計算解決方案參考.微信公眾平臺.2023-07-04
虛擬機的快照和備份有什么區別.Worktile.2023-07-13
對ESXI虛擬機性能問題進行故障排除.今日頭條.2023-07-20
Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning.ORACLE.2023-07-13
Access Denied.英特爾.2023-07-20
VMware Workstation Player 教程.騰訊云.2023-07-13
什么是數據中心虛擬化?.騰訊云.2023-07-13
什么是虛擬機(它的作用是什么及為什么要使用).在職研究生網.2023-07-20
虛擬機有什么好處和壞處.稀土掘金.2023-07-13
波場趙宏:Tron虛擬機TVM將開啟奧德賽3.0時代.今日頭條.2023-07-04
探訪南大錄取現場:率先使用“虛擬機檔案分發”技術.今日頭條.2023-07-04
還敢虛擬機逃逸?云安全評估認證體系要來了!.今日頭條.2023-07-04
國網河北信通公司:開展虛擬機高可靠專項整改 提升本質安全_河北新聞網.河北新聞網-電力頻道.2023-07-04