侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 212 篇文章
  • 累计创建 81 个标签
  • 累计收到 160 条评论

KVM - CPU、内存虚拟化技术与应用 - 4

汪洋
2021-07-18 / 0 评论 / 0 点赞 / 443 阅读 / 1,983 字

一、多 CPU 技术结构

1、SMP 技术

早期的时候,每台服务器都是单 CPU,随着技术的发展,出现了多 CPU 共同工作的需求,最早的多 CPU 技术是 SMP

SMP 即多个 CPU 通过一个总线访问存储器,因此 SMP 系统有时也被称为一致内存访问结构体系。一致性意指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值

SMP 的缺点是扩展性有限,因为在存储器接口达到饱和的时候,增加处理器并不能获得更高的性能,因此 SMP 方式支持的 CPU 个数有限

2、MPP 模式

MPP 模式则是一种分布式存储器模式,能够将更多的处理器纳入一个系统的存储器。一个分布式存储器模式具有多个节点,每个节点都有自己的存储器。可以配置为 SMP 模式,也可以配置为非 SMP 模式。单个节点相互连接起来就形成了一个总系统。MPP 可以理解为 SMP 的横向扩展集群,MPP 一般要依靠软件实现

3、NUMA 技术

NUMA 模式则是每个处理器都有自己的存储器,每个处理器也可以访问到别的处理器的存储器

二、KVM 虚拟机 NUMA 调优

1、宿主机的 NUMA 信息查看与配置

因为 NUMA 架构每个处理器都可以访问自己和别的处理器的存储器,访问自己的存储器会比访问别人的存储器快很多,速度相差 10 - 100 倍,所以 NUMA 调优的目标就是让处理器尽量访问自己的存储器,以提高处理速度

# numa 可以查看当前 CPU 硬件的情况
[root@node01 ~]# yum -y install numactl
[root@node01 ~]# numactl --hardware
# numastat 命令可以查看每个节点的内存统计
[root@node01 ~]# numastat 
                           node0
numa_hit                 3014342		# 使用本节点内存的次数
numa_miss                      0	  # 技术使用本节点内存而被调度到其他节点次数
numa_foreign                   0	  # 技术使用其他节点内存而使用本地内存次数
interleave_hit             21444	  # 交叉分配使用的内存中使用本节点内存次数
local_node               3014342	  # 在本节点运行的程序使用本节点内存次数
other_node                     0	  # 在其他节点运行的程序使用本节点内存次数
# -c 查看相关进程的 NUMA 内存的情况
[root@node01 ~]# numastat  -c qemu-kvm
Found no processes containing pattern: "qemu-kvm"

Per-node numastat info (in MBs):
                Node 0 Total
                ------ -----
Numa_Hit         12192 12192
Numa_Miss            0     0
Numa_Foreign         0     0
Interleave_Hit      84    84
Local_Node       12192 12192
Other_Node           0     0
# Linux 系统默认是自动 NUMA 平衡策略。如果要关闭 Linux 系统的自动平衡
[root@node01 ~]# echo 0 > /proc/sys/kernel/numa_balancing

# 如果要开启自动 NUMA 平衡策略,可以使用如下命令
[root@node01 ~]# echo 1 > /proc/sys/kernel/numa_balancing

2、虚拟机 NUMA 信息查看与配置

# 查看虚拟机的 numa 配置
[root@node01 ~]# virsh
	numatune ID

NUMA 工作方式可以是 strict 指定 CPU,或者 auto 使用系统的 numad 服务

<numatune>
  <memory mode='strict' placement='auto'/>
</numatune>
<numatune>
  <memory mode='strict' nodeset='0,2-3'/>
</numatune>
# 可以使用 numatune 命令配置虚拟机的 NUMA
$ virsh numatune rhel7 --nodeset '0, 2-3'
<vcpu placement='auto'>8</vcpu>
<vcpu placement='static' cpuset='0-10, ^5'>8</vcpu>

三、CPU 绑定

CPU 绑定是一项非常神奇的技术,最神奇的地方就是可以在线配置,并且立即生效,可以解决生产环境 CPU 利用率严重不平均的问题

1、CPU 信息查看

# 查看虚拟机 VCPU 和 物理 CPU 的对应关系
$ virsh vcpuinfo VMID

# 使用 emulatorpin 命令可以查看虚拟机可以使用哪些物理逻辑 CPU
$ virsh # emulatorprin 21
0

评论区