虛擬化技術及實時虛擬化概述

本文為本文為博主原創文章,未經本人同意,禁止轉載。如有問題,歡迎指正。首次發表於博客地址:https://www.cnblogs.com/wsg1100/

目錄

  • 一、前言
  • 二、分時系統
  • 三、虛擬化介紹
  • 四、虛擬化實現方式及分類
    • 模擬器
    • Type2虛擬化
    • Type1 虛擬化
      • a. “傳統”Hypervisor
      • b. 普通嵌入式Hypervisor
      • c. 微內核 Hypervisors
      • d. 硬件靜態分區Hypervisors(Static Partitioning Hypervisors)
    • 容器(Container)
      • 容器 VS 虛擬機
  • 四、總結
  • 五、參考鏈接

實時虛擬化技術是一種針對實時應用場景的虛擬化技術,它要求在保證虛擬化優勢的同時,滿足嚴格的時間約束和高可靠性要求。本系列文章文將對實時虛擬化技術進行介紹,分析其原理、特征、關鍵技術和難點,以及應用場景。一、前言

  • 虛擬化技術是一種資源管理技術,是將計算機的各種實體資源(CPU、內存、磁盤空間、網絡適配器等),予以抽象、轉換後呈現出來並可供分割、組合為一個或多個電腦配置環境。
  • 虛擬化技術最早出現在20世紀60年代的IBM大型機系統,在70年代的System 370系列中逐漸流行起來。隨著雲計算、物聯網等新興技術的發展,虛擬化技術也得到瞭廣泛的應用和創新。
  • 虛擬化技術可以提高資源利用率、簡化管理復雜度、增強系統靈活性和可擴展性等優勢。同時,也帶來瞭一些新的需求和挑戰,如如何保證虛擬環境中的實時性、可靠性、安全性等。

