1. 程式人生 > >內核級虛擬化技術

內核級虛擬化技術

計算機系統 兩種模式 openstack 隱藏 vm tools ges 而在 3.2 比較

這篇可能講的有一點點的無聊,因為基本上是概念性的東西,我也是理解了很久才慢慢的搞懂的。

一、虛擬化與虛擬化技術

  1.1、虛擬化的定義

  虛擬化主要指的是特殊的技術,通過隱藏特定計算平臺的實際物理特性,為用戶提供抽象的、統一的、模擬的計算環境(稱為虛擬機)(IBM定義)。虛擬化為有效利用大型機的資源提供了技術支持。

  虛擬機技術也是多種多樣,而可以虛擬的層次或者可虛擬的方面也是遍布從硬件到應用層整個計算機系統

  技術分享

  1.2、虛擬化技術

    其實現在的虛擬化技術非常多的,比如說我現在在用的:VMWare、VirtualBox(sun)。

    還有就是Hyper-V(Microsoft )、 OpenVZ(Parallels)、LPARS(IBM)等等。

二、虛擬化分類

  虛擬機的分類也是多種多樣。可以通過是否在裸機上部署來分為面向主機的的虛擬機和面向裸機的虛擬機。面向主機的虛擬機是指的在一臺已經安裝操作系統的主機上安裝虛擬機管理(VMM)程序,而面向裸機的是指在裸機上直接安裝虛擬機管理程序,

  所有的虛擬機調用都是直接由虛擬機管理程序來負責,沒有了操作系統這一步,所以這種方式在效率上要高於面向主機的。不過,比較流行的技術比如vmware,xen都是面向主機的。

 2.1、硬件虛擬化與軟件虛擬化

  技術分享

  軟件虛擬化:軟件層面的虛擬化,往往是指在同一個操作系統實例的基礎上提供多個隔離的虛擬運行環境,也常常被稱為容器技術。LXC(Linux Container)則是采用了這種技術,它主要是采用了linux本身提供的技術,在一定程度上模擬虛擬化。

        軟件虛擬化也可以理解成進程級虛擬機,其他虛擬化成為系統級虛擬機。在進程級虛擬機中負責虛擬化的軟件成為運行時軟件,而系統級虛擬機中負責虛擬化的軟件成為VMM(Virtual Machine Monitor)

  硬件虛擬化:硬件虛擬化基本上就是在一臺宿主機上虛擬了整個系統,各臺虛擬機之間相互不可見。這會很明顯導致很多重復的線程和重復的內存頁出現,性能上肯定會有影響。所以采用這種技術,一臺宿主機上虛擬機的個數肯定會有一定限制。

  2.2、平臺虛擬化與軟件虛擬化

  技術分享

  2.3、全虛擬化與半虛擬化

  技術分享

  Full Virtualization(全虛擬化):幾乎是完整地模擬一套真實的硬件設備。大部分操作系統無須進行任何修改即可直接運行在全虛擬化環境中。像kvm等技術是全虛擬化。

  Paravirtualization(半虛擬化):不對硬件設備進行模擬,虛擬機擁有獨立的運行環境,通過虛擬機管理程序共享底層的硬件資源。大部分操作系統需要進行修改才能夠運行在半虛擬化環境中。

                  它的性能要稍微高於全虛擬化。像Xen。因為需要改動托管系統的內核,所以xen是不支持win虛擬機的。

  Partial Virtualization(部分虛擬化):僅僅提供了對關鍵性計算組件或者指令集的模擬。操作系統可能需要做某些修改才能夠運行在部分虛擬化環境中。

三、傳統虛擬化架構和KVM虛擬化架構

  3.1、傳統虛擬化架構

  技術分享

  3.2、KVM虛擬化架構

  技術分享技術分享

  KVM是嵌入在Linux操作系統標準內核中的一個虛擬化模塊,它能夠將一個Linux標準內核轉換成為一個VMM,嵌有KVM模塊的Linux標準內核可以支持通過kvm tools來進行加載的GuestOS。

  所以在這樣的操作系統平臺下,計算機物理硬件層上直接就是VMM虛擬化層,而沒有獨立出來的HostOS操作系統層。 

  在這樣的環境中HostOS就是一個VMM。每個由KVM創建的GuestOS都是HostOS(或VMM)上的一個單個進程。而在GuestOS上的User-space中運行的Applications可以理解為就是進程中的線程。

