国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 值得一看的KVM之CPU虛擬化

值得一看的KVM之CPU虛擬化

時(shí)間:2023-06-29 20:27:01 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-06-29 20:27:01 來源:網(wǎng)站運(yùn)營(yíng)

值得一看的KVM之CPU虛擬化:

1.為什么要虛擬化CPU

虛擬化技術(shù)是指在x86的系統(tǒng)中,一個(gè)或以上的客操作系統(tǒng)(Guest Operating System,簡(jiǎn)稱:Guest OS)在一個(gè)主操作系統(tǒng)(Host Operating System,簡(jiǎn)稱:Host OS)下運(yùn)行的一種技術(shù)。這種技術(shù)只要求對(duì)客操作系統(tǒng)有很少的修改或甚至根本沒有修改。x86處理器架構(gòu)起先并不滿足波佩克與戈德堡虛擬化需求(Popek and Goldberg virtualization requirements),這使得在x86處理器下對(duì)普通虛擬機(jī)的操作變得十分復(fù)雜。在2005年與2006年,英特爾與AMD分別在它們的x86架構(gòu)上解決了這個(gè)問題以及其他的虛擬化困難。

2.關(guān)于CPU的Ring0、Ring1···

ring0是指CPU的運(yùn)行級(jí)別,ring0是最高級(jí)別,ring1次之,ring2更次之…… 拿Linux+x86來說, 操作系統(tǒng)(內(nèi)核)的代碼運(yùn)行在最高運(yùn)行級(jí)別ring0上,可以使用特權(quán)指令,控制中斷、修改頁(yè)表、訪問設(shè)備等等。 應(yīng)用程序的代碼運(yùn)行在最低運(yùn)行級(jí)別上ring3上,不能做受控操作。如果要做,比如要訪問磁盤,寫文件,那就要通過執(zhí)行系統(tǒng)調(diào)用(函數(shù)),執(zhí)行系統(tǒng)調(diào)用的時(shí)候,CPU的運(yùn)行級(jí)別會(huì)發(fā)生從ring3到ring0的切換,并跳轉(zhuǎn)到系統(tǒng)調(diào)用對(duì)應(yīng)的內(nèi)核代碼位置執(zhí)行,這樣內(nèi)核就為你完成了設(shè)備訪問,完成之后再?gòu)膔ing0返回ring3。這個(gè)過程也稱作用戶態(tài)和內(nèi)核態(tài)的切換。
那么,虛擬化在這里就遇到了一個(gè)難題,因?yàn)樗拗鞑僮飨到y(tǒng)是工作在ring0的,客戶操作系統(tǒng)就不能也在ring0了,但是它不知道這一點(diǎn),以前執(zhí)行什么指令,現(xiàn)在還是執(zhí)行什么指令,那肯定不行啊,沒權(quán)限啊,玩不轉(zhuǎn)啊。所以這時(shí)候虛擬機(jī)管理程序(VMM)就要避免這件事情發(fā)生。 (VMM在ring0上,一般以驅(qū)動(dòng)程序的形式體現(xiàn),驅(qū)動(dòng)程序都是工作在ring0上,否則驅(qū)動(dòng)不了設(shè)備) 一般是這樣做,客戶操作系統(tǒng)執(zhí)行特權(quán)指令時(shí),會(huì)觸發(fā)異常(CPU機(jī)制,沒權(quán)限的指令,觸發(fā)異常),然后VMM捕獲這個(gè)異常,在異常里面做翻譯,模擬,最后返回到客戶操作系統(tǒng)內(nèi),客戶操作系統(tǒng)認(rèn)為自己的特權(quán)指令工作正常,繼續(xù)運(yùn)行。但是這個(gè)性能損耗,就非常的大,你想想原來,簡(jiǎn)單的一條指令,執(zhí)行完,了事,現(xiàn)在卻要通過復(fù)雜的異常處理過程。
這時(shí)候半虛擬化就來了,半虛擬化的思想就是,讓客戶操作系統(tǒng)知道自己是在虛擬機(jī)上跑的,工作在非ring0狀態(tài),那么它原先在物理機(jī)上執(zhí)行的一些特權(quán)指令,就會(huì)修改成其他方式,這種方式是可以和VMM約定好的,這就相當(dāng)于,我通過修改代碼把操作系統(tǒng)移植到一種新的架構(gòu)上來,就是定制化。所以像XEN這種半虛擬化技術(shù),客戶機(jī)操作系統(tǒng)都是有一個(gè)專門的定制內(nèi)核版本,和x86、mips、arm這些內(nèi)核版本等價(jià)。這樣以來,就不會(huì)有捕獲異常、翻譯、模擬的過程了,性能損耗非常低。這就是XEN這種半虛擬化架構(gòu)的優(yōu)勢(shì)。這也是為什么XEN只支持虛擬化Linux,無(wú)法虛擬化windows原因,微軟不改代碼啊。
可以后來,CPU廠商,開始支持虛擬化了,情況有發(fā)生變化,拿X86 CPU來說,引入了Intel-VT 技術(shù),支持Intel-VT 的CPU,有VMX root operation 和 VMX non-root operation兩種模式,兩種模式都支持Ring 0 ~ Ring 3 這 4 個(gè)運(yùn)行級(jí)別。這下好了,VMM可以運(yùn)行在VMX root operation模式下,客戶OS運(yùn)行在VMX non-root operation模式下。也就說,硬件這層做了些區(qū)分,這樣全虛擬化下,有些靠“捕獲異常-翻譯-模擬”的實(shí)現(xiàn)就不需要了。而且CPU廠商,支持虛擬化的力度越來越大,靠硬件輔助的全虛擬化技術(shù)的性能逐漸逼近半虛擬化,再加上全虛擬化不需要修改客戶操作系統(tǒng)這一優(yōu)勢(shì),全虛擬化技術(shù)應(yīng)該是未來的發(fā)展趨勢(shì)。
XEN是最典型的半虛擬化,不過現(xiàn)在XEN也支持硬件輔助的全虛擬化,大趨勢(shì),拗不過啊。。。 KVM、VMARE這些一直都是全虛擬化。