二、分時系統現代系統級虛擬機的快速發展,實際上是源於分時系統的設計思路。主要解決物理硬件資源共享和利用的問題,分時系統起源可以追溯到上世紀60年代的分時系統,上世紀 60 年代之前,計算機還都是大型機,主要用於科學研究使用,是異常昂貴的設備,因為大型機價格昂貴,所以如何讓多個用戶共享一臺大型機成為很多人思考的問題,而後誕生瞭分時操作系統。1954年,約翰·瓦格納·巴克斯(John Warner Backus,後面設計瞭FORTRAN語言) 就在MIT舉辦的“數學計算機高級編碼暑假班”上提出瞭分時系統的想法,他指出,使用分時(time sharing)方法,一臺大計算機就可以當做很多個小的來用,每個用戶隻需要一個閱讀工作站(reading station)。1962年秋,BBN分時操作系統在誕生BBN公司誕生,BBN分時操作系統基於PDP-1b開發,系統的內存空間為8192字,其中4096保留給分時系統使用,另外4096字給用戶使用。系統設計的基本思路是根據當前用戶來切換用戶部分內存,成為內存交換(memory swap)。當切換用戶時,把 上一個用戶使用的內存交換到高速的磁鼓中保存,並把新用戶的數據從磁鼓中加載到內存中,磁鼓上的空間被分為22個區域,每個區域大小為4096字。每個用戶在獲得使用機會時,它的程序可以運行140毫秒。在軟件歷史上,BBN的分時操作系統是較早實踐和投入使用的多用戶操作系統,為後來UNIX等操作系統的出現奠定瞭基礎[1]分時系統使得個人用戶、小公司或機構不必自己購買昂貴的電腦。隻需要購買一個輸入輸出終端,就像購買一套鼠標、鍵盤和顯示器等設備,然後通過電話線連接到機房中的大型計算機。該計算機會自動分配計算時間給程序或任務。三、虛擬化介紹那麼,什麼是虛擬化技術呢?虛擬化技術同樣是一種資源管理技術,是將計算機的各種實體資源(CPU、內存、磁盤空間、網絡適配器等),予以抽象、轉換後呈現出來並可供分割、組合為一個或多個電腦配置環境,進而發揮計算機硬件的最大利用率。虛擬化技術的發展經歷瞭幾個階段,虛擬化技術最早出現在大型機時代,用於將硬件資源劃分為多個虛擬計算機。上世紀60年代,IBM開始在其CP-40大型機系統中嘗試虛擬化的實現,後來在System/360-67中采用,並衍生出VM/CMS到後來的z/VM等產品線。隨著時間推移,微型計算機和PC能夠提供更為有效、經濟的方法來對資源進行分配和處理,所以到20世紀80年代之後,虛擬技術不再被廣泛使用[2]。 直到 21 世紀,隨著雲計算的興起,虛擬化技術再次成為熱門話題,虛擬化技術也得到瞭廣泛的應用和創新,並逐漸走向成熟。所以虛擬化技術是雲計算的核心技術之一,通過虛擬化技術,可以將一臺物理服務器劃分為多個虛擬服務器,並將其作為服務提供給用戶,實現資源的動態調度和按需使用。虛擬化分為很多種,服務器虛擬化隻是其中之一,還可以用於創建存儲、網絡和其他物理機的虛擬表示。常見的類型有服務器虛擬化、桌面虛擬化、網絡虛擬化、存儲虛擬化、數據虛擬化和應用虛擬化等。它們都可以幫助用戶節省成本,簡化管理,提高效率和靈活性。無論是公有雲還是私有雲,都離不開虛擬化技術的支持,它讓雲提供商和雲用戶都能夠根據不同的業務需求,靈活地擴展計算資源。四、虛擬化實現方式及分類虛擬化技術聽起來很高大上,但虛擬化技術應用場景不隻有雲計算,它其實很早就在我們身邊,給我們帶來瞭很多便利。我們的個人電腦越來越強大,我們不需要花錢買新的硬件,隻需要下載一些免費或者低價的虛擬化軟件,比如 VMware Workstation Player 或者 Oracle VM VirtualBox虛擬化軟件,就可以在一臺電腦上同時使用多種操作系統,無論是 Windows,Mac 還是 Linux,都可以隨心所欲地切換。這樣就可以在同一個設備上完成不同的任務,比如開發軟件,或者學習新的技能,體驗不同的OS;再比如,電腦上安裝安卓模擬器來玩安卓遊戲或做安卓APP開發調試等等。虛擬化應用場景很多,實現虛擬化的方式有全虛擬化、半虛擬化、硬件輔助完全虛擬化和操作系統級虛擬化等。

  • 全虛擬化技術通過在客戶操作系統和硬件之間捕捉和處理那些對虛擬化敏感的特權指令,使客戶操作系統無需修改就能運行,該技術在 1999 年出現,裡面又包含瞭解釋執行(如 Bochs)、掃描與修補(如 VirtualBox)、二進制代碼翻譯(如 Vmware、Qemu)三種技術。
  • 半虛擬化技術需要對客戶操作系統進行一些修改,使客戶操作系統意識到自己是處於虛擬化環境的,該技術在 2003 年出現,也叫類虛擬化技術,典型的 Hypervisor 代表是 Xen。
  • 硬件輔助完全虛擬化技術利用處理器中的虛擬化擴展(如Intel 的 VT-x 和 AMD 的 AMD-V)來加速虛擬機的性能,該技術在 2006 年出現。
    • 硬件結構支持,且有相應實現:包括
      • 模式切換:Host CPU<->Guest CPU切換,即CPU資源隔離。
      • 二階段地址轉換:GVA->GPA和GPA->HPA, 即內存資源隔離。
      • 中斷控制器支持:中斷註入和透傳,即中斷資源隔離。
      • IOMMU: Input-Output Memory Management Unit, DMA Remapping。DMA和設備訪問內存隔離。
    • 相關軟件支持:包括
      • Firmware:OpenSBI, BIOS
      • Hypervisor:KVM,XEN
      • I/O用戶態:qemu
      • OS

