OpenStack是 一个IAAS(基础设施即服务)因此免不了会与硬件打交道。下面我介绍下与CPU强关联的一些知识点。1 什么是超配 2 CPU的个数是怎么统计的 3 vCPU的隔离、绑定

1、超配

在kvm虚拟化的环境中,一个vCPU本质上是一个kvm的一个线程,如果一台虚拟机有4个vCPU,对应的就是4个线程。

  • 1.1 假设VM1 有两个2vCPU, VM2 也有两个vCPU,而物理机上总共只有2个CPU,则这4个线程是在两个物理CPU上调度的。这也就说明即虚机的 VCPU 总数可以超过物理 CPU 数量,这个叫CPU overcommit(超配); KVM 允许 overcommit,这个特性使得虚机能够充分利用宿主机的 CPU 资源但前提是在同一时刻,不是所有的虚机都满负荷运行。

  • 1.2 在实际的生产中经验,在x86架构中我们建议的通用型配置是1:3的超配比,而在ARM架构中该比例为1:2。(:该配置仅仅为建议配置,实际生产中要根据自己的业务和CPU的型号不同,在充分测试下才能给出合理的超分比例。)

  • 1.3 那在OpenStack的环境中我们如何查看和设置超配比例?

    配置文件的方式

cpu_allocation_ratio=3    #cpu 超分比
disk_allocation_ratio=1.0 #磁盘 超分比
ram_allocation_ratio=1.0 #内存 超分比

命令行方式

查看计算节点id

nova hypervisor-list

设置 cpu 超分比2.0

nova hypervisor-set-ratio --cpu 2.0 a1266c51-e693-4bf9-84dc-37b3d15322e7

查看 超分比

2、CPU统计

物理机CPU的统计用一个简单的公式就能算出每台物理机拥有的CPU总数。

系统可用的CPU总数(逻辑处理器) = Socket数(CPU个数)x Core数(内核)x Thread数(超线程)

Socket数 :就是我们常说的几路CPU ,如两路CPU 就会有两个Socket

Core数 : 物理核心的数量。

Thread数 :系统层上的多线程技术。超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。

总的来说就是一台物理机上有N路CPU ,而每个CPU有M个核心数,每个核心上还可以支持超线程。

下面我们用实际生产中CPU来举例

X86

ARM

3、CPU独占、绑定

3.1 CPU隔离实战

为什么我们需要CPU独占?

1、在公有云中我们在购买云主机时,会发现云主机有如下两类,一类是共享型云主机,一类是独享型云主机,这两种云主机有什么区别了?



其实他们的本质区别就是线程占用CPU是否是独占的,前面我们说过,KVM虚拟化环境中每一个vCPU在物理机上都只是一个线程,如果他对物理CPU是独占的就是独享型云主机,独享型不会出现资源争夺线现象,计算性能更加稳定。

共享型云主机,每个vCPU会被随机分配到任何空闲CPU超线程上,不同实例vCPU会争抢物理CPU资源。

这样我们提一个有争议的话题,那独享型云主机的VCPU的个数是否和物理机的CPU数是1 : 1 的关系了?

2、在超融合环境中(OpenStack的管理节点和计算节点和网络节点都在同一台物理机上)如何将租户使用的CPU和管理侧的CPU进行隔离?

3、DPDK是一种用户空间的网络框架,旨在通过绕过操作系统内核的网络栈,直接访问网络设备,从而提高网络处理性能。通过将特定的CPU核心隔离出来并专门用于运行DPDK应用程序,可以避免其他进程或内核线程对这些CPU核心的竞争,减少上下文切换和干扰,从而提高DPDK应用程序的性能。

上述环境中都免不了要使用CPU独占技术,在KVM虚拟机的环境中,在Linux内核启动的命令行中加上“isolcpus=参数,可以实现CPU的隔离,使得在系统启动后普通进程默认都不会被调度到被隔离的CPU上执行。

(*注意上述方式的隔离仅针对用户空间隔离,内核空间是无法隔离的。)

例如,隔离cpu6和cpu7的内核启动命令行如下:

vi /etc/sysconfig/grub

GRUB_CMDLINE_LINUX="spectre_v2=retpoline rhgb quiet net.ifnames=0 biosdevname=0 intel_iommu=on isolcpus=6,7"

grub2-mkconfig  -o /boot/grub2/grub.cfg

#LEGACY启动模式的文件是这个,/boot/grub2/grub.cfg
#UEFI启动模式的文件是这个,/boot/efi/EFI/centos/grub.cfg

接下来系统重启reboot后我们来验证下是否生效

cat /proc/cmdline

  • vcpu亲和性的绑定

CPU的亲和性也就是cpu affinity机制,指的是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器, 通过处理器关联可以将虚拟处理器映射到一个物理处理器上 ,也就是说把一个程序绑定到一个物理CPU上。

在大部分文章中都使用taskset 来绑定指定的线程号在指定的CPU编号上。但是这种方式存在问题,虚拟机是需要关机和迁移的需求的,每次重启后,线程的编号会变化,还需要一个单独的程序来进行重新绑定。

这里我们使用virsh 的亲和性命令来绑定VCPU和物理CPU的关系。

virsh vcpupint ${vm_name} 将虚拟机的vCPU绑定到特定的物理CPU上

virsh emulatorpin ${vm_name} 用于将虚拟机的emulator进程(即QEMU进程)绑定到特定的物理CPU上。

