腳本32k
編寫腳本fio.sh,內容:
#/bin/sh
fio -filename=/dev/sdl -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=8k -size=200G -numjobs=30 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=32k -size=200G -numjobs=30 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=32k -size=200G -numjobs=1 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=32k -size=200G -numjobs=1 -runtime=60 -group_reporting -name=mytest
執行腳本:
bash ./fio.sh >
fio.log 2>&1
② 將進程綁定到指定的CPU上
背景:為什麼要進程綁定到指定的CPU上?
1) 減少CPU切換開銷
CPU固定綁定到主機的指定CPU上,在整個運行期間,不會發生CPU浮動, 減少CPU切換開銷 ,提高虛擬機的計算性能。
2) 提供CPU cache的命中率
在多核運行的機器上,每個CPU自身會有緩存,緩存著進程使用的信息,而進程可能會被OS調度到其他CPU上,如此, CPU cache命中率 就低了,當綁定CPU後,程序就會一直在指定的cpu跑,不會由操作系統調度到其他CPU上,性能有一定的提高。
taskset:設置或檢索進程的CPU相關性
1) 如果沒有taskset命令, 安裝 包含taskset命令的util-linux工具集:yum install util-linux
2) 查看進程的CPU親和力 ,-p選項是一個十六進制數,-cp選項是一個cpu列表,表示相應的cpu核。3的二進制形式是0011,相應的第0位和第1位都是1,表示14795進程只能運行在cpu的第0個核和第1個核。
$ taskset -p 14795
pid 14795's current affinity mask: 3
$ taskset -cp 14795
pid 14795's current affinity list: 0,1
3) 綁定CPU : taskset -cp <CPU IDs> <Process ID>
$ taskset -cp 0 14795
pid 14795's current affinity list: 0,1
pid 14795's new affinity list: 0
OpenStack K版本引入了許多CPU高級特性功能,不僅支持自定義CPU拓撲功能,支持設置虛擬機CPU的socket、core、threads等,還支持CPU pinning功能,即CPU核綁定,甚至能夠配置虛擬機獨占物理CPU,虛擬機的vCPU能夠固定綁定到物理宿主機的指定pCPU上,在整個運行期間,不會發生CPU浮動,減少CPU切換開銷,提高虛擬機的計算性能。
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
Stepping: 2
CPU MHz: 1201.480
BogoMIPS: 4603.87
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
以上可知,該宿主機有兩個CPU(socket),每個CPU 10核(core),每個核可以開啟兩個 超線程(thread) ,即有40個邏輯CPU。宿主機CPU包含兩個NUMA node,其中node0包括0,2,4,...,38,node1包括1,3,5,...,39。
步驟1) 創建支持綁核的主機集合
不是所有的計算節點都支持CPU綁核特性,可以通過主機集合(host aggregate)把支持綁核CPU的主機放到一個集合中。
步驟2) 創建支持綁核的flavor
目前Nova並不支持啟動時直接指定主機集合的metadata(hint只支持指定server group),需要通過flavor的擴展屬性和主機集合的metadata匹配,將不匹配的主機濾掉,部署到匹配的主機上。flavor支持配置虛擬機的CPU拓撲、QoS、CPU pinning策略、NUMA拓撲以及PCI passthrough等擴展屬性。
步驟3) 通過步驟2) 的Flavor創建虛擬機,創建完成到虛機所在物理機上查看虛機綁核情況:
查詢方法1) virsh mpxml 虛機id
<vcpu placement='static'>8</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='25'/>
<vcpupin vcpu='1' cpuset='5'/>
<vcpupin vcpu='2' cpuset='8'/>
<vcpupin vcpu='3' cpuset='28'/>
<vcpupin vcpu='4' cpuset='9'/>
<vcpupin vcpu='5' cpuset='29'/>
<vcpupin vcpu='6' cpuset='24'/>
<vcpupin vcpu='7' cpuset='4'/>
<emulatorpin cpuset='4-5,8-9,24-25,28-29'/>
</cputune>
查詢方法2) 在虛擬機所運行的物理宿主機上執行virsh list找到相應虛機的實例id,然後virsh vcpupin 實例id可以查到該虛擬機所佔用的CPU具體核數。
# virsh vcpupin vm46 綁核的虛機
VCPU: CPU Affinity
----------------------------------
0: 25
1: 5
2: 8
3: 28
4: 9
5: 29
6: 24
7: 4
# virsh vcpupin vm6 未綁核的虛機
VCPU: CPU Affinity
----------------------------------
0: 0-39
1: 0-39
2: 0-39
3: 0-39
4: 0-39
5: 0-39
6: 0-39
7: 0-39
virsh vcpupin 子命令是KVM自帶的指令工具,它可以把vm實例的每個vcpu與宿主機的cpu對應綁定,這種綁定方式粒度更小。
# virsh vcpupin vm4 查看綁定情況
VCPU: CPU Affinity
----------------------------------
0: 0-23
1: 0-23
#默認2個vcpu沒有進行綁定,可以在0-23號cpu上切換
# virsh vcpuinfo vm4 查看CPU使用時長
VCPU: 0
CPU: 10 #運行在10號cpu上
State: running
CPU time: 14.2s
CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyy
VCPU: 1
CPU: 8 #運行在8號cpu上
State: running
CPU time: 6.8s
CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyy
# virsh vcpupin vm4 0 3 綁定虛機的第1個CPU到宿主機的第4號cpu上
# virsh vcpupin vm4 1 5 綁定虛機的第2個CPU到宿主機的第6號cpu上
# virsh vcpuinfo vm4
VCPU: 0
CPU: 3
State: running
CPU time: 14.5s
CPU Affinity: ---y--------------------
VCPU: 1
CPU: 5
State: running
CPU time: 7.3s
CPU Affinity: -----y------------------
# virsh vcpupin vm4
VCPU: CPU Affinity
----------------------------------
0: 3
1: 5
三種方法的相同點:都能實現綁核效果
優劣勢對比:openstack支持虛機重生虛擬遷移到其他物理主機上,第1種方法在這些操作後綁核還是有效的,但2和3就不會綁核的。此外,第1種方法是自動的,2和3是手動的,可以作為臨時補救方法。
在虛擬機上執行高密度計算,測試的python腳本如下:
# test_compute.py
k = 0
for i in xrange(1, 100000):
for j in xrange(1, 100000):
k = k + i * j
使用shell腳本同時跑50個進程,保證CPU滿載運行:
for i in `seq 1 50`; do
python test_compute.py &
done
使用sar命令查看宿主機CPU使用情況:
sar -P ALL 1 100
結果如下:
Linux 3.10.0-229.20.1.el7.x86_64 (8409a4dcbe1d11af) 05/10/2018 _x86_64_ (40 CPU)
10:20:14 PM CPU %user %nice %system %iowait %steal %idle
10:20:15 PM all 20.48 0.00 0.15 0.03 0.00 79.34
10:20:15 PM 0 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 1 0.99 0.00 0.00 0.00 0.00 99.01
10:20:15 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 3 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 4 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 5 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 6 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 7 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 8 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 9 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 10 1.01 0.00 0.00 0.00 0.00 98.99
10:20:15 PM 11 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 12 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 13 0.00 0.00 0.99 0.00 0.00 99.01
10:20:15 PM 14 0.99 0.00 0.99 0.00 0.00 98.02
10:20:15 PM 15 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 16 0.99 0.00 0.99 0.00 0.00 98.02
10:20:15 PM 17 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 18 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 19 3.96 0.00 0.99 0.00 0.00 95.05
10:20:15 PM 20 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 21 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 22 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 23 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 24 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 25 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 26 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 27 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 28 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 29 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 30 2.00 0.00 0.00 0.00 0.00 98.00
10:20:15 PM 31 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 32 2.97 0.00 0.99 0.00 0.00 96.04
10:20:15 PM 33 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 34 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 35 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 36 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 37 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 38 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 39 0.00 0.00 0.00 0.00 0.00 100.00
從CPU使用情況看宿主機的pCPU 4-5,8-9,24-25,28-29使用率100%,並且整個過程中沒有浮動,符合我們的預期結果,說明CPU核綁定成功。
③ 泰劇宮百度雲盤
4cye