3.虛擬化技術(shù)分類

當(dāng)前的虛擬化技術(shù)主要分為三種:
1.平臺(tái)虛擬化
平臺(tái)虛擬化是針對(duì)計(jì)算機(jī)和操作系統(tǒng)的虛擬化,也就是大家最常見的一種虛擬化技術(shù),Hyper-V,Xen,VMware等產(chǎn)品都是應(yīng)用這類虛擬化技術(shù)。
2.資源虛擬化
資源虛擬化是指對(duì)特定的計(jì)算機(jī)系統(tǒng)資源的虛擬化,例如對(duì)內(nèi)存、網(wǎng)絡(luò)資源等等。
3.應(yīng)用程序虛擬化
應(yīng)用程序虛擬化的一個(gè)最典型的應(yīng)用就是JAVA,生成的程序在指定的VM里面運(yùn)行。

3.1平臺(tái)虛擬化

全虛擬化指的是虛擬機(jī)完完全全的模擬了計(jì)算機(jī)的底層硬件,包括處理器,物理內(nèi)存,時(shí)鐘,各類外設(shè)等等。這樣呢,就不需要對(duì)原有硬件和操作系統(tǒng)進(jìn)行改動(dòng)。
在虛擬機(jī)軟件訪問計(jì)算機(jī)的物理硬件就可以看做軟件訪問了一個(gè)特定的接口。這個(gè)接口是由VMM(由Hypervisor技術(shù)提供)提供的既VMM提供完全模擬計(jì)算機(jī)底層硬件環(huán)境,并且這時(shí)在計(jì)算機(jī)(宿主機(jī))上運(yùn)行的操作系統(tǒng)(非虛擬機(jī)上運(yùn)行的操作系統(tǒng))會(huì)被降級(jí)運(yùn)行(Ring0變化到Ring1)。
簡(jiǎn)單地說,全虛擬化的VMM必須運(yùn)行在最高權(quán)限等級(jí)來完全控制主機(jī)系統(tǒng),而Guest OS(客戶操作系統(tǒng))降級(jí)運(yùn)行,不進(jìn)行特權(quán)等級(jí)操作,Guest OS原有的特權(quán)等級(jí)操作交由VMM代為完成。
全虛擬化在早期的x86平臺(tái)上也無(wú)法實(shí)現(xiàn)。直到2006年前后,AMD和Intel分別加入了AMD-V和Intel VT-x擴(kuò)展。Intel VT-x采用了保護(hù)環(huán)的實(shí)現(xiàn)方式,以恰當(dāng)?shù)乜刂铺摂M機(jī)的內(nèi)核模式特權(quán)。然而在此之前許多x86上的平臺(tái)VMM已經(jīng)非常接近于實(shí)現(xiàn)全虛擬化,甚至宣稱支持全虛擬化。比如 Adeos、Mac-on-Linux、Parallels Desktop for Mac、Parallels Workstation、VMware Workstation、VMware Server、VirtualBox、Win4BSD和Win4Lin Pro。