當前雲計算普遍使用的主流虛擬化技術,就是以 KVM 為代表的硬件輔助的完全虛擬化。

  • 操作系統級虛擬化技術則通過在同一臺物理服務器上運行多個隔離的用戶空間實例來實現虛擬化,也就是容器技術,容器是一種輕量級的虛擬化技術,能夠在單一主機上提供多個隔離的操作系統環境。

上面簡單介紹瞭虛擬化的實現方式,不同的實現方式效率不同,它們之間暗含瞭虛擬化技術發展經歷。如果我們想知道一個虛擬化產品基於哪些虛擬化技術,我們一般聽到的是type1和type2這類詞,這指的是這些虛擬化技術的分類,分為以下幾種:模擬器模擬器是指基於全虛擬化技術實現的一種軟件,可以模擬一個不同於本身的計算機系統或者硬件設備,並且可以執行該系統或者設備的程序或者指令。模擬器通常需要對目標系統或者設備的指令進行解釋或者翻譯,然後在本身的系統或者設備上執行。在這個過程中,我們把原先的操作系統叫作宿主機(Host OS),把能夠有能力去模擬指令執行的軟件,叫作模擬器(Emulator),而實際運行在模擬器上被“虛擬”出來的系統呢,我們叫客戶機(Guest VM)。這種方式的優點是可以實現跨硬件平臺的運行,比如在x86平臺上模擬ARM平臺。缺點是性能很差,因為有很多解釋或者翻譯工作。另外是做不到精確模擬,一些模擬的硬件程序運行要依賴特定的電路乃至電路特有的時鐘頻率,想要通過軟件達到 100% 模擬是很難做到。這種方式主要用於遊戲、教育、娛樂等場景,提供趣味、創新、體驗等功能。常見的模擬器有Android模擬器、MAME、QEMU,遊戲模擬器等。Type2虛擬化Type2虛擬化也叫主機式虛擬化,是指在一個已經安裝瞭操作系統(Host OS)的物理硬件上,運行一個虛擬機監視器(Hypervisor),它作為一個應用程序,管理多個虛擬機(Guest VM)。每個虛擬機也有自己的操作系統和應用程序,但是它們需要通過Hypervisor和Host OS來訪問硬件資源。這種虛擬化技術的優點是兼容性好,因為可以在各種操作系統上運行,而且可以支持不同的硬件平臺。缺點是性能低,因為有額外的中間層和轉換開銷,客戶機的操作系統把最終到硬件的所有指令,先發送給虛擬機監視器。虛擬機監視器再把這些指令交給宿主機的操作系統去執行。Type2虛擬化隻是把在模擬器裡的指令翻譯工作,挪到瞭虛擬機監視器裡。主要用在我們日常的個人電腦和開發測試場景,提供方便、快速、多樣的計算環境。常見的Type2虛擬化產品有VirtualBox、Vmware workstation、Xvisor、Lguest等。

Type1 虛擬化Type1虛擬化:也叫裸機虛擬化,是指直接在物理硬件上運行一個虛擬機監視器(Hypervisor),一般虛擬機監視器其實並不是一個操作系統之上的應用層程序,可能是一個嵌入在操作系統內核裡面的一部分,能夠直接操作控制硬件並管理多個虛擬機(Guest VM)。每個虛擬機都有自己的操作系統和應用程序,可以完全獨立運行。Type 1虛擬化通常使用半虛擬化、硬件輔助虛擬化或一些混合形式來實現。

