虚拟化,简单来说就是把一台服务器/PC电脑,虚拟成多台独立的虚拟机,每台虚拟机之间相互隔离,每个虚拟机都有自己独立的操作系统,磁盘,网络资源。虚拟化是一个很庞大的系统,我的介绍主要是帮助你入门,让你了解基本技术原理,具备搭建操作虚拟化的能力。
在讲绑核之前,我们先来做一个小实验。
#!/bin/bash
# 定义要占用的CPU核心数
CORES=4
# 创建死循环函数
function cpu_eater() {
while true; do
: # 冒号表示空命令,相当于什么也不做
done
}
# 启动多个死循环进程
for ((i=0; i<CORES; i++)); do
cpu_eater &
done
# 等待所有后台任务完成
wait
2.观察脚本cpu占用情况
3.观察整个cpu的情况
我们从上面的图可以看到,这个shell进程使用了4个cpu的全部资源,从下面的图中可以看到,它实际使用的cpu编号是0,2,10,15。我们在讲Linux进阶命令-top有提到过这个sy的占用率应该很低才对,目前占用已经达到20%以上,前面的us部分才是进程真正干活的使用的cpu,也就是显示是100%,实际只有不到80%的cpu在干活。
4.再准备另外一个脚本
#!/bin/bash
# 定义要占用的CPU核心数
CORES=(0 1 2 3)
# 创建死循环函数
cpu_eater() {
while true; do
: # 冒号表示空命令,相当于什么也不做
done
}
# 导出函数,使其在子进程中可见
export -f cpu_eater
# 启动多个死循环进程并绑定到特定的CPU核心
for i in "${CORES[@]}"; do
taskset -c $i bash -c "cpu_eater" &
done
# 等待所有后台任务完成
wait
脚本的内容同样都是while死循环,但是它这里的cpu资源全部给了us也就是程序在使用,性能会比前面一个高20%。
# 未绑定核心的配置
<vcpu placement='auto'>4</vcpu>
# 使用了静态分配,但是未指定具体的cpu
<vcpu placement='static'>4</vcpu>
#以上两种实际上并没有本质的区别。
这个时候,如果没有争抢的情况下,这个虚拟机还是可以用满4个cpu,但是偶尔还是会有切换。
#通过这命令可以看到cpu使用绑定情况是hui变化的
virsh vcpuinfo xxx |grep -i "VCPU: " -A 1 |grep -v VC |grep -v "\-\-"
如果要完全没有争抢,可以按照下面这两种方式进行绑定。这里的vcpu是指出虚拟机里面的cpu和物理cpu的绑定。
#绑定核心的配置
<vcpu placement='static' cpuset='0,1,2,3'>4</vcpu>
#另外一种更细节的绑定关系
<vcpu placement='static'>4</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
</cputune>