3.2半虛擬化

半虛擬化又叫超虛擬化,它是通過修改Guest OS部分特權(quán)狀態(tài)的代碼,以便與VMM交互。此類虛擬化技術(shù)的虛擬化軟件性能都 非常好。 半虛擬化通過修改操作系統(tǒng)內(nèi)核,替換掉不能虛擬化的程序,通過超級(jí)調(diào)用直接與底層的虛擬化層來通訊。由虛擬化層來進(jìn)行內(nèi)核操作。
半虛擬化的典型就是VMware Tools,該程序的VMware Tools服務(wù)為虛擬化層提供了后門服務(wù),通過該服務(wù)可以進(jìn)行大量的特權(quán)等級(jí)操作。 使用半虛擬化技術(shù)的軟件有:Denali、Xen等。(Xen可以使用全虛擬化和半虛擬化兩種狀態(tài))

3.3 硬件輔助虛擬化

硬件輔助虛擬化(hardware-assisted virtualization)指的就是通過處理器提供的特殊指令來實(shí)現(xiàn)高效的全虛擬化,例如Intel-VT技術(shù)和AMD-V技術(shù)。
有了Intel-VT技術(shù)和AMD-V技術(shù),Guest OS和VMM被完全隔離開來,同時(shí),CPU虛擬化技術(shù)給CPU增加了新的Root模式,這樣就實(shí)現(xiàn)了Guest OS和VMM的隔離。
在硬件輔助虛擬化中,硬件提供結(jié)構(gòu)支持幫助創(chuàng)建虛擬機(jī)監(jiān)視并允許客戶機(jī)操作系統(tǒng)獨(dú)立運(yùn)行。硬件輔助虛擬化在1972年開始運(yùn)行,它在IBM System/370上運(yùn)行,使用了第一個(gè)虛擬機(jī)操作系統(tǒng)VM/370。在2005年與2006年,Intel和AMD為虛擬化提供了額外的硬件支持。支持硬件輔助虛擬化的有 Linux KVM, VMware Workstation, VMware Fusion, Microsoft Virtual PC, Xen, Parallels Desktop for Mac,VirtualBox和Parallels Workstation。

3.4 操作系統(tǒng)虛擬化

操作系統(tǒng)虛擬化(Operating system–level virtualization)更多的應(yīng)用在VPS上,在傳統(tǒng)的操作系統(tǒng)中,所有用戶進(jìn)程本質(zhì)上是在同一個(gè)操作系統(tǒng)實(shí)例中運(yùn)行,因此,操作系統(tǒng)的內(nèi)核存在缺陷,那么勢(shì)必會(huì)影響到其他正在運(yùn)行的進(jìn)程。
操作系統(tǒng)虛擬化是一種在服務(wù)器操作系統(tǒng)中使用的輕量級(jí)虛擬化技術(shù),很簡(jiǎn)單,也很強(qiáng)大。
此類技術(shù)是內(nèi)核通過創(chuàng)建多個(gè)虛擬的操作系統(tǒng)實(shí)例(N多內(nèi)核和庫(kù))來隔離進(jìn)程。不同實(shí)例中運(yùn)行的程序無(wú)法知曉其他實(shí)例中運(yùn)行了什么進(jìn)程,也無(wú)法進(jìn)行通訊。
在類Unix操作系統(tǒng)中,這個(gè)技術(shù)最早起源于標(biāo)準(zhǔn)的chroot機(jī)制,再進(jìn)一步演化而成。除了將軟件獨(dú)立化的機(jī)制之外,內(nèi)核通常也提供資源管理功能,使得單一軟件容器在運(yùn)作時(shí),對(duì)于其他軟件容器的造成的交互影響最小化。
應(yīng)用這類技術(shù)最常見的就是OpenVZ了,但是OpenVZ的存在的超售問題一直受到很多草根站長(zhǎng)的詬病。

3.5 各類虛擬化技術(shù)對(duì)比

3.6 cgroups

cgroups,其名稱源自控制組群(control groups)的簡(jiǎn)寫,是Linux內(nèi)核的一個(gè)功能,用來限制,控制與分離一個(gè)進(jìn)程組群的資源(如CPU、內(nèi)存、磁盤輸入輸出等)。