virsh vcpupin test 0 7
#将名为test的虚拟机vcpu 0 绑定在物理机CPU 7 上
#virsh vcpuinfo 来检查 [root@192-168-48-11 ~]# virsh vcpuinfo test
VCPU: 0
CPU: 7
State: running
CPU time: 35.2s
CPU Affinity: -------y virsh emulatorpin test 7
#将虚拟机test qemu进程绑定物理CPU 7上。

实验:

在环境中,我隔离出6-7号物理cpu编号,分别绑定 test虚拟机的 0,1 cpu 上,



下面我们用htop命令来进行验证

test运行在CPU 8和7上,(此时的显示的CPU 是从1开始,则对应6,7号cpu)

下一期我们将开始介绍存储和网络组件的虚拟化。



每天5分钟复习OpenStack(六)CPU虚拟化<2>的更多相关文章

  1. 第六讲:CPU虚拟化

    虚拟化技术的分类主要有服务器虚拟化.存储虚拟化.网络虚拟化.应用虚拟化. 服务器虚拟化技术按照虚拟对象来分,可分为:CPU虚拟化.内存虚拟化.I/O虚拟化: 按照虚拟化程度可分为:全虚拟化.半虚拟化. ...

  2. VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management

    VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management 实验失败告终,启动VMware View Persona Management服务报10 ...

  3. VMware vSphere 服务器虚拟化之十六 桌面虚拟化之VMware Horizon View

       VMware vSphere服务器虚拟化之十六 桌面虚拟化之VMware Horizon View  VMware Horizon View (原VMware View的升级版现在版本5.2)是 ...

  4. CPU 虚拟化

    前面 虚拟化技术总览 中从虚拟平台 VMM 的角度,将虚拟化分为 Hypervisor 模型和宿主模型,如果根据虚拟的对象(资源类型)来划分,虚拟化又可以分为计算虚拟化.存储虚拟化和网络虚拟化,再细一 ...

  5. [原] KVM 虚拟化原理探究(3)— CPU 虚拟化

    KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...

  6. CPU虚拟化的常见技术

    关键词:cpu虚拟化,KVM,Host-PassThrough,Nested,CGroup,NUMA,热添加 云计算虚拟化技术主要包括三个领域:计算.存储.网络 本文主要总结了计算虚拟化领域中的CPU ...

  7. CPU虚拟化技术(留坑)

    留坑~~~ 不知道这个是这么实现的 CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率.虚 ...

  8. CPU虚拟化

    1. 为什么需要 CPU 虚拟化 X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件.x86 架构提供四个特权级别给操作系统和应用程序来访问硬件.  Ring 是 ...

  9. KVM之CPU虚拟化

    1.1 为什么要虚拟化CPU 虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Operatin ...

  10. 技嘉主板+AMD CPU开启CPU虚拟化方法

    硬件环境:技嘉AB350+AMD Ryzen 5 1600X 由于安装虚拟机的需要,所以要开启CPU的虚拟化. 首先进入BIOS. 然后如图:(M.I.T-高级频率设定-CPU超频进阶设置-SVM M ...

随机推荐

  1. CAN转PROFINET协议网关 JM-PN-CAN

        1 产品功能 捷米特JM-PN-CAN 是自主研发的一款 PROFINET 从站功能的通讯网关.主要功能是将各种 CAN 设备接入到 PROFINET 网络中. 捷米特JM-PN-CAN连接到 ...

  2. 2023-07-05:爱丽丝和鲍勃继续他们的石子游戏 许多堆石子 排成一行,每堆都有正整数颗石子 piles[i] 游戏以谁手中的石子最多来决出胜负。 爱丽丝和鲍勃轮流进行,爱丽丝先开始。最初,

    2023-07-05:爱丽丝和鲍勃继续他们的石子游戏 许多堆石子 排成一行,每堆都有正整数颗石子 piles[i] 游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = ...

  3. 如何使用Java在Excel中实现一个数据透视表

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前一段时间淘宝出了一个"淘宝人生"的模块, ...

  4. 电子表格vlookup函数使用

    vlookup是常用的辅助查找函数,但是这个函数的参数定义和解释非常的难以理解,即使用向导也很难搞清楚哪个参数是啥意思.放到编程圈里面应该也算bad design的典型了.下面是函数的定义,每次看到这 ...

  5. JDBC的增删改-结果集的元数据-Class反射-JDBC查询封装

    一.使用JDBC批量添加 ​ 知识点复习: ​1.JDBC的六大步骤 (导入jar包, 加载驱动类,获取连接对象, 获取sql执行器.执行sql与并返回结果, 关闭数据库连接) 2.​封装了一个DBU ...

  6. 【技术积累】Mysql中的SQL语言【技术篇】【三】

    聚合函数 SUM函数 在MySQL中,SUM函数是用于计算数值列的总和的聚合函数.它接受一个数值列作为参数,并返回该列中所有值的总和. 以下是一个使用SUM函数的示例: 假设我们有一个名为" ...

  7. 最为常用的Laravel操作(1)-Eloquent模型

    快速入门 更换表名 protected $table = 'my_flights'; 更换主键名称 protected $primaryKey = 'id'; 注意: Eloquent 默认主键字段是 ...

  8. .NET周刊【7月第3期 2023-07-16】

    国内文章 揭秘 .NET 中的 TimerQueue(上) https://www.cnblogs.com/eventhorizon/p/17557821.html TimerQueue 是.NET中 ...

  9. PXE服务器搭建--ARM

    PXE服务搭建 一. 什么是PXE PXE是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过 ...

  10. 开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库. XML操作是软件开发过程中经常会遇到的情况:包括XML内容的遍历解 ...