FusionCompute計算虛擬化

計算虛擬化相關概念及技術

計算虛擬化概念

什麼是虛擬化?

虛擬化可以看作是一個抽象層,它打破了原本物理硬件和操作系統之間緊耦合的關係。
虛擬化可以將資源抽象成共享資源池,實現對資源的動態調度和管理。
本質上,虛擬化就是由位於下層的軟件模塊,通過向上一層軟件模塊提供一個與它原先所期待的運行環境完全一致的接口的方法,抽象出一個虛擬的軟件或硬件接口,使得上層軟件可以直接運行在虛擬環境上。

虛擬化的本質

在這裏插入圖片描述
分區:虛擬化層爲多個虛擬機劃分所需的服務器資源,每個虛擬機可以同時運行一個單獨的操作系統。
隔離:虛擬機之間相互隔離(可以進行資源控制、性能隔離)
封裝:意味着整個虛擬機(硬件配置、BIOS 配置、內存狀態、磁盤狀態、CPU 狀態)都存儲在一個文件夾當中,只需要複製文件,就可以實現虛擬機的移動、複製。
相對於硬件獨立 :由於虛擬機運行在虛擬化層上,使用虛擬的硬件,不用考慮物理服務器的情況。因此在任何x86服務器上都可以無需任何修改的運行虛擬機。

計算虛擬化技術分類
根據虛擬化對象分類:

CPU虛擬化—爲了虛擬機上的指令可以被正常執行
內存虛擬化—做到虛擬機之間的內存空間相互隔離,使它們都認爲自己擁有整個內存空間
I/O虛擬化—讓虛擬機可以訪問到所需的I/O資源

根據虛擬化過程分類:

全虛擬化—使用VMM實現CPU、內存、設備I/O的虛擬化。(兼容性好,但處理器會產生額外開銷。)
半虛擬化—使用VMM實現CPU和內存虛擬化,I/O虛擬化交給GusetOS實現。(因此需要修改操作系統內核,使得它們可以協同工作。兼容性差,只有Suse、Ubuntu等少數Linux系統支持。但性能比全虛擬化好)
硬件輔助虛擬化—藉助硬件(主要爲處理器)的支持來實現高效的全虛擬化。

CPU虛擬化

首先我們要考慮,CPU虛擬化需要解決哪些問題?
  1. 如何模擬CPU指令(敏感指令)
    敏感指令:可以讀寫系統關鍵資源的指令
    系統關鍵資源:處理器呈現給軟件的接口是指令集和寄存器。而 I/O 設備呈現給軟件的接口是狀態和控制寄存器。這些都是系統的資源,其中影響處理器和設備狀態和行爲的寄存器稱爲關鍵資源 。
    特權指令:絕大多數的敏感指令都是特權指令,特權指令只在處理器的最高特權級執行。
  2. 如何讓多個虛擬機共享CPU
    類似於原生操作系統的定時器中斷機制。(中斷:在計算機執行程序期間,系統發生了需要緊急處理的事件,cpu會立刻停止當前操作,轉而去處理相應的中斷處理程序。處理完畢後,返回原本被中斷的位置繼續執行。)
    在CPU虛擬化場景下,當中斷觸發時陷入VMM,從而根據調度機制進行資源的調度。
    在這裏插入圖片描述