Type1與type2虛擬的主要差別是type1虛擬機監視器(Hypervisor)能直接操作控制硬件。這種虛擬化技術的優點是性能高,因為虛擬機可以直接訪問硬件資源,沒有多餘的開銷。缺點是兼容性差,不能像 Type-2 型那麼好,因為不同的硬件平臺可能需要不同的Hypervisor。type1虛擬化技術應用場景廣泛,進一步可以分為:a. “傳統”Hypervisor如上圖,這種Hypervisor主要用於數據中心和雲計算場景,提供高效、靈活、可擴展的計算資源。代碼量大,功能齊全,有專用虛擬化硬件:網卡、磁盤、圖形適配器等;使用半虛擬化、硬件輔助虛擬化或一些混合形式來實現。典型代表:KVM(Kernel Virtual Machine), Xen,VMWare ESX Server,微軟 Hyper-V。b. 普通嵌入式Hypervisor這種Hypervisor主要用於通用嵌入式系統。不考慮實時性,如同時運行安卓和linux,Hypervisor提供CPU虛擬化,提供N:1 虛擬到物理 CPU 映射和調度,IO 設備模擬、硬件直通訪問等特性,具有合理的代碼量100K-10K SLoC(Source lines of code),典型代表:XvisorACRN

c. 微內核 Hypervisors這種Hypervisor主要用於對功能安全(security, safety and reliability)有要求嵌入式系統。在航空電子設備、自動駕駛、醫療設備、關鍵基礎設施和國防等行業,要求安全性、隔離性和健壯性,意味著軟件具備設計安全(Formal verification-形式驗證),典型代表:seL4、NOVA;

d. 硬件靜態分區Hypervisors(Static Partitioning Hypervisors)這種Hypervisor主要用於實時與非實時混合關鍵性系統,且更關註實時性、硬件強隔離。以上幾種Hypervisor或多或少提供瞭GutsOS硬件虛擬化,如CPU虛擬化(提供N:1 虛擬到物理 CPU 映射和調度),IO 設備虛擬化,也就是說GustOS共享Hypervisors管理的硬件,而硬件靜態分區Hypervisors不提供這些機制,代碼量較小5K-10K SLoC。為什麼要強隔離呢?我們工業實時控制、醫療、汽車、通信等實時實時場景下的虛擬化,因為實時應用場景的特殊性,通常Gust OS不僅包含Windows/linux等系統負責人機交互等非實時工作,Gust OS還包含RTOS或裸機應用程序,負責實時相關控制和應用。為保證Gust OS的實時性,Gust OS必須獨占硬件資源,包括CPU 1:1映射、設備直通訪問、RAM資源靜態分配、硬件中斷直通等,這樣才能保證Gust OS訪問硬件的實時性,並且系統運行過程中非特殊情況嚴禁Hypervisor介入,不能像雲計算場景下Hypervisor那樣可以將多個Gust OS在同一個CPU上調度,否則會引入額外的延遲,無法保證Gust OS運行的確定性,這就是為什麼要強隔離。另外雖然Hypervisors實現瞭硬件分區,但硬件層面很多資源還是共享的,比如共享內存總線帶寬、LLC cache等,非實時GustOS的io負載增加(例如網絡流量、磁盤等),會導致總線擁塞或緩存沖突,進而影響實時Gust OS的實時性,所以一些分區Hypervisors還會根據硬件特性,對內存總線帶寬進行劃分,緩存分配,緩存著色Cache Coloring (Partitioning)等方式來降低Gust OS之間對實時性的影響。因為硬件分區虛擬化Hypervisor直接控制硬件,所以它還是屬於Type1虛擬化類型。典型代表 jailhouseBao、Xen Dom0-less、QNX Hypervisor、vxworks Hypervisor、ACRN等。這裡簡單提一下:jailhouse項目負責人與xenomai X86平臺maintainer是同一人 jan-kiszka