相關(guān)視頻推薦
怎樣開啟設(shè)計(jì)tcp/ip協(xié)議棧/dpdk/netmap/sk_buff/udp協(xié)議/虛擬化/vpp
dpdk與netmap該怎樣選擇/eth/ip/udp/tcp協(xié)議/柔性數(shù)組/協(xié)議棧
學(xué)習(xí)地址:Dpdk/網(wǎng)絡(luò)協(xié)議棧/vpp/OvS/DDos/NFV/虛擬化/高性能專家 (更多DPDK學(xué)習(xí)資料有需要的可以自行報(bào)名學(xué)習(xí),免費(fèi)訂閱,永久學(xué)習(xí))
如果對(duì)大家有幫助,可以點(diǎn)擊鏈接進(jìn)群免費(fèi)領(lǐng)取相關(guān)學(xué)習(xí)資料,關(guān)注我持續(xù)更新哦!
這個(gè)項(xiàng)目最早是由Google的工程師(主要是Paul Menage和Rohit Seth)在2006年發(fā)起,最早的名稱為進(jìn)程容器(process containers)。在2007年時(shí),因?yàn)樵贚inux內(nèi)核中,容器(container)這個(gè)名詞有許多不同的意義,為避免混亂,被重命名為cgroup,并且被合并到2.6.24版的內(nèi)核中去。自那以后,又添加了很多功能。
cgroups的一個(gè)設(shè)計(jì)目標(biāo)是為不同的應(yīng)用情況提供統(tǒng)一的接口,從控制單一進(jìn)程(像nice)到操作系統(tǒng)層虛擬化(像OpenVZ,Linux-VServer,LXC)。cgroups提供:

4.KVM CPU虛擬化

KVM是基于CPU輔助的全虛擬化方案,它需要CPU虛擬化特性的支持。

4.1 CPU物理特性

使用numactl命令查看主機(jī)上的CPU物理情況:

[root@clsn.io /root]# numactl --hardwareavailable: 1 nodes (0)node 0 cpus: 0 1 2 3 4 5 12 13 14 15 16 17node 0 size: 12276 MBnode 0 free: 7060 MBnode distances:node 0 0: 10 21 要支持KVM, Intel CPU的vmx 或者AMD CPU的svm擴(kuò)展必須生效了:

[root@clsn.io /root]# egrep "(vmx|svm)" /proc/cpuinfoflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm arat epb dts tpr_shadow vnmi flexpriority ept vpid

4.2 多CPU服務(wù)器架構(gòu):SMP,NMP,NUMA

從系統(tǒng)架構(gòu)來看,目前的商用服務(wù)器大體可以分為三類:

[root@clsn.io /root]#uname -aLinux clsn.io 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux注:本機(jī)器為SMP架構(gòu)

5.KVM 虛機(jī)的創(chuàng)建過程

5.1 KVM啟動(dòng)環(huán)境概述

支持虛擬化的CPU中都增加了新的功能。以Intel VT技術(shù)為例,它增加了兩種運(yùn)行模式:VMX root模式和VMX nonroot模式。通常來講,主機(jī)操作系統(tǒng)和VMM運(yùn)行在VMX root模式中,客戶機(jī)操作系統(tǒng)及其應(yīng)用運(yùn)行在 VMX nonroot模式中。因?yàn)閮蓚€(gè)模式都支持所有的ring,因此,客戶機(jī)可以運(yùn)行在它所需要的ring中(OS 運(yùn)行在 ring 0 中,應(yīng)用運(yùn)行在ring 3 中),VMM也運(yùn)行在其需要的ring中 (對(duì)KVM來說,QEMU運(yùn)行在ring 3,KVM運(yùn)行在ring 0)。
CPU在兩種模式之間的切換稱為 VMX 切換。從 root mode 進(jìn)入nonroot mode,稱為VM entry;從nonroot mode進(jìn)入root mode,稱為VM exit??梢?,CPU受控制地在兩種模式之間切換,輪流執(zhí)行VMM代碼和Guest OS代碼。
對(duì)KVM虛機(jī)來說,運(yùn)行在VMX Root Mode下的VMM在需要執(zhí)行Guest OS指令時(shí)執(zhí)行VMLAUNCH指令將CPU 轉(zhuǎn)換到VMX non-root mode,開始執(zhí)行客戶機(jī)代碼,即VM entry過程;在Guest OS需要退出該mode時(shí),CPU 自動(dòng)切換到VMX Root mode,即VM exit過程??梢?,KVM客戶機(jī)代碼是受VMM控制直接運(yùn)行在物理CPU上的。QEMU只是通過KVM控制虛機(jī)的代碼被CPU執(zhí)行,但是它們本身并不執(zhí)行其代碼。也就是說,CPU并沒有真正的被虛級(jí)化成虛擬的CPU給客戶機(jī)使用。

