第一章 什么是綁核
線程綁核是指將線程綁定到特定的CPU核心上執(zhí)行胧谈,而不允許線程在不同核心之間切換執(zhí)行忆肾。這種操作可以有效地減少操作系統(tǒng)的上下文切換和負載均衡的開銷,從而提高程序的執(zhí)行效率菱肖。沒有綁核的線程則可以在多個CPU核心上隨意切換執(zhí)行客冈。這雖然可以讓操作系統(tǒng)更加靈活地分配CPU資源,并提高系統(tǒng)的負載均衡性稳强,但也會增加上下文切換的開銷和CPU緩存的失效率场仲。因此和悦,線程綁核和沒有綁核的區(qū)別主要在于執(zhí)行效率和系統(tǒng)負載均衡的優(yōu)化。需要根據(jù)具體的應(yīng)用場景進行選擇渠缕。
第二章 虛擬機綁核類型
2.1 不綁核
不綁核的情況下鸽素,虛擬機的線程在當前CPU資源池中按需分配CPU資源。此時一個虛擬機的線程亦鳞,一方面要進入線程隊列中等待分配時間片馍忽,而該線程隊列中不僅有自身虛擬機的線程,還有其他虛擬機的線程燕差,因此存在資源競爭遭笋。另一方面操作系統(tǒng)還要決策將該任務(wù)調(diào)度分配到哪個物理CPU上運行,然后要將線程的上下文切換到該CPU核中徒探,存在切換的時間瓦呼。但是由于這種分配方式較為靈活,不會預(yù)留CPU而浪費資源测暗,因此對于CPU資源要求和處理延遲要求不高的場景使用央串。
2.2 綁核
綁核又分為三個方式,分別是綁核不獨占線程綁核且獨占核和綁核且獨CPU偷溺。
2.2.1 綁核不獨占
幾乎不使用蹋辅。相比于不綁核的情況只是將從CPU池中獲取CPU資源變成了從指定的CPU核中獲取CPU資源。此時挫掏,虛擬機的線程同樣需要進入線程隊列中等待分配時間片侦另,線程隊列中也同樣可能存在其他虛擬機的線程,只是分配到的CPU核是固定的尉共,減少了線程在不同的CPU核進行上下文切換的時間褒傅。雖然也存在和其他虛擬機的資源競爭,但是如果該CPU核上其他虛擬機的線程少袄友,那么資源競爭就沒有不綁核那么劇烈殿托。由于這種情況對于處理延遲的提升不明顯。
2.2.2 綁核且獨占核
虛擬機綁核且獨占核是指將一個或多個物理核心分配給一個虛擬機剧蚣,并保證虛擬機是唯一能夠使用這些核心的支竹。這意味著在虛擬機運行期間,這些核心不會被分配給其他虛擬機或主機進程使用鸠按。這種方式通常是最常用的礼搁,即將虛擬機cpu與物理機cpu核進行綁定。綁核且獨占核通衬考猓可以使用以下命令查看:
virsh vcpuinfo <id>
VCPU: 0
CPU: 3
State: running
CPU time: 198781.4s
CPU Affinity: 0x8
VCPU: 1
CPU: 2
State: running
CPU time: 198781.3s
CPU Affinity: 0x4
- VCPU編號:表示虛擬機中的第幾個虛擬CPU馒吴,從0開始。
- CPU編號:表示虛擬CPU當前綁定的物理CPU編號。
- 狀態(tài):表示虛擬CPU的運行狀態(tài)饮戳,包括running(運行中)
blocked
(阻塞中)等豪治。 - CPU時間:表示虛擬CPU從啟動到現(xiàn)在運行的總時間。
-
CPU Affinity
:表示虛擬CPU綁定的物理CPU核心扯罐,以16進制的形式表示负拟。
如果是非綁核的虛擬機,則輸出以下內(nèi)容
VCPU: 0
CPU: -1
State: running
CPU time: 28.2s
CPU Affinity: 0x0
或者使用vcpupin
來確認歹河,以下這種輸出就是綁核虛擬機齿椅。
[root@kvm-host ~]# virsh vcpupin vm1
VCPU: CPU Affinity
------------------------------------
0: 0-3
1: 0-3
2: 0-3
3: 0-3
還可以通過查看xml文件來確認虛擬機是否綁核
<domain type='kvm'>
<name>examplevm</name>
<vcpu placement='static'>2</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='1'/>
<vcpupin vcpu='1' cpuset='2'/>
</cputune>
...
</domain>
<vcpu>
標簽定義了虛擬機的虛擬CPU數(shù)量,這里設(shè)置為2启泣。<cputune>
標簽下面的兩個<vcpupin>
標簽定義了虛擬機中的兩個vCPU分別綁定在哪個CPU核心上勾拉,這里分別綁定在核心1和核心2上纬黎。
2.2.3 綁核且獨CPU
綁核且獨占 CPU 是指將整個物理 CPU 分配給一個虛擬機,并保證該虛擬機是唯一能夠使用該 CPU 的边锁。這意味著在虛擬機運行期間矾麻,該 CPU 不會被分配給其他虛擬機或主機進程使用纱耻。因此,兩者的區(qū)別在于資源分配的粒度不同险耀。虛擬機綁核且獨占核是將核心級別的資源分配給虛擬機弄喘,而綁核且獨占 CPU 則是將整個 CPU 分配給虛擬機。這意味著在綁定和獨占 CPU 的情況下甩牺,虛擬機將獲得更多的計算資源蘑志,但是這也意味著在虛擬機未使用 CPU 時,該 CPU 不能用于主機上的其他進程贬派。在綁定和獨占核的情況下急但,虛擬機只獲得了核心級別的資源,因此搞乏,即使虛擬機未使用該核心時波桩,該核心也可以用于主機上的其他進程。
第三章 如何創(chuàng)建綁核虛擬機
3.1 FS創(chuàng)建綁核虛擬機
在FuionSphere OpenStack中请敦,創(chuàng)建規(guī)格時可以設(shè)置綁核镐躲。在該解決方案中,綁核虛擬機核非綁核虛擬機不能共numa部署侍筛,即某個numa部署了綁核虛擬機萤皂,再創(chuàng)建非綁核虛擬機就會失敗。
3.2 kvm創(chuàng)建綁核虛擬機
1勾笆、使用virt-install命令創(chuàng)建虛擬機時敌蚜,可以使用--vcpus
和--cpu-set
選項來指定虛擬機的CPU數(shù)量和綁定。例如:
virt-install --name vm_name --vcpus 2 --cpu host-passthrough --cpu-set 0,1 ...
其中窝爪,vm_name是虛擬機的名稱弛车,2是虛擬機的CPU數(shù)量齐媒,--cpu host-passthrough指定使用宿主機的CPU特性,--cpu-set 0,1指定將虛擬機綁定到CPU核心0和1上纷跛。
或者喻括,您可以在創(chuàng)建虛擬機時在XML配置文件中指定CPU綁定。在<vcpu>
標簽下添加以下行:
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
</cputune>
其中贫奠,vcpu指定虛擬CPU的編號唬血,cpuset指定要綁定的CPU核心。
如果我的文章對你有幫助唤崭,歡迎關(guān)注我的同名公眾號~
本文使用 文章同步助手 同步