vmware中如何检查cpu的使用状况-一个考题引发的思考
来自一个VCP的考题,有点兴趣。可参看:
如何在VMware里使用esxtop?
http://thocm.com/a/caozuoxitongzixun/xunihuazonghezixun/VMwarexunih/2012/0922/9326.html
原文http://www.daemonlord.nl/index.php?action=artikel&cat=10&id=85&artlang=en
Interpreting esxtop Statistics
https://communities.vmware.com/docs/DOC-9279?decorator=print
如图:

问题:为了排查某服务器遭遇的性能问题,使用esxtop观测,根据如上esxtop的输出结果,请问Fileserver01分配了几个vCPU?

1.CPU load average
这里会显示3个值,分别是1分钟,5分钟,15分钟间隔内的物理CPU平均负载.
这3个值每隔5秒钟更新一次。
如果值为1表示cpu使用率100%。0.5表示50%使用率。如果是2那么显然是超载了,要么增加物理cpu,要么减少虚拟机数量。
2.PCPU行指示单个核心的使用率
物理cpu的负载。avg是平均值。一般来说80%比较理想(依据不同场景而定不一定非得80%为基准),90%一般可以看做是接近超载的状态了。
如果超线程开启会显示LCPU。
PCPU USED在超线程开启的情况下会和PCPU UTIL不同。
单个物理CPU或者内核作为两个逻辑CPU使用。内核是CPU中的物理硬件块,而线程是软件生成的,并且和缓存、寄存器以及执行单元一样共享硬件组件。由于这种超线程的存在,CPU USED%和PCPU UTIL%因CPU调度器记录使用状况的不同而不同。如果2个线程同时在忙碌状态,则有效使用率只有一半。 PCPU USED(%) – Physical hardware execution context. Can be a physical CPU core if hyperthreading is unavilable or disabled or a logical CPU (LCPU) or SMT thread if hyperthreading is enabled. This displays PCPU percentage of CPU usage when averaged over all PCPUs.
PCPU UTIL(%) - Physical CPU utilised. (real time) Indicates how much time the PCPU was busy, in an unhalted state, in the last snapshot duration. Might differ from PCPU USED(%) due to power management technologies or hyperthreading.
If hyper threading is enabled these figures can be different, likewise if the frequency of the PCPU is changed due to power management these figures can also be adjusted.
As an example if PCPU USED(%) is 100 and PCPU UTIL(%) is 50 this is because hyper threading is splitting the load across the two PCPUs. If you then look in the vSphere client you may notice that CPU usage is 100%. This is because the vSphere client will double the statistics if hyperthreading is enabled.
In a dual core system, each PCPU is charged by the CPU scheduler half of the elapsed time when both PCPUs are busy.
重要解释:
"PCPU USED(%)"
The percentage CPU usage per PCPU, and its average over all PCPUs.
Q: What is the difference between "PCPU UTIL(%)" and "PCPU USED(%)"?
A: While "PCPU UTIL(%)" indicates how much time a PCPU was busy (unhalted) in the last duration, "PCPU USED(%)" shows the amount of "effective work" that has been done by this PCPU. The value of "PCPU USED(%)" can be different from "PCPU UTIL(%)" mainly for the following two reasons:
(1) Hyper-threading
The two PCPUs in a core share a lot of hardware resources, including the execution units and cache. And thus, the "effective work" done by a PCPU when the other PCPU in the core is busy is usually much less than the case when the other PCPU is idle. Based on this observation, our CPU scheduler charges each PCPU half of the elapsed durating when both PCPUs are busy. If only one PCPU is busy during a time period, the PCPU is charged for all that time period. Let's use some examples to illustrate this.
- '+' means busy, '-' means idle.
- (1) PCPU 0: +++++----- (UTIL: %50 / USED: %50)
- PCPU 1: -----+++++ (UTIL: %50 / USED: %50)
- (2) PCPU 0: +++++----- (UTIL: %50 / USED: %25)
- PCPU 1: +++++----- (UTIL: %50 / USED: %25)
- (3) PCPU 0: +++++----- (UTIL: %50 / USED: %40, i.e. %30 + 20%/2)
- PCPU 1: ---+++++-- (UTIL: %50 / USED: %40, i.e. %20/2 + %30)
In all the three above scenarios, each PCPU is utilized by 50%. But, depending on whether they are busy at the same time, the PCPU USED(%) is between 25% and 50%. Generally speaking,
- /- PCPU0_UTIL%/2, if PCPU0_UTIL% < PCPU1_UTIL%
- PCPU0_UTIL% >= PCPU0_USED% >= |
- \- (PCPU0_UTIL% - PCPU1_UTIL%) + PCPU1_UTIL%/2, otherwise
Please note that the above inequations may not hold due to frequency scaling, which is discussed next.
(2) Power Management
The frequency of a PCPU may be changed due to power management. Obviously, a PCPU does less "effective work" (in a unit of time) when the frequency is lower. The CPU scheduler adjusts the "PCPU USED(%)" based on the frequency of the PCPU.
- PCPU_USED% = PCPU_UTIL% * Effective_Frequency / Nominal_Frequency
Suppose that UTIL% is 80%, and the nominal frequency is 2 GHz. If the effective frequency is 1.5 GHz. USED% would be 80% * 1.5 / 2 = 60%. Please note that since the CPU frequency may change often, you may go to the esxtop power screen, pressing 'p', to see how often the PCPU stays at what states, which can help guess the effective frequency.
Please also note that turbo mode may make the effective frequency higher than the nominal frequency. In that case, USED% would be higher than UTIL%.
If we want to add both reasons into account, just to make it more complicated, we can have something like this.
- PCPU0_USED% /- PCPU0_UTIL%/2, if PCPU0_UTIL% < PCPU1_UTIL%
- PCPU0_UTIL% >= * Nomial_Frequency >= |
- / Effective_Frequency \- (PCPU0_UTIL% - PCPU1_UTIL%) + PCPU1_UTIL%/2, otherwise
Q: Why do I see ~100% for the average "PCPU UTIL(%)", but the average "PCPU USED(%)" is ~50%?
A: It is very likely that hyper-threading is enabled. A PCPU is only charged half the time when both PCPUs are busy. Typically,
- 0 <= PCPU0_USED% + PCPU1_USED% <= 100% * Effective_Frequency / Base_Frequency
Suppose that CPU frequency is fixed to base frequecy, (e.g. power management features are not used), the sum of PCPU USED% for two PCPUs on the same core would be less than 100%. So, the average PCPU USED(%) won't be higher than 50%.
Q: Why is average CPU usage in vSphere client ~100%, but, average "PCPU USED(%)" in esxtop is ~50%?
A: Same as above. It is likely due to hyper-threading. The average CPU usage in vSphere client is deliberately doubled when hyper-threading is used; while esxtop does not double the average "PCPU USED(%)", which would otherwise mean the average USED% of all the cores.
正确解答:
Open ESXTOP and then expand the GID for a VM. When you do, you will see 4 “common” worlds for the Machine plus 1 world for each CPU. So in this exibit, FileServer01 has 12 worlds: 4 we know are common, so the other 8 must be for vCPUs. BTW, the 4 common worlds are: vmx, vmast, vmx-vthread, and vmx-mks while the CPUs are each listed as vmx-vcpu-0, -1, -2, etc. Also in the exibit, all the other VM’s only have 1 vCPU.
vmware中如何检查cpu的使用状况-一个考题引发的思考的更多相关文章
- Java中把一个对象的值复制给另外一个对象引发的思考
Spring生态在Java项目中被广泛应用,从架构到技术应用再到常用的基本功能,Spring给我们的开发带来了很大的便利.今天翻到项目中导出报表功能的时候,发现经常复制对象的方法: BeanUtils ...
- cat /proc/cpuinfo 引发的思考--CPU 物理封装-物理核心-逻辑核心-超线程之间关系
CPU的物理封装,一个物理封装使用独立的一个CPU物理插槽,共享电源和风扇: CPU物理核心:在一个物理封装中封装了多个独立CPU核心,每一个CPU核心都有自己独立的完整硬件单元. CPU逻辑核心:一 ...
- CentOS 7 在vmware中的网络设置
一环境说明 二centos在vmware中的安装 三NAT网络设置 四设置固定IP 1修改网卡配置说明 2修改etcresolvconf 实现域名解析 五设置防火墙iptables 1 centos安 ...
- 如何在VMware中安装Windows Phone SDK 8.0 (支持模拟器调试)
相信很多开发者目前的系统还是Win7或Mac,一般不会为了开发某个程序而重装系统,所以我们就需要用到VMware这类的虚拟机来模拟预期的开发环境.在开始介绍前,给大家说明下我当前的软硬件环境,本文所讲 ...
- 解决在VMware中安装64位系统时“此主机具有虚拟化支持能力的,但虚拟化技术被禁用”的方法
您已经配置此虚拟机使用64位客户操作系统.然而,64位操作系统不可用.此主机具有虚拟化支持能力的,但虚拟化技术被禁用.这通常是因为虚拟化技术已经在BIOS /固件设置或禁用或主机没有权限改变此设置. ...
- VMware 中安装KVM,模块不加载
# yum -y install qemu-kvm libvirt virt-install bridge-utils 通过以上命令在VMWare中centos7安装KVM模块 安装后使用 #lsmo ...
- vmware中安装centos 6.7
centos 6.7 软件下载地址:http://b.mirrors.lanunion.org/CentOS/6.7/isos/i386/ 引用:http://www.cnblogs.com/sees ...
- VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装
VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装在阿里云开源镜像地址下载镜像Index of /centos/7.2.1511/isos/x86_64/http://mirro ...
- SQL中如何检查死锁
SQL中如何检查死锁 编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,SQL偶尔会出现表被死锁的问题.比如: 在执行事务时,突然中止事务.系统肯定会锁表. 大批量数据操作时,由于网络 ...
随机推荐
- hdu3183 rmq求区间最值的下标
两个月前做的题,以后可以看看,是rmq关于求区间最值的下标 /* hdu3183 终点 给一个整数,可以删除m位,留下的数字形成一个新的整数 rmq 取n-m个数,使形成的数最小 */ #includ ...
- 通过T4模板实现代码自动生成
1:准备.tt模板 using BBFJ.OA.IBLL; using BBFJ.OA.IDAL; using BBFJ.OA.Model; using System; using System.Co ...
- PTA之简单阶乘计算
本题要求实现一个计算非负整数阶乘的简单函数. 时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: int Factorial( const int N ); 其中N ...
- 【BZOJ2839】集合计数&&【BZOJ3622】已经没有什么好害怕的了
再谈容斥原理来两道套路几乎一致的题目[BZOJ2839]集合计数Description一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交 ...
- CDQ分治求前缀和
#include<bits/stdc++.h> using namespace std; ; int n,a_tot,q_tot,ans[N]; ]; struct query { int ...
- BZOJ1078 [SCOI2008]斜堆 堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...
- 6-3 矩阵链成 uva 442
较为简单的栈题 思路比较好 一次ac 1.char word :word=A:直接 a[word]=xxxx,不用 a[‘word’]=xxxx #include<bits/stdc++.h& ...
- 【Java】 剑指offer(28) 对称的二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...
- java技术第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,Ja ...
- 63:二叉搜索树的第k个结点
/** * 面试题63:二叉搜索树的第k个结点 * 给定一颗二叉搜索树,请找出其中的第k大的结点 * 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. ...