由上可見 :

  1. qemu-kvm通過對(duì) /dev/kvm 的 一系列 ICOTL 命令控制虛機(jī)
  2. 一個(gè)KVM虛機(jī)即一個(gè)Linux qemu-kvm進(jìn)程,與其他Linux進(jìn)程一樣被Linux進(jìn)程調(diào)度器調(diào)度。
  3. KVM 虛機(jī)包括虛擬內(nèi)存、虛擬CPU和虛機(jī)I/O設(shè)備,其中,內(nèi)存和CPU的虛擬化由KVM內(nèi)核模塊負(fù)責(zé)實(shí)現(xiàn),I/O設(shè)備的虛擬化由QEMU負(fù)責(zé)實(shí)現(xiàn)。
  4. KVM戶機(jī)系統(tǒng)的內(nèi)存是qemu-kvm進(jìn)程的地址空間的一部分。
  5. KVM 虛機(jī)的vCPU作為 線程運(yùn)行在qemu-kvm進(jìn)程的上下文中。

6.VM中代碼是如何運(yùn)行

一個(gè)普通的Linux內(nèi)核有兩種執(zhí)行模式:內(nèi)核模式(Kenerl)和用戶模式 (User)。
為了支持帶有虛擬化功能的CPU,KVM向Linux內(nèi)核增加了第三種模式即客戶機(jī)模式(Guest),該模式對(duì)應(yīng)于 CPU的VMX non-root mode。

6.1 KVM kernel mode

KVM內(nèi)核模塊作為User mode和Guest mode之間的橋梁:

6.2 KVM processing

QEMU-KVM相比原生QEMU的改動(dòng):

7.宿主機(jī)CPU結(jié)構(gòu)和模型

KVM支持SMP和NUMA多CPU架構(gòu)的主機(jī)和客戶機(jī)。對(duì)SMP類型的客戶機(jī),使用 “-smp”參數(shù):

kvm -smp <n>[,cores=<ncores>][,threads=<nthreads>][,sockets=<nsocks>][,maxcpus=<maxcpus>]對(duì)NUMA類型的客戶機(jī),使用 “-numa”參數(shù):

kvm -numa <nodes>[,mem=<size>][,cpus=<cpu[-cpu>]][,nodeid=<node>]CPU模型 (models)定義了哪些主機(jī)的CPU 功能 (features)會(huì)被暴露給客戶機(jī)操作系統(tǒng)。為了在具有不同CPU功能的主機(jī)之間做安全的遷移,qemu-kvm往往不會(huì)將主機(jī)CPU的所有功能都暴露給客戶機(jī)。其原理如下:

你可以運(yùn)行qemu-kvm -cpu ?命令來獲取主機(jī)所支持的CPU模型列表。

[root@clsn.io /root]#kvm -cpu ?x86 Opteron_G5 AMD Opteron 63xx class CPU x86 Opteron_G4 AMD Opteron 62xx class CPU x86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron) x86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron) x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron) x86 Haswell Intel Core Processor (Haswell) x86 SandyBridge Intel Xeon E312xx (Sandy Bridge) x86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C) x86 Nehalem Intel Core i7 9xx (Nehalem Class Core i7) x86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2) x86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2) x86 cpu64-rhel5 QEMU Virtual CPU version (cpu64-rhel5) x86 cpu64-rhel6 QEMU Virtual CPU version (cpu64-rhel6) x86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHz x86 athlon QEMU Virtual CPU version 0.12.1 x86 pentium3 x86 pentium2 x86 pentium x86 486 x86 coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz x86 qemu32 QEMU Virtual CPU version 0.12.1 x86 kvm64 Common KVM processor x86 core2duo Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz x86 phenom AMD Phenom(tm) 9550 Quad-Core Processor x86 qemu64 QEMU Virtual CPU version 0.12.1 Recognized CPUID flags: f_edx: pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu f_ecx: hypervisor rdrand f16c avx osxsave xsave aes tsc-deadline popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pcid pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmulqdq|pclmuldq pni|sse3 extf_edx: 3dnow 3dnowext lm|i64 rdtscp pdpe1gb fxsr_opt|ffxsr fxsr mmx mmxext nx|xd pse36 pat cmov mca pge mtrr syscall apic cx8 mce pae msr tsc pse de vme fpu extf_ecx: perfctr_nb perfctr_core topoext tbm nodeid_msr tce fma4 lwp wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm每個(gè)Hypervisor都有自己的策略,來定義默認(rèn)上哪些CPU功能會(huì)被暴露給客戶機(jī)。至于哪些功能會(huì)被暴露給客戶機(jī)系統(tǒng),取決于客戶機(jī)的配置。qemu32和qemu64是基本的客戶機(jī)CPU模型,但是還有其他的模型可以使用。你可以使用qemu-kvm命令的-cpu參數(shù)來指定客戶機(jī)的CPU模型,還可以附加指定的CPU特性。"-cpu" 會(huì)將該指定CPU模型的所有功能全部暴露給客戶機(jī),即使某些特性在主機(jī)的物理CPU上不支持,這時(shí)候QEMU/KVM會(huì)模擬這些特性,因此,這時(shí)候也許會(huì)出現(xiàn)一定的性能下降。

