openstack 虚拟机设备管理器cpu核数与任务管理器不一致

一. 官方资料

       在官方文档,找到一些关于虚拟机处理器配置的相关内容;在官方社区,没有找到对应话题。两句话很有启发性,即:

(1)"您可以配置虚拟机的处理器设置,包括处理器数量、每个处理器的核心数,以及虚拟化引擎的首选执行模式"  

(2)"只有至少具有逻辑处理器的主机才支持指定多个虚拟处理器"。

      对啊,为什么这两个参数一定要是指导我们物理主机如何去"分配"处理器资源给虚拟主机,而不能是指导如何去"虚拟"虚拟主机(如ubuntu等)本身的虚拟处理器参数呢?很显然,官方没有这样的界定,于是我开始了我的求证之路。

二. 主流说法

说法一:虚拟机处理器设置页面的“处理器数量”指的是“核心数”,“每个处理器的内核数量”是超线程数量。

       这个说法的赞同人数挺多的,毕竟官方不会这么无聊搞出两个一样的概念,认证过程说的也蛮有道理的。但是,下面的例子有点驳斥这种说法。如,我的物理主机 4核8线程,配置 8 * 1正常运行,我的核心只有4核,而我配置8也可以,我哪里来那么多物理给它?感觉,这个说法站不住。 

说法二:“处理器数量”跟物理主机的CPU个数一样

       这个我有幸遇到一个博主写的论证博客,有些说法我也挺赞同的,主要是最后的观点不谋而合。

文章链接:https://blog.csdn.net/tiancao222/article/details/104412090?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1

      博主的结论:支持说法2,且VMware占用的是最终的“超线程”。但是,他没有提及这两个参数的意义是什么。

三. 个人猜想

(1)“处理器数量”                   :指导如何虚拟化  --  虚拟主机的虚拟处理器数量

(2)“每个处理器的核心数量” :指导如何虚拟化  --  虚拟主机的每个虚拟处理器的核心数量

(3)“处理器内核总数”            :分配处理器依据  --  真实物理主机分配给虚拟主机的处理器线程总数(真实处理器资源)

注意表达前缀:“虚拟主机的” ,即这些是虚拟主机被虚拟化出来的处理器参数。意味这些处理器参数在虚拟机内部的处理器信息是可查询的,那么就可以很容易去验证啦。

配置成功关键:“处理器内核总数”决定着配置参数是否能够通过(处理器内核总数 = 处理器数量 * 每个处理器的核心数量  ),即 只要“处理器内核总数”不超出我们真实物理主机处理器的线程总数,配置参数都可以通过。


1.  说明一下我的猜想:

(1)“处理器数量”和“每个处理器的核心数量”这两个参数意义重点不在于指导物理主机怎么  “分配外部处理器资源”  给虚拟主机,而是在于指导如何  “配置虚拟主机内部的处理器参数”  ,即如何去虚拟化虚拟主机的处理器参数,即CPU数量、物理核心。

(2) “处理器内核总数”则是真实物理主机分配给虚拟主机的真正处理器资源,分配的是VMware占用的是最终的“线程总数”,是真实物理主机分配给虚拟主机的处理器的分配依据。


2.  举个例子说明猜想:

处理器数量 :2

每个处理器的核心数量: 4

处理器内核总数 :8  ( = 2 * 4) 

2 和 4 不是在于指导物理主机(且称为windows)如何分配外部处理器资源给虚拟主机,而是在于指导如何虚拟化虚拟主机(且称为ubuntu)的内部处理器。配置成功之后,我们可以在虚拟主机(ubuntu)的 /proc/cpuinfo中看到,处理器数量是2,每颗处理器的物理核心是4,这个是虚拟主机的虚拟处理器参数,不是物理主机分配的外部处理器资源,真实分配的处理器资源是8,即分了8个线程,只要8没有超出真实处理器的线程总数,配置就可以成功。


3.  个人猜想实验例证:

----  物理主机处理器资源:4核8线程

----  配置没有超出8线程的(配置成功)  : 1 * 4    1 * 8    2 * 2    2 * 4    4 * 2    8 * 1

----  配置已经超出8线程的(配置失败)  : 8 * 2    4 * 3    2 * 6    1 * 12

----  为什么这样配置原因:

(1)因为第一种说法说是处理器数量是“核心数”,而我的处理器是四核,如果我设置为 8 * 1 岂不是应该不被允许,(即配置失败,因为我的只有4核) ??那么假如配置通过了,则可以说明第一种说法是错误的;

(2)可以看到配置超出8线程的则不被允许,而配置没有超出8线程的则可以通过,则说明配置参数能否被通过,是看配置参数的处理器内核总数是否超出真实物理主机的线程数(比如我的是8线程)(关键词:超出、超线程数)

(3)通过多个可以配置成功的例子,去查看虚拟机虚拟出来的处理器数量、CPU物理核数、CPU逻辑核数,可以发现我们的配置参数和虚拟机的处理器参数有很大的联系(关键词:虚拟)

1)查看我的处理器资源(CPU一颗、四核八线程)

2)贴上查询 虚拟机Ubuntu 的 CPU数量、CPU物理核数、CPU逻辑核数的方法

3)测试

  //查看不同physical id的数量,直接输出CPU数量

cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l

// 查看不同core id的数量,直接输出CPU物理核数(注意:输出的是一颗CPU物理核数

cat /proc/cpuinfo | grep "core id" | sort -u | wc -l

// 查看不同 processor 的数量,直接输出CPU逻辑核数总数(注意:输出的是本服务器所有CPU的逻辑核的总数

cat /proc/cpuinfo | grep "processor" | sort -u | wc -l

实验输出:

1.  没有超出限制(配置成功)的例子:(处理器内核总数 <= 真实物理主机的线程总数,此处为8)

2.  已经超出限制(配置失败)的例子:(处理器内核总数 > 真实物理主机的线程总数,此处为8)

实验结论:

(1) 第一种说法  :“处理器数量”是“核心数”,显然是错误的;

(2) 第二种说法  :VMware占用的是最终的“超线程”,在这里也得到了辅助证明;

(3) 自己的说法  :

(1)“处理器数量”                   :指导如何虚拟化  --  虚拟主机的虚拟处理器数量

(2)“每个处理器的核心数量” :指导如何虚拟化  --  虚拟主机的每个虚拟处理器的核心数量

(3)“处理器内核总数”            :分配处理器依据  --  真实物理主机分配给虚拟主机的处理器线程总数(真实处理器资源)

配置关键:“处理器内核总数 ”是否超出真实物理主机的线程总数,即 “处理器内核总数”不能超出我们真实处理器的线程总数

值得注意:在虚拟主机(ubuntu)中,“逻辑核心总数 ”和 “物理核心总数” 相同 ,猜测他们是一个物理核心对应一个逻辑核心

原文地址:https://www.cnblogs.com/ruiy/p/14281897.html