在vSphere环境中Statistics里关于PCPU Used和PCPUUtilized这两个参数进行进一步的解决,从字面意思看,两者的意思差不太多,可是,很多时候它们的大小却是不同的,为什么呢??? 在开始进一步了解这个概念差异之前,先阐述几个基本定义: · Time Stamp Counter - 也叫TSC,如果有人碰到过ESXi启动故障或者运行时故障时,就有机会看到这个TSC错误的,它是一个64为的可用CPU的时钟周期寄存器,被用于记录CPU的时钟频率并且不受时钟更改频率影响; · Unhalted Cycles - 这是另一个时钟周期寄存器,它被用于存放所有的时钟周期,不过这个是依赖CPU ClockFrequency并且它的计数也会受到clock frequency更改影响,比如,如果开启了智能电源管理或超线程; · Wall Clock Time - 这是一个关于实时运行记录的寄存器; 明白上面的基本CPU计数寄存器的概念后,来对应下PCPUUsed和PCPU Utilized与它们的对应关系: a.PCPU Used- 这个参数对应关系是 PCPU Used = ( Unhalted Cycles ) / ( Wall ClockTime )5 V h! U& {" d8 E' o
b.PCPU Utilized - 这个参数是基于TSC的,因此,它的计算公式是 PCPU Utilized = ( Non-Idle State TSC Cycles )/ (Wall Clock Time ) 假设系统没有开启超线程,也没开启智能电源管理,则结合前面针对CPU计数寄存器的描述功能差异来看,PCPUUtilized = PCPU Used (备注:如果这里不明白,那看看前面的基本定义先); 所以,在上面的情况下,PCPU Utilized和PCPU Used是相等的,没啥争议,那么,接下来看看当开启了智能电源管理之后的计数寄存器器的变化是怎样的: 当智能电源管理功能开启之后,物理主机的CPU是有机会在低负载情况下运行在低频率下,那么,此时,结合前面针对计数寄存器的描述就可以知道此时Unhalted Cycles的值会小于TSC Cycless,那么结合前面的PCPU Used和PCPU Utilized的计算公式来看,就会知道,PCPU Used 值就一定会小于 PCPU Utilized,因为,此时,PCPU Used取的是Unhalted Cycles这个时钟周期计数寄存器,而它由于主机的CPU Clock Frequency变小了,因此计算出来的值自然就会随之变小; 不过,还有另一种情况是:如果为CPU开启了Turbo Boost (这个不知道该怎么用中文来定义,哈哈,有点像涡轮增压的感觉啦,建议大家读取为Turbo Boost就好),当开启了Turbo Boost之后,物理CPU会运行在更高的CPU Clock Frequency状态下,那么,此时,自然就是PCPU Used 会大于 PCPU Utilized了; 1 ~1 }7 f* A+ ` d+ T* g 那么,接着看,如果开启了超线程的系统后,会怎样,首先,需要明白超线程的基础概念。国内,很多人对于超线程的认知是:Double Performance,表面逻辑就是:原本4Core的CPU,开启超线程后在Task Manager里就变成了8Core了。而实质上超线程的逻辑是在每个 PCPU 的 LCPU 上增加了一个,也就是说,原本的单 Core 单 LCPU 就变成了单 Core 双 LCPU 了,这样做,直接让执行等待时间缩短了一半(理论值); / Y+ ~, P& T5 }9 c' A- @0 A 当明白了超线程的基本逻辑之后,接着去看看,如果开启了超线程之后的 PCPU Utilized和不开启超线程的 PCPU Utilized 的计算差异: a.如果只有1 PCPU Core 处于繁忙状态,则 PCPUUsed = ( Unhalted Cycles ) / [ ( Wall Clock Time) * 50% ] ,这就表示ESXi只消耗掉了它使用PCPU的 50%的可用资源;% W* C( W @5 A8 E
b.如果2 CPUCores 都处于繁忙状态,则每个PCPU 的 PCPUUsed = ( Unhalted Cycles ) / [ ( Wall Clock Time ) * 62.5% ],这就意味着,ESXi 会使用处于超线程模式下的 PCPU的125%的可用资源; 因此,当使用它们时,这个CPU 计数存储器的差异在哪里? · PCPU Utilized 表示PCPU 的使用时间,即使是 PCPU 处于繁忙状态时,依然是选用这个使用时间来计算,这点,看上面针对PCPU Utilized 的计算公式就可以看到; · PCPU Used 则表示它在不同的 PCPU 状态下,比如开启了超线程或智能电源管理下的工作负载计算,它绝对是一个条件 Based 的计算公式,换个说法,PCPU Used 这个参数代表着更准确的当前 PCPU 资源利用率; 总结来说,PCPU Utilized 和 PCPUUsed 在特定条件下可以相等,但是在多数时间它们是不等等,或大于或小于,判断和计算方式参考上面的不同条件下的计算公式和比例; 那么,在实际生产环境中,通常 PCPU Utilized 被用于进行资源规划和活动周期分析用途,而PCPU Used则被用于活动状态下,CPU 低性能故障排查依据。 资料文档来源:虚拟人 |