RedHat Linux 6上使用默認(rèn)的cpu64-rhe16作為客戶機(jī)CPU model,可以指定特定的CPU model和feature:

[root@clsn.io /root]#qemu-kvm -cpu Nehalem,+aes

8.vCPU數(shù)目的分配方法

不是客戶機(jī)的vCPU越多,其性能就越好,因?yàn)榫€程切換會(huì)耗費(fèi)大量的時(shí)間;應(yīng)該根據(jù)負(fù)載需要分配最少的vCPU。
主機(jī)上的客戶機(jī)的vCPU總數(shù)不應(yīng)該超過物理CPU內(nèi)核總數(shù)。不超過的話,就不存在CPU競(jìng)爭(zhēng),每個(gè)vCPU線程在一個(gè)物理CPU核上被執(zhí)行;超過的話,會(huì)出現(xiàn)部分線程等待CPU以及一個(gè)CPU核上的線程之間的切換,這會(huì)有 overhead。
將負(fù)載分為計(jì)算負(fù)載和I/O負(fù)載,對(duì)計(jì)算負(fù)載,需要分配較多的vCPU,甚至考慮CPU親和性,將指定的物理CPU 核分給給這些客戶機(jī)。

8.1確定vCPU數(shù)目的步驟

假如我們要?jiǎng)?chuàng)建一個(gè)VM,以下幾步可以幫助確定合適的vCPU數(shù)目

(1)了解應(yīng)用并設(shè)置初始值

該應(yīng)用是否是關(guān)鍵應(yīng)用,是否有Service Level Agreement。一定要對(duì)運(yùn)行在虛擬機(jī)上的應(yīng)用是否支持多線程深入了解。咨詢應(yīng)用的提供商是否支持多線程和SMP(Symmetricmulti-processing)。參考該應(yīng)用在物理服務(wù)器上運(yùn)行時(shí)所需要的CPU個(gè)數(shù)。如果沒有參照信息,可設(shè)置1vCPU作為初始值,然后密切觀測(cè)資源使用情況。
(2)觀測(cè)資源使用情況
確定一個(gè)時(shí)間段,觀測(cè)該虛擬機(jī)的資源使用情況。時(shí)間段取決于應(yīng)用的特點(diǎn)和要求,可以是數(shù)天,甚至數(shù)周。不僅觀測(cè)該VM的CPU使用率,而且觀測(cè)在操作系統(tǒng)內(nèi)該應(yīng)用對(duì)CPU的占用率。
特別要區(qū)分CPU使用率平均值和CPU使用率峰值。
假如分配有4個(gè)vCPU,如果在該VM上的應(yīng)用的CPU使用峰值等于25%, 也就是僅僅能最多使用25%的全部CPU資源,說明該應(yīng)用是單線程的,僅能夠使用一個(gè)vCPU (4 * 25% = 1 )
平均值小于38%,而峰值小于45%,考慮減少 vCPU 數(shù)目
平均值大于75%,而峰值大于90%,考慮增加 vCPU 數(shù)目
(3)更改vCPU數(shù)目并觀測(cè)結(jié)果
每次的改動(dòng)盡量少,如果可能需要4vCPU,先設(shè)置2vCPU在觀測(cè)性能是否可以接受。
原文鏈接:http://clsn.io



關(guān)鍵詞:虛擬

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