aws(amazon web services)nitro架構為amazon的雲服務提供了底層的支援。nitro架構的總體設計思想是:輕量化的hypervisor配合定製化的硬體,讓使用者無法區分出執行在虛擬機器內和執行在裸金屬上作業系統的效能差異。為了實現定製化的硬體(asic),amazon和以色列的一家晶元公司——annapurna實驗室合作,並在後面將其收購,其晶元的logo就是annapurna山(世界第十高峰)。
原本基於xen架構的虛擬化系統中,伺服器既要執行提供給客戶的虛擬機器,也要執行xen hypervisor,還要執行domain0中的各種裝置模擬,包括網路、儲存、管理、安全和監控等功能,導致伺服器中大概只有七成的資源能夠提供給使用者。
為此,nitro專案將焦點放在這三成的虛擬化損耗上,通過定製化的硬體,將這些虛擬化損耗挪到定製的nitro系統上,讓伺服器上的資源基本上都能夠提供給使用者。
nitro系統並不是一蹴而就的,而是經過了好幾代的迭代發展,從原本的xen架構慢慢過渡過來的。原本的xen架構中,虛擬機器的裝置都是由domain0的amazon linux模擬和管理,這樣帶來的問題是:雖然domain0功能強大,但是卻臃腫龐大,而且會搶占伺服器的資源。
經過多代發展,nitro架構終於將虛擬機器的計算(主要是cpu和記憶體)和i/o(主要是網路和儲存)子系統分離開來,將原本乙個大的計算機系統分成兩部分(如下圖所示):
基於intel主機板的通用伺服器系統,該系統主要提供計算資源。
amazon自己定製的nitro系統,該系統主要提供i/o資源。
兩個系統之間通過pcie匯流排連線到一起,如下圖所示:
nitro系統主要由三部分組成:
以pcie卡形式呈現的nitro卡,主要包括支援網路功能的vpc(virtual private cloud)卡,支援儲存功能的ebs(elastic block store)、instance storage卡和支援系統控制的nitro controller卡。
nitro安全晶元,該晶元提供hardware root of trust,防止執行於通用伺服器上的軟體對non-volatile storage進行修改,比如虛擬機器的uefi程式。
執行於通用伺服器的nitro hypervisor,這是個基於kvm的輕量級hypervisor,主要提供cpu和記憶體的管理功能,不提供裝置的模擬(因為所有的裝置都是通過透傳的方式新增到虛擬機器中)。
由於找不到詳細的資料來解釋兩個系統之間是怎麼通過pcie匯流排連線到一起的,所以這邊只能做個猜測。理論上,應該可以在intel主機板上插入乙個pcie擴充套件槽(pcie riser)之類的卡,然後該卡對pcie匯流排進行了擴充套件,讓pcie匯流排能夠以連線線的方式擴充套件出來(目前pcie的標準能支援的pcie gen3的最長連線線只有大概20厘公尺,兩個系統的連線線一般不止這個,所以需要進行擴充套件),該連線線連線到nitro系統的nitro controller上,nitro controller再和各種型別的nitro卡(儲存、網路)連線起來,控制這個擴充套件出來的pcie連線線上能夠看到的pcie資源。這樣,基於intel主機板的系統能夠看到的pcie外設資源完全可以通過nitro controller進行控制。
對於支援vmx功能的虛擬化系統而言,虛擬化的損耗主要**於vm exit導致cpu退出到root-operation mode,hypervisor對各種vm exit的原因進行處理。vm exit主要**於兩個方面:
裝置模擬。
dma配置和資料拷貝。
中斷傳遞。
對於nitro hypervisor而言,虛擬機器執行起來後將會很少發生vm exit,一方面是因為pci裝置都能夠通過基於sr-iov進行透傳,hypervisor不進行裝置模擬,解決了裝置模擬,dma配置和資料拷貝觸發的vm exit;另外一方面是在中斷傳遞方面,採用了類似** a comprehensive implementation and evalution of direct interrupt delivery 介紹的did (direct interrupt delivery)方式,極大地減少了由於中斷傳輸觸發的vm exit。
did中斷傳輸方式對是建立在普通的外部中斷和ipi不觸發vm exit(kvm中,外部中斷基本是會觸發vm exit的),只有nmi才會觸發vm exit的基礎上,對各種中斷的傳輸方式進行了一定的改造。
sr-iov透傳的裝置中斷,當hypervisor排程執行乙個vcpu的時候,需修改iommu的中斷重對映表,將vf產生的中斷直接傳遞給執行vcpu的cpu。當vcpu退出,hypervisor需再次修改iommu的中斷重對映表,讓vf產生的中斷在host看來是nmi以確保vf產生的中斷能夠被hypervisor看到(中斷傳遞的目標cpu可能在執行其他vcpu,這個時候就需要觸發vm exit),然後通過軟體注入的方式將該中斷傳遞給目標vcpu。
模擬裝置產生的中斷,基本思路是將模擬裝置轉化為ipi中斷,原來的ipi由nmi替代,由於nitro系統中,不再有模擬裝置,所以可以跳過該部分。
定時器中斷,也是屬於外部中斷的一種,只是該外部中斷的傳遞不會經過iommu的中斷重對映,所以為了確保該中斷能夠傳遞到正確的vcpu上,需要對定時器的配置進行限制。即cpu在執行vcpu的時候,需要確保cpu對應的lapic上配置的定時器都是vcpu的,如果不止,需要轉移到其他的cpu上,當cpu不執行vcpu的時候,需要將vcpu相應的定時器轉移到其他cpu上,並且產生的中斷型別修改為nmi。
軟體注入中斷,這種型別的中斷需要轉化為硬體的self-ipi,這樣vcpu接收到的所有中斷都能夠被硬體lapic控制器感受到,在中斷處理完畢後寫eoi(end-of-interrpt)告知硬體lapic控制器中斷已經處理完畢可以繼續處理下乙個中斷的時候,就不用觸發vm exit進行特殊的處理。因為如果硬體lapic沒有接收到中斷,而cpu去寫eoi就可能造成lapic狀態錯亂。
nitro架構不僅強大(虛擬機器的效能在大部分情況下和裸機的效能相差遠小於%),而且特別靈活,不僅可以基於nitro hypervisor執行虛擬機器,而且可以基於一些常用的hypervisor(如qemu-kvm,vmware)執行虛擬機器,甚至可以直接裸跑作業系統。
KVM伺服器安裝
在centos6系統中,kvm虛擬化相關的軟體組包括四個 虛擬化 虛擬化客戶端 虛擬化工具 虛擬化平台 如果當前環境不支援中文,則對應的軟體組分別為 virtualization virtualization client virtualization tools virtualization pl...
調整KVM伺服器
通過對kvm伺服器做適當調整,為kvm虛擬機器的網路訪問及磁碟儲存提供條件。主要完成以下事項 1 建立隔離網絡卡virbr1 2 建立橋接網絡卡br0 3 建立乙個不小於40g的檔案系統,掛載到 data 作為虛擬機器的專用空間 kvm的虛擬網路型別 1 橋接模式 guest與host連線到同乙個交...
Linux 安裝KVM伺服器
1.安裝一台kvm伺服器 問題本例要求安裝一台可用的kvm伺服器 1 準備一台centos6伺服器 2 安裝虛擬化相關包組 3 啟動libvirtd服務 方案在centos6系統中,kvm虛擬化相關的軟體組包括四個 虛擬化 虛擬化客戶端 虛擬化工具 虛擬化平台 如果當前環境不支援中文,則對應的軟體組...