註意:雖然Hypervisor實現瞭硬件分區,但判斷一個分區Hypervisor,是否是實時Hypervisor,要看GustOS運行過程中是否需要Hypervisor介入,如果實時操作系統運行過程中需要Hypervisor介入,Gust RTOS實時性取決於Hypervisor介入時間,實時性可能完全沒有保證,那這個Hypervisor就不是一個實時Hypervisor。綜上,若隻關註實時,硬件靜態分區Hypervisors、微內核 Hypervisors均可用於實時應用場景。容器(Container)雖然,Type-1 型的虛擬機看起來已經沒有什麼硬件損耗。但是,這裡面還是有一個浪費的資源。那就是每一個虛擬機,都運行瞭一個屬於自己的單獨的操作系統。2005 年,誕生瞭一種新的虛擬化技術,容器技術。容器是一種輕量級的虛擬化技術,能夠在單一主機上提供多個隔離的操作系統環境,通過一系列的命名空間隔離進程,每個容器都有唯一的可寫文件系統和資源配額。容器技術是一種利用操作系統級虛擬化來實現,操作系統內核提供的資源隔離和控制功能,創建出多個相互隔離但共享內核的用戶空間實例。容器技術的的代表項目就是 Docker,Docker 是 Docker 公司在 2013 年推出的容器項目,因為輕量、易用的特點,迅速得到瞭大規模的使用。Docker 的大規模應用使得系統資源的形態由虛擬機階段進入到瞭容器階段。Docker是一種實現瞭容器技術的軟件平臺,它提供瞭創建、管理、分發容器的工具和服務。Docker的優點是啟動快速、占用資源少、移植方便、可擴展性強等。缺點是安全性較低,因為容器之間共享內核,可能存在漏洞或攻擊風險。Docker主要用於微服務架構、持續集成部署等場景,提供高效、靈活、可靠的應用交付能力。與虛擬機不同,容器共享主機操作系統內核,並且不需要單獨的 Guest OS,這使得容器更加輕量級,並且啟動速度更快。

每個容器都可以運行一個或多個應用程序,並且具有自己的文件系統、網絡配置、進程空間等。Docker 通過 Linux Namespace 技術來進行資源隔離,通過 Cgroup 技術來進行資源分配,具有更高的資源利用率。Docker 跟宿主機共用一個內核,不需要模擬整個操作系統,所以具有更快的啟動時間。在 Docker 鏡像中,已經打包瞭所有的依賴和配置,這樣就可以在不同環境有一個一致的運行環境,所以能夠支持更快速的遷移。另外,Docker 的這些特性也促進瞭 DevOps 技術的發展。容器 VS 虛擬機一個例子是,嵌入式Linux開發中,假設我們的物理機是Ubuntu 20,但是我們的linux SDK要求基於Ubuntu 14或16,你有兩種選擇:一種是使用虛擬機,另一種是使用Docker。如果你使用虛擬機,你需要為每個虛擬機分配一定的內存、磁盤空間和CPU資源,並且安裝完整的Ubuntu系統。如果你使用Docker,你隻需要從Docker Hub上拉取兩個Ubuntu鏡,像然後在容器中運行它們,就可以享受不同版本的Ubuntu環境瞭,無需創建新的虛擬機。這樣做的好處是,Docker容器占用的資源更少,啟動的速度更快,而且更容易管理。這裡有個一個容器與虛擬機的對比[2:1]

特性 容器(Docker) 虛擬機
啟動時間 秒級 分鐘級
硬盤占用量 一般為MB 一般為GB
性能 接近原生 弱於原生
系統支持量 單機支持上千個容器 一般幾十個
資源使用率
環境配置 自帶配置,基本不需要 不帶配置,需要全量配置

四、總結本文簡單介紹瞭虛擬化技術的分類和發展經歷。應用領很廣,我們應用開發中,或多或少都會使用到部分虛擬化相關技術。由於本博客主要集中於工業實時控制、汽車、通信等實時場景下的基礎軟件技術分享。同時,行業內常用的是實時虛擬化技術,所以後面的文章主要集中在實時虛擬化(具體的實時Hypervisor是ACRN和jailhouse)。其他的虛擬化技術則涉及到才會寫相關文章,比如網絡虛擬化,敬請關註!五、參考鏈接

  1. 《軟件簡史》張銀奎著 ↩︎
  2. https://time.geekbang.org/column/article/4141593.http://gk.link/a/126YZ ↩︎ ↩︎

作者:wsg1100出處:http://www.cnblogs.com/wsg1100/本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。

赞(0)