四、linux使用KVM實現全虛擬化

  4.1、KVM全虛擬化實現

  KVM只是虛擬化解決方案的一部分,想要實現全虛擬化,還需要的條件是:

    1) CPU處理器提供的虛擬化支持(VT-x 硬件輔助虛擬化,可以為GuestOS創建虛擬化處理器,本質是對寄存器的隔離模擬和對指令集的劃分)。

    2) 內存可以通過kvm虛擬化成獨立的虛擬化地址(/dev/kvm)

    3)I/O虛擬化(QEMU)  

  所以說: KVM虛擬化 = KVM內核模塊 + /dev/kvm + QEMU

  4.2、kvm全虛擬化詳解

    1)/dev/kvm

    Linux操作系統標準內核中的KVM內核模塊生成了一個名為/dev/kvm的設備,有了/dev/kvm設備,使得GuestOS的地址空間(內存地址、磁盤地址)能夠獨立於標準內核或其他任何GuestOS的地址空間。

    Linux操作系統目錄結構包含的/dev目錄樹下的設備對於所有User-space進程或線程(無論是在GuestOS上,還是在VMM上)來說都是通用的,但是每個打開/dev/kvm設備的不同的進程或線程,所能使用的都是唯一且各不相同的地址映射(為了支持GuestOS間的隔離)。

    KVM內核模塊通過/dev/kvm設備提供了內存虛擬化,給予GuestOS與內核或者其他GuestOS相對獨立的地址空間。每個GuestOS都有自己的地址空間,並且這些地址空間是在實例化GuestOS時創建映射的。

    映射給GuestOS的物理內存實際上是映射給這個GuestOS在VMM中相應進程的虛擬內存。   

    有兩種支持Guest地址到Host(VMM)地址的轉換方法:

      應用LinuxOS維護的一組影子頁表(shadow page table)

      CPU也可以通過在訪問未經映射的內存位置時使用VMM(主機內核)來支持內存轉換進程。

    所以總的來說,/dev/kvm設備的作用就是:將不同的GuestOS之間的地址隔離,或將GuestOS和HostOS(VMM)之間的地址隔離

    2)QEMU   

    QEMU是一個I/O虛擬化解決方案,能夠對一個完整的計算機物理層環境進行虛擬化(EG. 磁盤、圖形適配器、網絡設備)。

    在GuestOS中生成的所有I/O請求都會被QEMU中途截獲,並重新發送到QEMU進程模擬的User Mode中。

  4.3、Openstack、KVM、QEMU

    KVM 用來模擬 CPU 的運行,但缺少了對 Network 和 I/O 的支持QEMU-KVM 是一個完整的模擬器,它基於 KVM 上,提供了完整的 Network 和 I/O 支持。其中 Openstack 為了跨 VM 性,所以不會直接控制 QEMU-KVM,而是通過 libvit 的庫去間接控制 QEMU-KVM 。

    KVM的實現原理圖:

      技術分享

    KVM內核模塊為Linux標準內核引入了一種除現有的Kernel ModeUser Mode之外的新進程模式。這種新模式就稱為Guest Mode模式,顧名思義,它用來執行GuestOS的代碼
    Linux標準內核的執行模式可以針對不同的運行內容和目的進行定義。Guest Mode的存在就是為了執行GuestOS的代碼,但是只針對那些非I/O的代碼。I/O代碼還需要QEMU來作為支持。   

    GuestOS可以在兩種模式下運行

      在Guest Mode中運行的GuestOS可以支持標準的內核。

      在User Mode下運行的GuestOS則支持自己的內核和User-space(Applications)。

    相同的是,GuestOS只能夠在User Mode下執行I/O操作,而且這是單獨使用QEMU-KVM進行管理的。

  五、內核級虛擬化技術

  內核級虛擬化技術:Kernel-based Virtual Machine,簡稱KVM

  5.1、KVM優勢

  1)KVM Memory Page Sharing

    技術分享

  2)The benefits od Disk Overlay

    技術分享

  5.2、KVM特性

   嵌入到Linux正式Kernel(提高兼容性)
   代碼級資源調用(提高性能)
   虛擬機就是一個進程(內存易於管理)
   直接支持NUMA技術(提高擴展性)

  

  

        

    

  

內核級虛擬化技術