全虛擬化可以分爲軟件輔助虛擬化和硬件輔助虛擬化。
(參考博客:https://blog.csdn.net/jmilk/article/details/51824935)
軟件輔助虛擬化能夠成功的將所有在GuestOS中執行的系統內核特權指令進行捕獲、翻譯,使之成爲只能對GuestOS生效的虛擬特權指令。(主要是由於CPU不能準確判斷一個特權指令到底是GuestOS還是HostOS發出的,所以需要翻譯。)
硬件輔助虛擬化主要使用了支持虛擬化功能的CPU進行支撐,CPU可以明確的分辨出來自GuestOS的特權指令,並針對GuestOS進行特權操作,而不會影響到HostOS。
半虛擬化:
需要對GuestOS的內核代碼做一定的修改,才能夠將GuestOS運行在半虛擬化的VMM中。其中修改的部分則是加入了hypercall(超級調用),例如:可將GuestOS
訪問物理網卡做成系統調用,當GuestOS需要訪問物理網卡時,就可明確告訴它可直接通過系統調用來訪問物理網卡,這樣可繞過宿主OS的參與直接完成訪問,其效率更高。

FusionCompute計算虛擬化技術採用的是KVM技術。KVM的CPU虛擬化是基於CPU輔助的全虛擬化(硬件輔助虛擬化)。
x86 架構提供四個特權級別給操作系統和應用程序來訪問硬件。 Ring 是指 CPU 的運行級別,Ring 0是最高級別。

Ioctl—專用於設備輸入輸出操作的系統調用。

CPU與vCPU對應關係

在這裏插入圖片描述
以RH2288H V3服務器使用2.6GHz主頻CPU爲例,單臺服務器有2個物理CPU,每顆CPU有8核,又因爲超線程技術可以提供每個物理內核兩個處理線程,因此每顆CPU有16線程,總vCPU數量爲282=32個vCPU。總資源爲32*2.6GHz=83.2GHz。
虛擬機vCPU數量不能超過單臺CNA節點可用vCPU數量。多個虛擬機間可以複用同一個物理CPU,因此單CNA節點上運行的虛擬機vCPU數量總和可以超過實際vCPU數量。

內存虛擬化

內存虛擬化需要解決的問題?

從物理地址0開始的:物理地址0只有一個,無法同時滿足所有客戶機從0開始的要求
地址連續:雖然可以分配連續的物理地址,但是內存使用效率不高,缺乏靈活性

通過內存虛擬化共享物理系統內存,動態分配給虛擬機。

影子頁表

由於宿主機MMU不能直接裝載客戶機的頁表來進行內存訪問,所以當客戶機訪問宿主機物理內存時,需要經過多次地址轉換。也即首先根據客戶機頁表把客戶機虛擬地址 (GVA)轉換成客戶機物理地址 (GPA),然後再通過客戶機物理地址 (GPA)到宿主機虛擬地址 (HVA)之間的映射轉換成宿主機虛擬地址,最後再根據宿主機頁表把宿主機虛擬地址 (HVA)轉換成宿主機物理地址 (HPA)。而通過影子頁表,則可以實現客戶機虛擬地址到宿主機物理地址的直接轉換
在這裏插入圖片描述

EPT(擴展頁表)

CR3(控制寄存器3)將客戶機程序所見的客戶機虛擬地址(GVA)轉化爲客戶機物理地址(GPA),然後在通過EPT將客戶機物理地址(GPA)轉化爲宿主機物理地址(HPA)。這兩次轉換地址轉換都是由CPU硬件來自動完成的,其轉換效率非常高。
EPT只需要維護一張EPT頁表,而不需要像“影子頁表”那樣爲每個客戶機進程的頁表維護一張影子頁表,從而也減少了內存的開銷。
在這裏插入圖片描述

透明大頁(THP)

增加了內存頁面的大小,從而減少了頁表的數量,所需要的地址轉換也減少,TLB緩存失效次數也減少,提高了內存訪問的性能。(另外,由於地址轉換信息一般保存在CPU的緩存當中,大頁的使用讓地址轉換減少,從而降低了CPU緩存的使用,提升了整體性能。)

I/O虛擬化

I/O虛擬化需要解決的問題
  1. 設備發現:
    需要控制各虛擬機能夠訪問設備
  2. 訪問截獲:
    通過I/O端口或者MMIO(內存映射I/O)對設備的訪問
    設備通過DMA(直接內存存取)與內存進行數據交換
在QEMU/KVM中,客戶機可以使用的設備大致可分爲三類
模擬設備

模擬I/O設備方式的優點是對硬件平臺依賴性較低、可以方便模擬一些流行的和較老久的設備、不需要宿主機和客戶機的額外支持,因此兼容性高;
而其缺點是I/O路徑較長、VM-Exit次數很多,因此性能較差。一般適用於對I/O性能要求不高的場景。
在這裏插入圖片描述

Virtio設備

優點是實現了VIRTIO API,減少了VM-Exit次數,提高了客戶機I/O執行效率,比普通模擬I/O的效率高很多;
而其缺點是需要客戶機中與virtio相關驅動的支持 (較老的系統默認沒有自帶這些驅動,Windows系統中需要額外安裝virtio驅動),因此兼容性較差。
在這裏插入圖片描述

PCI設備直接分配

設備直接分配讓客戶機完全佔有PCI設備,這樣在執行I/O操作時大量地減少甚至避免了VM-Exit陷入到Hypervisor中,極大地提高了I/O性能,可以達到幾乎和Native系統中一樣的性能。
存在問題:一臺服務器主板上的空間有限,所以允許添加的PCI設備也有限。另外成本較高。
在這裏插入圖片描述

FusionCompute計算虛擬化介紹

虛擬機生命週期管理:創建、刪除、開關機、克隆、快照、遷移等
虛擬資源管理:主機組、模板管理、數據中心/集羣/主機/虛擬機分層管理等
虛擬資源配置管理:內存複用、虛擬機資源、CPU超分配、NUMA調度等

計算虛擬化功能特性

兼容行業特殊操作系統

(比較好理解不多談了)

靈活管理架構

(比較好理解不多談了)

支持GPU虛擬化、GPU直通

GPU虛擬化:類似於CPU虛擬化,提高GPU利用率,支持對vGPU資源管理和調度。
GPU直通:物理GPU在硬件支持虛擬機通過綁定GPU直接訪問物理GPU的部分硬件資源。
在這裏插入圖片描述

在線調整CPU和內存

支持主流Linux系統虛擬機在線調整CPU和內存;支持主流Windows系統虛擬機在線調整內存,在線調整CPU後重啓生效。

主機內存超分配

支持虛擬機總配置內存超過物理主機實際運行內存,通過虛擬機之間使用內存氣泡、內存交換以及內存共享等技術實現物理內存超規格使用。

內存複用包括:

內存共享:多臺虛擬機共享數據內容相同的內存頁。

內存置換:將外部存儲虛擬成內存給虛擬機使用,將虛擬機上暫時不用的數據存放到外部存儲上。系統需要使用這些數據時,再與預留在內存上的數據進行交換。

內存氣泡:系統主動回收虛擬機暫時不用的物理內存,分配給需要複用內存的虛擬機。內存的回收和分配均爲系統動態執行,虛擬機上的應用無感知。整個物理服務器上的所有虛擬機使用的分配內存總量不能超過該服務器的物理內存總量。
在這裏插入圖片描述

NUMA親和性調度

NUMA—非統一內存訪問
NUMA把一臺計算機分成多個節點(node),每個節點內部擁有多個CPU,節點內部使用共有的內存控制器,節點之間是通過互聯模塊進行連接和信息交互。
只有當CPU訪問自身內存對應的物理地址時,纔會有較短的響應時間(後稱Local Access)。而如果需要訪問其他節點的內存的數據時,就需要通過inter-connect通道訪問,響應時間就相比之前變慢了(後稱Remote Access)

所以在NUMA架構下,我們選擇同一節點的CPU和內存,保證虛擬機的運行效率。

在這裏插入圖片描述

虛擬機HA

當虛擬機所處節點故障時,選擇集羣內可用節點重新啓動該虛擬機,保障業務連續性,降低業務中斷時間。
支持主機、虛擬平臺、虛擬機內部多種故障場景的檢測和虛擬機恢復

虛擬機熱遷移

支持在不影響用戶使用或中斷服務的情況下在服務器之間實時遷移虛擬機,這樣就不需要爲了服務器維護而中斷業務了。

DRS動態資源調度

統一集羣內,均衡各節點資源使用並保障業務有充足資源可用。因此,DRS是實現自動負載均衡的基礎。

DPM分佈式電源管理

該功能會自動檢測集羣內服務器資源使用情況。當出現資源利用率不足時,將該主機上的虛擬機遷移到其他主機,並做下電操作。反之同理。

IMC集羣策略

設置集羣的IMC策略,使虛擬機可以在不同CPU類型的主機之間進行遷移。不會因爲CPU類型不同而導致虛擬機遷移失敗。因爲集羣內主機會向虛擬機提供相同的CPU功能集。

規則組

設定規則組可以控制虛擬機與虛擬機、虛擬機與主機之間的位置關係,以滿足不同應用場景的需求
主要分爲:聚集虛擬機、互斥虛擬機、虛擬機到主機
(這個比較好理解,在這裏就不多談了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章