testtutu
作者testtutu2022-10-08 23:30
系统架构师, 浪潮商用机器有限公司

PowerVM基本原理篇一 CPU虚拟化介绍

字数 3291阅读 1208评论 1赞 0

PowerVM 基本原理篇一 CPU 虚拟化介绍

浪潮商用机器 李秀江

日常工作中经常会有小伙伴们问到 PowerVM 关于 CPU 虚拟化的一些问题,今天正好有时间给大家做一个 PowerVM CPU 虚拟化的简单科普介绍,希望能够帮助到有需要的同学们。

在虚拟化环境中物理处理器是作为虚拟处理器呈现给逻辑分区的操作系统。虚拟处理器是物理处理器内核对使用共享处理器的分区的操作系统的表示。

每个分区都有自己分配的虚拟处理器,该分区将仅在其工作负载所需的虚拟处理器上工作,分配给分区的不需要的虚拟处理器将使用处理器折叠功能折叠掉,在 AIX 中要显示当前分配的虚拟处理器数目可以使用命令 # lparstat -i |grep -i “ Desired Virtual CPU” 进行查询。 当然可以使用 HMC 来修改分配给分区的虚拟处理器和物理处理单元的数量。

下图包含了很多关于 Power 处理器的概念,很多时候我们发现大家都对相关概念比较了解,但是具体到细节方面大家就有些模糊,本文将为大家介绍关于 PowerVM CPU 虚拟化的相关知识点,涉及什么是逻辑 CPU , 什么是虚拟 CPU ,什么是 CPU 的 Entitled Capacity 等基本概念和相关知识点。

以上图为例,是一个共有 10 个物理 core 的处理器系统。从左到右,按照 CPU 使用类型分为四类,第一个为共享处理器池,该 CPU 共享处理器中有六个处理器;第二类为两个专用处理器,并且都分配给了一个分区;第三类是一个非活动的 CoD 处理器;第四类为一个由于检测到的错误而被取消配置的处理器单元。

第一类中,我们看到有两个共享处理器分区,每个分区有四个虚拟处理器。如何从仅包含六个物理处理器的处理池中分配八个虚拟处理器呢? 这八个虚拟处理器是如何工作的呢,下面我们将给大家进行介绍。

首先我们来看看在共享处理池的处理单元中分配的处理器容量, PowerVM 要求每个分区的最小值为 0.1 个处理单元,但是额外的容量可以按照 0.01 个处理单元为增量进行增加或减少,但是最少不能低于 0.1 个处理器单元。这里强调一下,我们通常说得微分区其实就是利用共享处理器的分区。

简单点说共享处理器是基于时间片分配给分区的物理处理器( CPU 的时钟周期)。共享处理器池中的任何物理处理器都可用于满足使用共享处理器池的任何分区的执行需求。早期基于 POWER5 处理器的系统只有一个共享处理器池,目前对于基于 POWER6 和更新的 POWER 处理器的系统可以配置多个共享处理器池。

大家想一下,这样做的好处是什么呢?第一可以同时使用来自多个物理处理器的处理能力,这可以提高多个分区的性能;第二设备使用更加灵活,处理能力可以一个处理器的百分之一即 0.01 的颗粒度进行配置,配置实现更灵活性,使用效率更高;第三,对于 Uncapped 分区可以无上限使用空闲资源,即分区可利用共享处理器池中未使用的多余处理能力,做到削峰填谷,降低设备使用成本;第四,可以减少相关设备资本支出,尤其在云环境中,提高设备的利用率。

任何事情都有两面性,那么共享处理器池的缺点有哪些呢?使用共享处理器的缺点是由于多个分区使用相同的物理处理器,因此由于处理器上的上下文切换而存在开销。当在处理器上运行的线程中断(或完成)并且另一个线程在该处理器上运行时,将导致发生上下文切换。传统上的开销是将每个作业的数据从内存复制到处理器缓存中,这种开销是正常的,甚至也会发生在分区内的操作系统级别。但是,当虚拟机监控进程在分区之间以时间片方式将虚拟处理器分派到物理处理器上时,将会增加上下文切换开销,后面我们会讲为什么会发生这种情况。

前面,我们提到过共享处理器是基于时间片分配给分区的物理处理器( CPU 的时钟周期)。那怎么来理解这句话呢?

