原書中的第二章 是介紹了下hyper-v的管理器和檢查點的使用,導入導出虛擬機,所以我跳過了不高興寫,很簡單。直接進入第三部分,介紹虛擬機的三個重要組成部分:CPU,內存,硬盤的配置選項。
Hyper-v虛擬處理器
在Hyper-v中,系統對於虛擬處理器的管理偏向"粗獷",和同類產品VMware的ESXI相比,Hyper-v並不是將CPU的主頻疊加,然后根據每一台虛擬機分配相應主頻的資源;Hyper-v僅以物理CPU核心數進行資源分配,這種方式降低了邏輯架構的理解難度,但並不是說此種處理方式不可控。Hyper-v以數量為基礎的計量方式可以通過資源占比的方式進行精細化的分配。
Hyper-v虛擬處理器計數方式
Hyper-v能夠為虛擬機可分配的最大虛擬處理器數取決於物理服務器的兩個指標:物理CPU個數,物理CPU核心數。
- 物理CPU個數:此處指的是每一課實際安裝在服務器中的物理CPU。服務器行業術語"路"即物理CPU個數。雙路服務器即代表安裝有兩顆物料CPU。任務管理器中的插槽。
- 物理CPU核心數:此處指的是當顆CPU的核心數,如使用Intel的超線程技術,核心數需要乘以2。任務管理器中的內核。
- 虛擬機可分配最大虛擬處理器數:此數據指的是物理CPU個數*物理CPU核心數。此數據對應任務管理器中的邏輯處理器。無論何種情況,為單個虛擬機分配的虛擬處理器不可能超過此限制。
超線程:超線程技術是在一顆CPU同時執行多個程序而共同分享一顆CPU內的資源,理論上要像兩顆CPU一樣在同一時間執行兩個線程,雖然采用超線程技術能同時執行兩個線程,但它並不像兩個真正的CPU那樣,每個CPU都具有獨立的資源。當兩個線程都同時需要某一個資源時,其中一個要暫時停止,並讓出資源,直到 這些資源閑置后才能繼續。因此超線程的性能並不等於兩顆CPU的性能。但不可否認,擁有超線程技術的CPU性能會優於沒有超線程技術的CPU。
Hyper-v 2012 R2虛擬處理器升級特性
資源 |
Hyper-v 2012 R2 |
邏輯處理器 |
320 |
每台主機的虛擬CPU數量 |
2048 |
每台虛擬機的虛擬CPU數量 |
64 |
檢測物理CPU是否支持Hyper-V
除了查詢官方資料外,依然可以通過其他方法對此進行檢測。針對CPU的硬件支持,只要滿足以下三個條件就可以使用Hyper-v角色。
- 支持硬件虛擬化技術,如Intel的Intel VT或AMD的AMD-V。
- 支持數據執行保護(DEP)。
- 64位處理器:事實上這種限制在2008R2時代還會背作為一個參數去考量,但隨着技術的發展,現在基本可以默認最新的處理器都是64位了。
使用系統信息檢查支持特性
在PowerShell中輸入msinfo32
拉到最底部,檢查Hyper-v虛擬機監視模式擴展,Hyper-v固件中啟用的虛擬化,Hyper-v數據擴展保護,這三個選項的結果是否為是。
在服務器虛擬化中,Hyper-v 第二級地址轉換(SLAT)並不是必須功能。此功能是否開啟僅在兩種情況下是必要選項:
- 使用微軟的桌面虛擬化的RemoteFX進行顯卡硬件加速,USB重定向等功能時,第二級地址轉換(SLAT)是必要功能。
- 在操作系統為Windows8/8.1 64位Professional以上版本時,用戶希望在本機安裝Hyper-v角色時,第二級地址轉換(SLAT)是必要功能。
第二級地址轉換(SLAT)廣泛存在於服務器級別的Xeon CPU上,家用機級別的CPU則只有較新的CPU支持,具體是否支持,需要查詢官方的CPU支持文檔。
開啟Hyper-v失敗的原因
多數情況下,如果CPU本身支持Hyper-v技術,但在部署過程中總是失敗,可以關注兩個地方:
- 檢查是否開啟Bios中的虛擬化選項為enable。一般該選項為Intel Virtual Technology。
- 更新官方Bios程序至最新,碰到過開啟了虛擬化,但是因為Bios版本過舊,Hyper-v角色依然無法安裝。
Hyper-V虛擬處理器
分配原則
服務器虛擬化在企業和組織中的運營,牽扯到最多的一個問題就是:用戶永遠希望IT部門為其分配更多的硬件資源,而IT部門會考慮資源的集中整合分配,不願意為其分配過量的資源。虛擬機的超量分配容易導致資源浪費,同時又可能拖慢其他位於相同硬件上的虛擬機。
假設某台硬件服務器是一台雙路的服務器,擁有24顆邏輯處理器,每個用戶希望申請的虛擬機是24顆虛擬處理器,那么可能只要有兩個用戶在全速運行,其他用戶的體驗就會大受影響,無法進行正常的使用了。
合理分配虛擬處理器,不建議超量分配虛擬機處理器主要是因為以下幾個實施建議:
- 並不是所有應用都需要多核處理器的支持,分配2核或16核心並無差別。例如基於Windows Server2003的文件共享服務器分配2個核心和分配8個核心,在使用效率上的差異微乎其微。
- 為某台虛擬機分配較多的虛擬處理器,會使其在宏觀上使用CPU資源時的排隊時間更長,此時分配較少的虛擬處理器數量的虛擬機會因為排隊時間更短,能夠盡快的得到所需資源。
- 當所有用戶都在超量分配CPU資源時,無法進行有效的量化,在出現資源不足造成資源爭奪時,無法保證最為重要的關鍵業務穩定運行。
- 虛擬處理器的調整只能在虛擬機關機的狀態下調整,希望當業務正式線上運行后再做靈活調整是不可取的,這種設計思路會帶來服務中斷。
資源濫用
除了控制虛擬處理器的個數合理分配,hyper-v還有三種方式可以保障當出現系統cpu資源不足時,關鍵業務能夠正常運行,並且這三種方式均可在虛擬機開機狀態下進行調整:
- 虛擬機保留資源
- 虛擬機限制資源
- 虛擬機相對權重
創建一台虛擬機,右鍵點擊該虛擬機,選擇設置,點擊處理器,可以看到默認的快速創建虛擬機只會為虛擬機分配一個虛擬機處理器。同時默認的虛擬機保留(百分比)為0.
虛擬機保留是指最少為該虛擬機分配的資源,此設置以百分比的形式將資源分配給該虛擬機。如果濫用此設置,會導致實際分配的虛擬機數量低於預期,同時但出現虛擬機CPU資源超過100%時,希望會按照虛擬機啟動順序不同一次啟動,超出CPU資源分配的虛擬機將不能啟動。合理利用此設置可以保證關鍵業務能夠獲取到足夠的CPU運算資源,但不合理的設置會導致重要業務未被啟動,反而非關鍵業務會搶占CPU資源。
虛擬機保留(百分比)與虛擬處理器的數量需要結合使用,如一台擁有16核的服務器,先創建一台保留99%的16核CPU的虛機,繼續在創建一台虛擬機,16核,百分比2%,這樣發現分配的資源99+2已經超過了100%,會造成開啟失敗。
默認創建的虛擬機保留資源均為0.因此即使系統中存在需要保留99%的虛擬機,默認的虛擬機依然可以開機,不會影響正常業務。
NUMA支持
NUMA(非一致存儲器訪問)是針對常見的UMA(一致存儲器訪問)而言。我們常見的架構都是就近使用一致的資源,如部署雙CPU的服務器,其內存一般是對稱放置的。第一顆CPU就近訪問離他最近的一半內存,而當他舍近求遠訪問另一顆CPU的內存,就屬於NUMA了,此時可以預見,其訪問效率自然不如離他更近的那一半內存了。
針對物理服務器而言,多數操作系統都可以自動識別NUMA。而不支持NUMA的虛擬化架構則不會去進行這種優先選擇,帶來的后果就是運行效率的降低。
Windows Server2012 R2默認支持NUMA,因此無需修改。
分配虛擬處理器時,建議用戶不用分配單數的虛擬處理器,在配置不正確的NUMA信息時,會導致虛擬機的運行效率下降。Hyper-v的Numa會盡量將虛擬機的CPU和內存請求分配到相同的拓撲節點上,這些完全是自動運行的。
虛擬機限制資源
有保留資源,自然就有限制資源。和虛擬機保留資源相反,虛擬機限制資源的目的是限制某個虛擬機能夠使用的最大資源,通過這兩者相結合,可以使關鍵業務在一個合理的保障區間內運行。
首先看一個較為極端的例子,此處填寫虛擬處理器的數量為2,虛擬機保留填寫99,虛擬機限制填寫30,此時系統會告知,保留值不能大於限制值。
一般來說,限制資源是針對高CPU壓力的核心業務使用的,需要保障業務的正常運行,但不希望其占用過多的CPU資源。
另一種在組織中常見的場景是,某個強勢部門申請了一台高配的虛擬機但非重要業務。為了保證其他用戶的正常運行,系統管理員可以對這台虛擬機配置較為苛刻的虛擬機限制,以保證該虛擬機的運行不會影響到其他重要業務。
相對權重
當一台Hyper-v主機上的多台虛擬機在爭搶虛擬處理器資源時,可以通過相對權重來設置各個虛擬機之間的優先級。優先級默認100,該數值可以在1-10000之間進行設置,數字越大,優先級越高。默認所有虛擬機處於同一個服務器級別上,將會按照先到先得的順序進行虛擬處理器資源輪詢。
Hyper-V虛擬機內存
動態內存技術的改進
動態內存技術第一次是伴隨着Windows Server 2008R2 SP1中的Hyper-V出現的,隨之Windows Server 2012持續采用並改進了這項技術。在Windows Server 2012 R2中,動態內存技術從Windows服務器擴展到了Linux服務器。
靜態內存
靜態內存是每一種服務器虛擬化技術都提供的技術,其特點是虛擬機開啟后立即占用物理內存,虛擬機在運行期間不會再次向物理機提出增加內存的請求。
如一台服務器默認為4G物理內存,在僅安裝Hyper-V角色的前提下,內存使用量為1G。
如果開啟兩台快速創建的虛擬機后,內存使用量會變為2G,除非虛擬機關機,否則內存不會被釋放。
靜態內存適用於可以明確內存需求量的業務,為虛擬機分配靜態內存可以得到更好的運行效率。
動態內存
動態內存真正做到了按需分配,同時作為Windows Server 2008R2 SP1的改進,Windows Server 2012和Windows Server 2012 R2中的動態內存不僅支持最大,最小內存,同時還支持啟動內存。
需要注意的是,如需使用動態內存,則虛擬機必須提前安裝操作系統,並安裝集成服務組件。如不安裝集成服務組件,則動態內存功能無法生效。
動態內存包含五個配置選項,下面將分別介紹。
- 啟動內存:虛擬機啟動瞬間所需占用的內存,啟動內存和靜態內存的設置值相同。在虛擬機未正式進入系統之前,虛擬機的實際內存使用量均為啟動內存設置的數值。由於某些應用在安裝時要求檢測系統的最低內存,但在實例運行起來后,真實的內存使用量並不高,因此設置一個較高的啟動內存,可以讓部分對內存要求苛刻的應用正常安裝。
- 最小內存:虛擬機在正確安裝集成服務的前提下,進入操作系統后,由操作系統所能分配的最小內存。如某個新安裝的操作系統,其內存最低需求為512MB,我們設置最小內存為128MB,實際內存並不會為虛擬機分配為128MB。最小內存作為保障參數存在,無法當成限制參數使用。
- 最大內存:默認最大內存值是1048576MB,較大的基數意味着可以為這台虛擬機分配物理機所能分配的最大值。事實上這種設置很難對虛擬機做到精細管控,因此在實際使用當中,需要在這里填寫預估的合理最大值。如1024MB,2048MB等具體的數值。
-
內存緩沖區:動態內存的一項標配選項,由於動態內存會實時改變虛擬機的內存使用量,當內存需求在某一個時間點突然增大時,其使用的內存就是內存緩沖區所保留的空間。
如果內存瞬間增幅不大,在虛擬機使用內存緩沖區時,系統會在最大內存限額之內增大實際為用戶分配的內存,同時保障內存緩沖區時刻為原設定值;如果內存瞬間增幅較大,內存頁面文件會被寫入磁盤,即智能分頁文件,當內存數據由內存轉入較慢的硬盤時,其運行效率會明顯降低。在系統為虛擬機分配更多內存后,寫入到硬盤中的分頁文件將會重新被寫回內存。如果發現為虛擬機設定了動態內存,但該虛擬機的運行效率偏偏很低,經常發生寫入硬盤智能分頁文件的情況,此時就可以考慮擴大內存緩沖區或增大內存了。為了避免這種情況,在使用動態內存時,合理分配內存緩沖區是非常必要的。
- 內存權重:不僅僅針對開啟動態內存的虛擬機生效,其對分配固定內存的虛擬機同樣生效。內存權重是一種苛刻運行條件下的保障措施。當虛擬機分配了過多的內存,而Hyper-v主機並沒有足夠的內存時,內存權重會對虛擬機進行分級,優先級高的虛擬機在未獲得足夠的內存前,其他虛擬機無法獲得正常需要的內存。
當優先級高的內存需要使用更多內存時,系統可能會將優先級低的開啟了動態內存的虛擬機內存回收,被回收內存的虛擬機內存會寫入智能分頁文件。無論如何,當發生內存權重需要仲裁的情況時,問題往往都比較嚴重。內存權重可以保證業務持續運行,但無法對業務持續運行的效率進行保障。
解決這個問題有三種方法:
- 不要調整默認內存權重大小,所有虛擬機使用同樣的內存權重。
- 為Hyper-v主機提供更多的物理內存,只要內存不夠的情況不發生,則內存權重仲裁不會發生。
- 使用Hyper-v的群集技術,將單台物理服務器的負載分擔到多台物理服務器上,杜絕內存權重仲裁的情況。
靜態內存和動態內存的使用場景
盡管動態內存可以做到按需分配,降低內存的使用量,節省成本。但動態內存並不是萬能的,由於內存緩沖區的存在,其使用效率會低於靜態內存。
適用於動態內存有如下場景:
- 物理內存緊張,成本敏感。
- 沒有群集或其他高可用環境,希望盡可能集成更多業務。
- 測試環境,對運行效率的間歇性變動不敏感。
- 非關鍵業務,對性能要求不高。
- 關機業務的測試階段,需要對實際內存的用量進行測試。
適用於靜態內存有如下場景:
- 對成本部敏感,物理內存富足。
- 擁有群集或其他高可用環境,可以自動對負載進行遷移。
- 關鍵業務,對性能敏感。
復雜多變的生產環境決定了靜態內存和動態內存都有其生存空間,相對靜態內存而言,動態內存配置的架構規划需要花費更多的心思。
Hyper-V虛擬硬盤
虛擬硬盤架構
和物理硬盤不同的是,Hyper-V虛擬硬盤不會獨占硬盤空間,它是一組具有特定含義的文件,通過Hyper-V創建虛擬機后,其會自動創建。它包含了Hyper-V虛擬機的數據文件和硬件配置文件,以及快照,頁面交換等信息。它的大小和性能多數情況下受限於承載這些文件的物理硬盤的大小和性能,典型的一組Hyper-V虛擬硬盤文件包含以下內容:
- 虛擬硬盤文件(以vhd或vhdx為后綴),該文件屬於最為重要的文件,保存了虛擬機內存的磁盤分區結構和具體數據。
- 虛擬機xml文件,此文件默認會保存在Virtual Machines目錄下,其包含虛擬機的硬件配置,如虛擬硬盤所處的位置,虛擬機連接的網絡名稱,MAC的地址,關聯了哪些虛擬機bin和vsv文件等。該文件丟失會導致虛擬機硬件配置丟失,無法完成導入操作。
- 虛擬機bin文件,當虛擬機使用暫停功能時,系統會保留其當前狀態,此時內存的信息會寫入bin文件。
- 虛擬機vsv文件,每個虛擬機存放配置文件的目錄中都有一個vsv文件,其保存的是硬件的設備狀態,初始大小為20MB,當虛擬機處於保存狀態下,其文件大小會根據系統狀況相應增大或減小。
- 檢查點文件,檢查點文件會在Virtual Hard Disks目錄下產生以avhd或avhdx為后綴的文件(此前版本均稱為快照文件),每次點擊檢查點,則創建一組檢查點文件,此文件丟失會導致創建檢查點之后的數據文件丟失。
- 檢查點xml文件,該文件位於Snapshots目錄下,作用同虛擬機xml文件。
- 檢查點bin文件,同虛擬機bin文件。
- 檢查點vsv文件,同虛擬機vsv文件。
虛擬硬盤特性改進
Hyper-v虛擬硬盤在Hyper-v 2012 R2中擁有兩種支持格式,分別是vhd和vhdx,其中vhdx在Hyper-v 2012中被首次使用,這種新格式擁有以下特點:
功能 |
Hyper v 2012 R2 |
虛擬光纖通道 |
是 |
多路徑輸入輸出(MPIO) |
是 |
原生4KB磁盤支持 |
是 |
最大虛擬硬盤大小 |
64TB vhdx |
最大直通硬盤大小 |
256TB+ |
安全卸載數據傳輸 |
是 |
從USB磁盤啟動 |
是 |
存儲池 |
是 |
實時VHD合並 |
是 |
硬盤IOPS限制 |
是 |
相對於vhd而言,vhdx最大的改進是單個文件可以超過2TB容量限制,達到了64TB,此格式不支持Windows Server 2012以前的Hyper-v版本。
Vhdx格式再性能上較之vhd有了明顯的改進。在io的讀寫方面,可以達到100萬級的IOPS。
虛擬硬盤的類型
在創建Hyper-v虛擬硬盤時,默認有三個選項可以選擇,分別是固定大小,動態擴展,差異。通過hyper-v管理器的虛擬機向導默認只能創建動態擴展的虛擬硬盤,其他格式需要使用新建虛擬硬盤向導完成。
- 固定大小:提供了更好的性能,該格式的特定是物理虛擬機內的實際占用空間多少,其均會在創建固定大小時提供占滿所需的全部物理磁盤空間。如創建10GB的虛擬硬盤文件,則實際的vhdx大小也為10GB。
- 動態擴展:可以更好的利用物理磁盤空間,只要業務不是對硬盤要求特別苛刻,均建議采用此方式,虛擬硬盤文件在最初創建時很小,隨着實際文件的增多會慢慢變大。由於承載虛擬機文件的vhdx會不斷變大,因此該文件需要不斷的請求新的地址空間,而先請求后分配的這種操作,會導致其先天就比固定大小這種一次性請求,后期只需分配的虛擬硬盤慢。同時由於磁盤是先請求后分配的,因此在物理磁盤上的分布可能也不是連續的,這一點同樣會降低效率。
- 差異: 提供更可觀的物理磁盤空間利用率,通過創建一個共用的父磁盤,多個子磁盤可以共用一個父磁盤,從而達到節約硬盤空間的目的。由於共用了一個父磁盤,因此在使用時會頻繁讀取父磁盤,對父磁盤所在的物理磁盤提出了更高的讀寫要求。差異磁盤的典型應用即是微軟的桌面虛擬化(VDI),在創建完一個操作系統的父磁盤后,連續創建多個子磁盤不會帶來明顯的空間增大,同時創建速度也非常快。需要注意的是,在創建完差異磁盤后,一定不可以再次修改父磁盤,否則會造成所有子磁盤與父磁盤的連接失敗,導致所有數據無法讀取。在windows Server 2012 R2中,利用差異磁盤的典型做法是將父磁盤放置在告訴的固態磁盤/陣列上,而將差異磁盤放置在低速磁盤中。
除了以上三種格式,還有一種特殊的磁盤應用方式:直通(Passthrough)磁盤,直通磁盤可以讓虛擬機直接與物理磁盤交互操作,無需經過Hypervisor進行轉換,因此讀寫效率也最高。
直通硬盤需要將原有的一塊物理硬盤脫機,然后掛載到虛擬機中。
直通磁盤擁有最好的性能,但是依然存在一些缺點:
- 獨占硬盤空間,無法再次分割。
- 無法使用檢查點功能。
- 無法使用私有雲模板進行部署。
在使用直通硬盤時,需要因地制宜,根據實際的需求來決定是否運用此技術。
應用場景 |
推薦技術 |
推薦陣列及磁盤模式 |
重點應用 |
直通,固定大小 |
RAID10,固態或SAS |
實驗室環境測試 |
差異 |
RAID0,固態 |
性能應用 |
直通 |
RAID10,RAID0,固態或SAS |
一般生產應用 |
動態 |
RAID5,SAS |
編輯虛擬硬盤
自Windows Server 2012起,操作系統內置了vhd硬盤管理工具,管理vhd和vhdx文件和管理單獨的物理硬盤一樣方便。在操作系統中雙擊即可完成掛載,可以對其進行格式化重新分區等和硬盤一致操作。也可以往硬盤中拷貝,刪除修改文件。
編輯完成硬盤,右鍵彈出
擴展虛擬硬盤
在虛擬機關閉的情況下,可以對Hyper-v虛擬機磁盤的大小進行擴展和壓縮。在Windows Server 2012 R2下創建的第二代虛擬機,默認即可於虛擬機開啟狀態下,對虛擬機進行擴展,如果是第一代虛擬機,則磁盤必須掛載在SCSI控制器上方可實現該功能。
選擇編輯
可以選擇擴展,壓縮轉換操作。當虛擬機磁盤經過頻繁的寫入和刪除后,其所占用的磁盤空間會變大,但當虛擬磁盤中的數據刪除后,這部分空間並不會被釋放,通過壓縮,可以釋放這部分空間。轉換可以將vhd轉換成vhdx,也可以倒過來轉換,在進行格式轉換的同時,也可以在固定大小和動態擴展之間進行轉換。
選擇擴展后的大小。
確認擴展。
合並差異磁盤
在測試環境中,可能會因為磁盤空間和預算的限制,通過差異磁盤來完成相應試驗環境的搭建。當在將這些虛擬機遷移到生產環境時,依然使用差異磁盤就有些不合時宜了。此時需要將父磁盤和子磁盤進行合並,同時不能破壞原父磁盤。
點擊編輯進行接下來的合並操作。
選擇合並
在配置磁盤對話框,選擇到新虛擬硬盤,輸入進行差異磁盤的合並操作。輸入真實存在的物理路徑和保存的文件名,此時可選動態虛擬磁盤和固態磁盤兩類。點擊完成后,耐心等待合並結束。
回到虛擬機設置選項卡下,點擊瀏覽,查看新生成的虛擬硬盤文件位置。同時原父子磁盤均未被破壞。
小結
本章對Hyper-v的CPU的計量方式進行了分析,以及如何在脫機情況下檢查CPU是否支持Hyper-v功能。
Hyper-v的動態內存技術也是一項非常有用的功能,在Windows Server 2012 R2中,動態內存技術開始對Linux系統進行支持,盡管該功能在Windows Server 2008 R2 SP1中就已經出現,但對Linux系統的支持還是第一次。Vhdx這種從Windows Server 2012 開始出現的新的虛擬硬盤格式開始漸漸深入人心。固定大小,動態擴展,直通以及差異這4種硬盤類型的性能差距越來越小,這為我們進行硬盤選型,架構設計帶來了更簡潔的選擇。
而差異磁盤盡管性能相對最差,但在這個固態硬盤風生水起的年代,反而也變得不是什么大問題。在測試環境中,差異磁盤配合固態硬盤的表現依然會超越同等預算下的機械硬盤組合。