资源管理是虚拟化的必备技术

作者:Detlef Drewanz

本文是虚拟化系列文章的第 4 部分,讨论 IT 资源管理技术在虚拟化实现方面的作用。


2012 年 12 月发布(转载自 eStep 博客

想要自动接收类似本文的技术文章?请订阅系统社区新闻快讯 — 专门面向系统管理员和开发人员的技术内容。
第 8 部分 — 使用 Oracle Enterprise Manager Ops Center 管理虚拟化
第 7 部分 — Oracle Virtual Desktop Infrastructure 在虚拟化战略中的作用
第 6 部分 — Oracle VM VirtualBox — 个人桌面虚拟化
第 5 部分 — 网络虚拟化和网络资源管理
第 4 部分 — 资源管理是虚拟化的必备技术
第 3 部分 — Oracle Solaris 区域和 Linux 容器在虚拟化战略中的作用
第 2 部分 — Oracle VM Server for x86 在虚拟化战略中的作用
第 1 部分 — Oracle VM Server for SPARC 在虚拟化战略中的作用

 

在本文和下一篇文章中,我们将介绍一些虚拟化的必备技术。本文讨论 IT 资源管理这种虚拟化的必备技术。

资源管理为何重要?
约束
调度
分区
总结
另请参见
关于作者

本系列的第一篇文章中,我们使用了来自 Wikipedia 的以下虚拟化定义:

"在计算领域,虚拟化是指为硬件平台、操作系统、存储设备或网络资源等创建虚拟,而非实际版本。

资源是使用不同虚拟化技术虚拟化的基础元素。资源包括以下内容:

  • 硬件,如 CPU、内存或设备
  • 网络
  • 操作系统
  • 桌面
  • 一般软件层

资源管理为何重要?

资源管理不仅限制对共享资源的访问,而且还监视资源使用情况和收集帐户信息。

资源管理很重要,因为许多使用者,如虚拟机 (VM)、区域、容器或虚拟桌面,都请求资源。整合一个系统上的不同负载通常需要组合具有不同服务级别协议以及不同吞吐量、响应时间和可用性要求的负载。

但资源始终是有限的,它们由一个 IT 系统上的多个虚拟化环境共享;因此,关键是要限制对特定共享资源的访问、隔离资源使之不被某些负载使用,至少要限制负载对共享资源的使用。这样,我们就可以保证每个虚拟化环境的服务水平或影响其性能。

如果没有资源管理,所有负载将基于其资源请求同等处理。结果可能是一个 VM 在运行时占用过多内存,导致同一系统上的其他 VM 被阻塞,一些重要的内存请求会由于没有可用内存而没机会得到处理。

资源管理重要性的另一个示例是能够确定虚拟环境能看到多少资源(例如 CPU)。由于许可或软件行为的原因,这可能很重要。

因此与区域、容器或 VM 有关的资源管理的目标如下所示:

  • 防止实体消耗无限资源
  • 能够基于外部事件更改优先级
  • 平衡资源保证以实现系统利用率最大化的目标

本文其余部分所讨论的机制都是用于实现这些目标。

约束

通过使用约束,我们可以设置特定资源的消耗边界条件。这样,我们就可以控制行为异常的环境,否则会影响其他环境或整个系统的性能,或者可能会由于无节制的资源请求而影响可用性。

通常,通过系统管理员设置的资源控制来强制实施约束。以下是资源控制的例子:

  • 控制所用信号的数量
  • 控制打开文件的数量
  • 控制所用虚拟内存的数量
  • 控制进程的数量
  • 控制所用网络带宽的数量

如果达到特定边界条件,系统可能有以下几种不同反应:

  • 允许请求,但让请求者知道已经达到边界条件
  • 按定义的边界条件提供资源
  • 拒绝整个资源请求,并向应用程序发送错误消息
  • 在系统上生成一个操作,释放资源并为请求者提供所需的资源

根据具体实现,必须修改应用程序或虚拟化环境以了解资源控制和约束。但约束的使用是非常灵活的,您可以在运行时更改边界条件。而且,使用约束后,负载可以使用已经分配给另一个负载但它现在不需要的空闲资源。

示例 1: 约束对于各种各样的共享并行资源访问非常重要和有用。好的例子包括进程、项目和 Oracle Solaris 区域,它们都使用和共享一个内核。Oracle Solaris 中内置的许多资源控制都可以限制其资源消耗。

例如,Oracle Solaris 11 中的资源控制 zone.max-processes 限制区域可运行的进程数。限制进程很重要,因为操作系统内核的进程表很大,但大小受限制。此资源控制限制区域在进程表上的比例,从而限制区域可以运行的进程数,并防止行为异常的区域执行像创建无限数量的进程之类的操作。启用此资源控制之后,内核将在某个时刻不再允许区域创建新进程。

示例 2: 系统中另一个常见的共享资源是网络,它控制负载与外界的连接。如果所有 VM 共享一个网络电缆,则需要限制每个 VM 占用的带宽。我们将在下一篇文章中详细介绍此示例。

调度

通过调度,我们将资源划分为具体间隔,并基于可预测的算法分配这些间隔。如果不需要所分配的资源间隔,可交由其他使用者使用。

调度资源的一个例子是 CPU 时间。使用调度,可将可用 CPU 时间划分为应用程序所使用的分配单元。基于调度的资源管理允许充分利用配置。在关键场合或负载过重的场合,调度算法可保证所有应用程序对资源进行受控的访问。调度算法定义“受控访问”的含义以及在何种情况下(例如,基于预定义的应用程序重要性)可以更改分配单元或将其分配给某个应用程序。

示例 1:通过结合使用 Oracle Solaris 中的公平共享调度程序 (FSS) 和 Oracle Solaris 区域实现调度。FSS 允许分配 CPU 资源。可以为每个区域分配一个份额,也可以使用份额来管理 CPU 资源,以免各区域竞争 CPU 时间。

例如,如果负载小于 100%,则不进行管理,因为仍有空闲 CPU 容量可用。但如果负载达到 100%,将激活 FSS 并修改参与进程的优先级,这样为区域分配的 CPU 容量与其定义的份额相对应。定义份额的计算方式是将活动区域的份额值除以所以所有活动区域的份额总和。

如果系统得到充分利用,FSS 可基于 CPU 份额保证负载的响应时间。

示例 2:另一个例子是,如果不将 vCPU 直接绑定到物理 CPU,在 Oracle VM Server for x86 中如何创建和处理虚拟 CPU (vCPU)。在这种情况下,通过一个本地运行队列管理(调度)vCPU,该队列将一个物理 CPU“分成”多个 vCPU。此工作由虚拟机管理程序来完成。

队列按 vCPU 优先级进行排序。在队列中,每个 vCPU 都获得一份公平的 CPU 资源。vCPU 所获得的优先级可通过操纵相对权重参数和上限参数来管理。

相对权重参数用于分配一个域所获得的 CPU 周期数。权重为 64 的 vCPU 所获得的 CPU 周期数是权重为 32 的 vCPU 的两倍。

上限参数定义一个域将获得的最大 CPU 周期数(百分比)。这是一个绝对值。将该值设置为 100 意味着该 vCPU 可以使用物理 CPU 上 100% 的可用周期。将其设置为 50 意味着该 vCPU 绝不能使用超过半数的可用周期。因此,本示例是调度和约束(上限)的组合。

分区

分区用于为负载分配一个资源子集,从而确保资源始终对该负载可用。但是,其他负载不能同时使用这些资源,因为这些资源被分配给一个特定负载专用。因此,使用分区的配置可避免资源的过度承诺。不过,避免过度承诺将削弱实现高利用率的能力,因为被分配的负载空闲时,其他负载不能使用为其保留的资源。分区的典型示例是为负载或虚拟环境分配物理 CPU、部分物理内存或部分 I/O 系统。

示例 1:我们再来讨论一下 Oracle VM Server for x86 处理 CPU 的方式。如果使用分区将 vCPU 绑定到一个物理 CPU 并为域分配 vCPU,我们就对 CPU 进行了分区。以固定方式将 vCPU 分配给域后,可始终保证固定的性能。但是,其他域不能使用这些 vCPU,即使它们空闲也不行。

示例 2:Oracle VM Server for SPARC 的分区可用于多种资源类型。CPU 和内存总是直接分配给逻辑域。还可以选择为某些域分配 PCI 插槽和整个 PCI 基础架构。这样做的好处(如果使用直接 I/O)是可以获得接近零系统开销并确保性能的高性能域。

总结

约束、调度和分区是基本的资源管理机制,可确保各种虚拟化技术访问有限的共享资源。根据各种负载和虚拟化技术的要求,这些机制分别用于不同的资源。

在基于虚拟机管理程序的虚拟化环境中,分区是最普遍的资源控制方式。在这种情况下,虚拟机管理程序控制 CPU、内存、权限检查和硬件中断等资源。

为避免对 CPU 资源的过度承诺,通常对 CPU 资源进行分区,并将物理 CPU 作为 vCPU 配给虚拟环境。在某些情况下,调度程序将物理 CPU 分成多个 vCPU,但这会产生虚拟化开销并可能导致 CPU 资源的过度承诺。

内存通常由虚拟机管理程序的内存管理系统控制,该系统执行内存分配并指派给来宾,并基于规则保护内存。一些虚拟机管理程序通过给来宾直接分配(分区)物理内存区域来执行内存管理。在这些情况下,不可能发生内存资源的过度承诺。但是,如果虚拟机管理程序通过虚拟内存管理系统执行内存管理,则可能发生对来宾的过度内存资源承诺,为了确保性能,应避免这样做。

另请参见

关于作者

Detlef 是首席销售顾问,居住在德国波茨坦。他是 Oracle 北欧服务器架构师团队的一名服务器和 Oracle Solaris 专家。他于 1998 年加入 Sun Microsystems,现在是 Oracle 的一员。在此之前,Detlef 在 Hitachi Internetworking Frankfurt 任职网络支持,并且是罗斯托克大学计算机科学系的一名科研人员。Detlef 拥有计算机科学硕士学位。

修订版 1.0,2012 年 12 月 17 日

facebook 横幅 twitter 横幅