我们以 10 毫秒 ( ms ) 的时间段来考虑 CPU 的执行容量,分区根据分配的处理单元大小使用时间片或时间片的一部分。例如, 0.5 个处理单元将确保每 10 毫秒的时间片内,该分区将接收最多 5 毫秒的处理器时间。为什么说是最多呢?大家有考虑这个原因吗,这是因为分区可能由于等待、中断或缺乏处理需求而不需要整个 5 毫秒的时间段,但分区的处理时间保证长达 5 毫秒。同理,具有 0.2 个处理单元的分区在每个时间段内有权获得一个处理器 20% 的容量。 那么具有 1.8 个处理单元的分区有权为每个 10 ms 时间片提供 18 ms 的处理时间(使用多个处理器来实现)。

如下图:

如上图,如果分区具有超过 1.0 个处理单元,则必须同时使用多个物理处理器。例如,具有 1.8 个处理单元的分区可以在 10 毫秒的虚拟机管理进程时间段内利用两个处理器,每个处理器 9 毫秒。

但是如果一个分区没有使用其全部授权的处理能力,则多余的处理时间将退还给共享处理器池。而 Uncapped 的分区就可以使用超出其授权容量的额外处理时间。

这里我们不得不提出另外一个概念就是处理器的亲和性即 Processor affinity 。我们都知道热缓存是指仍然具有与当前正在运行的进程相关的数据的缓存。如果一个进程被中断,另一个进程在该物理处理器上运行,当原来的进程准备好再次运行时,它的数据可能仍在缓存中。在多核运行的机器上,每个 CPU 本身自己会有缓存,缓存着进程使用的信息,但是进程可能会被 OS 调度到其它 CPU 上,如此, CPU cache 命中率就低了,当绑定 CPU 后,程序就会一直在指定的 cpu 跑,不会由操作系统调度到其他 CPU 上,性能有一定的提高。

我们之所以提到这个概念是因为在 AIX 系统中逻辑处理器在上次执行的同一物理处理器上分派存在一个概率,超出授权运行将影响处理器亲和性,如果在授权内运行,则通常每次都在同一处理器上调度线程。 Uncapped 模式不可避免会产生处理器亲和性的问题,而专用分区具有理想的处理器亲和性。这个也是事情的两面性。

我们假设每个逻辑分区或者微分区都分配有多个虚拟处理器,但是逻辑分区工作负载可能需要使用其中的一些虚拟处理器,可能不需要其他处理器。这时候,操作系统将折叠空闲的虚拟处理器,并且仅在所需的虚拟处理器上运行相关负载。这就是 PowerVM 的 Processor 折叠, AIX 系统参数 vpm_fold_policy 控制处理器折叠的虚拟处理器特性,一般我们都建议保持启用处理器折叠,默认情况系统也会保持启用状态,如果是禁用状态,建议使用命令启用它 # schedo -p -o vpm_fold_policy=1 。但是大家要注意 VIOS 不支持或不推荐处理器折叠功能,默认是出于关闭状态的。我们可以用 mpstat -s 来监控和查看 CPU 折叠情况。

那么什么是逻辑 CPU 呢?

正如开篇那张图我们还提到了 Logical Processor, 代表什么意思呢?其实它表示物理处理器的单个同步多线程 SMT 线程。在 PowerVM 环境下是如何来计算逻辑 CPU 的个数呢? 公式其实就是 lcpu= vCPU * SMT 。所以如果禁用 SMT 时,每个虚拟处理器内核就对应一个 AIX 逻辑处理器了,通过我们这么一说,是不是很多概念就都清楚了。

在 PowerVM 环境中,监视共享处理器池中的可用处理器非常重要。池中的空闲处理器过少会导致性能下降,如果需要,应将其他备用处理器添加到处理器池中来。

PowerVM 共享资源池中的可用处理器在 lparstat 命令输出的 “app” 列进行显示:

但是在默认情况下,在 lparstat 输出中找不到 “app” 列,但是,通过在 HMC 中使用 $ chsyscfg -m -r lpar -i "name=,allow_perf_collection=1" 后就可以查看 app 列内容了。

好了,由于篇幅关系今天内容就先写这么多,后续有时间的话我会继续跟新相关内容。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论1 条评论

testtututesttutu系统架构师, 浪潮商用机器有限公司
2022-10-08 23:36
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料