GC 算法仍然导致了图 15 中 EDP的第二个低值。观察结果表明,主 gc 算法的性能优于保守方法和按需方法。此外,由于良好的性能维护,对于一些需要短响应间隔的 Web 应用,主 GC 算法可以成为有效的节能解决方案。

图 15.Web 应用程序基准的 EDP
通过实验结果,验证了 GVM 算法比其他节能技术的性能更好。使用 JVM 中已经有的运行时信息,会导致轻微的开销和准确的相位检测,并导致显著的能量减少和轻微的性能下降。 此外,通过使用主 gc 算法可以很好地保持性能,并且仍然可以观察到明显的能量减少。因此,GVM 节能算法可以成为一个长期运行的应用服务器的综合节能解决方案,当系统性能必须保持良好时,主要的 gc 节能算法可以是另一种选择。
6 结 论
本文实现并验证了 GVM 的节能方法。GVM 节电方法使用 JVM 中已经可用的运行时信息来检测相位,然后调整功率水平,以在不引入严重的性能下降的情况下减少能量损耗。Sun 的热点和 Jikes RVM 的 GVM 实现用于评估五个多线程基准测试,SPECjAppServer2004 和
RUBiS。实验结果表明,GVM 方法可以达到我们的目标,并在其他节能技术中引领 EDPs 的最低值。
通过使用全 gc 算法,实验结果表明,能量损耗在 18%-24%的范围内减少,而没有性能下降。另一方面,使用 GVM 算法,可以观察到显著的功耗下降(25%到 34%),而只有 6% 的性能下降。值得注意的是,GVM 的性能比其他节能技术要好得多。这些实验结果表明,
GVM 节能方法是控制应用服务器的合适技术。
据我们所知,GVM 方法是基于 JVM 中已经可用的运行时信息的第一个工作实现之一。在与其他节能技术的验证中,GVM 方法达到了最低的 EDP 值和良好的性能维护。基于实验结果,本文提出的 GVM 方法同时实现了本文提出的节电和性能维护的目标。
,
一种节能的 Java 虚拟机
陈国义,张忠谋和侯廷伟
摘要——本文研究了在多核系统上执行的长时间运行的应用服务器的节能机会。研究目标是在云环境中开发一种高效应用服务器节能策略,将性能降级降至最低。节能策略基于 JVM
(应用程序服务器的基本软件组件)中已有的运行时信息。本研究揭示了几个关键发现。首先,应用程序服务器的特定行为(也称为阶段)可以与 JVM 的运行时信息相关。因此,可以在应用在硬件上实际执行之前预测应用服务器的阶段。其次,在本研究中观察到一些特殊 的阶段,并用于建立省电策略,如记忆阶段和执行阶段。 最后,提出了一种新的空闲阶段发现方法,以在不降低性能的情况下显著降低能量损耗。基于这些发现,本文提出了一套节能算法,并在两个广泛使用的 JVM(Sun's Hotspot 和 Jikes RVM)上实现。通过 5 个多线程
基准和 2 个 Web 应用基准的实验,所提出的节能策略使得 EDP 值在其它节能技术中最低,性能下降远低于 6%。
指标术语——能效;Java 虚拟机;应用服务器;多核系统;多线程应用程序。
1 简介
近年来,web 应用已经成为服务提供商的流行选择,并且已经显示出它们在全球市场中的重要性例如,Google 开发的一套 Web 应用程序(例如,电子邮件、文档处理和文件存储)已经对互联网的使用产生了影响[1]。云环境中授权通过互联网提供 web 应用的软件被称为应用服务器。行业市场观察家预计应用服务器的收入将达到约 670 亿美元到 2018 年[2]。
随着节能降碳的趋势,长期运行的应用服务器能耗问题日益突出。例如,虽然应用服务 器倾向于与数据中心共处一地,但据估计,到 2020 年,美国的数据中心实际能耗将增长至
1400 亿 kWh 以上,成本为 130 亿美元[3]。此外,行业趋势是在芯片上集成光栅多芯[4]。因此,多核处理器被广泛部署在服务器上。多个处理器核的功耗强调了应用服务器的能量浪费 问题。
为了降低长时间运行的应用服务器的功耗,重点讨论了处理器的能量浪费问题。因为处 理器消耗了服务器平台中的大部分能量[5]。众所周知的节能技术称为动态电压和频率缩放
(DVFS),在现代处理器中可用[6]。许多研究基于 DVFS 技术来调整处理器的电压和频率, 从而降低 CPU 的功耗[7]。 这些研究可以分为两大类:性能监视器的分析和使用。
剖析方法首先依赖于对应用程序行为的分析,然后使用此信息来调整处理器的频率[8]。 由于代码分析和特殊指令插入的额外成本,在需要快速响应和高性能的系统(例如应用服务器)上很少部署剖析方法。
另一方面,性能监视器是处理器中的一组寄存器,可用于获取硬件事件。相位观测可用 于调整处理器的频率,以节约能源[9]。然而,性能监视器的使用有局限性。首先,只有在性 能监视器中出现硬件事件之后才能观察阶段。总是落后一步。第二,一个相位的周期不能精 确观察。给定相位的实际开始/结束时间未知。
为了改进性能监控器的性能分析和使用问题,我们的目的是利用 Java 虚拟机(Java Virtual Machine,Java Virtual Machine,应用服务器的基础软件)的运行时间信息来精确地检测应用服务器的运行状态。Java Web 应用程序的指令(也称为字节码)必须由 JVM 解释,然后可以在硬件上执行。该特性使得能够在实际更改运行时行为之前观察应用程序服务器的 阶段。
实验结果表明,采用长期运行的应用服务器基准测试,所提出的节能策略可显著降低能耗(14%~23%),优于其他节能技术(10%~16%)。值得注意的是,使用建议的层级时, 观察到轻微的性下降(百分之四)。EGY,这也优于其他节能技术(8%-12%)。实验结果表明,可以达到本研究的目的。
在云计算时代,应用服务器在云计算和移动计算中都扮演着重要的角色。气象预报、即 时消息服务、地图服务、社交网络服务等应用服务器必须全天候稳定运行。作为消耗 500 W
功率的应用服务器,主动消耗 0.5 kWh [50]。此服务器每年消耗 4380 kW。值得注意的是,
根据 2015 年的保守估计,亚马逊在全球部署了 150 万到 200 万台服务器[51]。 总的来说, 所提议的节能技术为每台服务器节省 15%的能源,每年可节省 97.6 万兆瓦,相当于内布拉斯加州 81 座卡尔霍恩堡核电站。另一方面,所提出的节能技术可以用来为虚拟机器供电的设备(如 Android 系统的 Dalvik VM)开发更好的功耗-性能平衡算法。
本文的组织结构如下。首先,运行时使用单个内核对 JVM 软件组件的行为进行分析,以验证其
各个阶段。其次,利用多核技术研究了 JVM 软件组件的运行时行为,详细说明了它们之间的交互作用。第三,分析了具体阶段,如执行阶段、存储阶段和空闲阶段,以观察节电能力。最后,在研究 JVM 软件组件的基础上,提出并验证了 JVM 的节能策略。
2 背景和相关工作
本章介绍与应用程序服务器、JVM、垃圾收集和当前节能技术相关的术语和定义。值得注意的是,在本研究中, 术语“应用服务器”是指基于 Java 的应用服务器。
2.1 应用服务器的结构
为了达到安全性和可移植性的要求,通常使用 Java 技术将 Web 应用托管在应用服务器上。应用服务器可以被认为各种类型的 Web 应用的容器,例如 Servlet、Enterprise JavaBeans
(EJB)和 JavaServer Pages(JSP)。这些 Web 应用程序使用应用程序服务器作为接口来利用外部资源,
例如硬件、网络和数据库。
基于 Java 的应用程序服务器的结构如图 1 所示。Java 2 Enterprise Edition(J2EE)库提供了 Web 应用程序的支持。此外,利用 Java 2 Stand Edition(J2SE)的 JVM 将 Web 应用程序的字节码解释为机器代码,然后在硬件上执行。值得注意的是,应用服务器是使用 JVM 实例执行的。为了利用 JVM 中可用的运行时信息来减少能量浪费,本文研究了 JVM 的行为。
2.2 Java 虚拟机的结构
图 1.Java 应用服务器的结构
在 JVM 中,垃圾收集器用于收集不可访问的对象,这些对象被视为垃圾。内存访问的高延迟通常导致 CPU 等待来自存储器的结果。能量由等待 CPU 消耗,没有提高系统性能。因此,垃圾收集的阶段可能是 JVM 的节能功能。JVM 的结构如图 2 所示
图 2.Java 虚拟机结构
基于对 JVM 软 件 组 件 的 分 析 , 我 们 假 设 JVM 的 vm_thread 和垃圾收集器的行为可能是应用服务器的节能能力。这个假设将通过 vm_thread 和垃圾收集器的进一步行为分析来验证。
2.3 相关工作
随着硬件组件变得比以往更加耗电,长时间运行的服务器的功耗正成为一个有趣的话 题。最近的研究[10-12]已经证明,通过在特定硬件组件上应用较低的功率电平,可以减少功耗。此外,由于服务器系统对 CPU 的能源需求巨大,许多研究关注于降低 CPU 的功耗[5]。
Weiser 等人[13]已经证明使用动态电压调节(DVS)来减少 CPU 的能量浪费。进一步研究 [14-16]探索了 DVS 技术在实时系统。
值得注意的是,还有更多方法可以降低云/数据中心的节能效果。如数据中心和内容交 付网络的节能技术研究[51- 52]。这些研究表明,分布式数据库体系结构在减少功耗方面具有很大的潜力。使用虚拟化技术还可显著节省电能[53]。通过负载感知调度,能源管理效率 更高[54-56]。然而,这
些方法需要不同服务器之间的更多协调,因此需要进行副作用评估。
这些研究侧重于相位观测的方法。应用阶段信息可以用来调整目标系统的功率水平,从 而达到节能的目的。相位观测方法可分为两大类:性能监测器的剖面分析和使用。
有许多基于剖析方法的节能研究。Delaluz 等人[17]和 Hsu 等人[18,19]使用编译器指导的剖析方法来降低功耗。在离线剖析的基础上,将特定功率电平的相变指令插入到应用程序的 二元代码中。
然而,额外的剖析工作导致不可避免的开销。此外,编译器指导的评测一次仅适用于单个应用程序。在运行时,其他进程可能会影响系统状态,并降低目标应用程序的剖析精度。 这导致在多任务和多核系统中分析方法的效率较低或开销较大。我们的方法使用虚拟机中已有的运行时信息,而不是分析中的额外工作。因此,可以限制相位检测的开销。
另一方面,性能监测器的相位检测在工业和研究中得到了广泛的应用。性能监测器的信 息可以通过运行时间统计、内置硬件寄存器和外部传感器来观察。运行时间统计[20-23] 的使用(如处理器使用)是减少能源浪费的常用方法。一些研究使用性能计数器(一组 CPU 的内置寄存器)来检测相位并调整功率水平[24,25]。
此外,使用外部传感器(如热探头)来观察发热并调整功率水平也是常用的方法[26-28]。 一些研究使用一组硬件寄存器(如停止周期数和失效指令)来检测相位并调整功率水平
[29-31]。此外,一些研究利用硬件寄存器的信息来改进任务调度,并达到节能的目的[32,33]。 由于性能监测器的变化,只能在换相后才能观测到,因此这种方法可以保持能量浪费和性能退化的可能性。为了消除这种可能性,
在所提出的方法中提出了预先相位检测。通过运行时间信息可以精确观察各阶段这在 JVM中已经是可用的。精确的相位信息可以用来调整适当的频率,从而通过性能维护来最大程度 地减少能量损耗。
与上述传统的节电方法相比,基于虚拟机(VM)的节电方法很少被证明。Fries 等人[34]提出一种方法来寻找一组 VM 在多个硬件平台上的优化布局,以降低能源成本。提出了一种在线方法来配置虚拟机的配置并减少物理主机的数量[35]。提出动态重新调度以配置处理
VM 的异构工作负载[36]。然而,这些方法的相位检测是基于性能监控器的使用。因此,这些方法不能像使用 GVM 方法那样精确地检测相位。
3 JVM 软件组件分析
为了利用 JVM 中的运行时间信息达到节能的目的,提出了对 JVM 软件组件行为进行分析的实验。实验步骤如下。首先,详细介绍了实验装置。其次,利用单核技术分析了 JVM的软件组件。因此,可以分别观察每个 JVM 的软件组件的行为。最后,利用多核技术研究了每个 JVM 软件组件的交互。从而详细说明了各部件之间的相互作用。基于实验结果,阐明了 JVM 软件组件的行为,以开发节电策略。
3.1 实验设置
所有的实验都是在一台配备英特尔四核 CPU 的 Q6600 处理器的服务器上进行的。允许单独调整每个核心的频率。Intel Q6600 的四种可用频率分别为 2.4Ghz、2.13Ghz、1.87Ghz 和 1.60Ghz。本实验采用 Fedora Core 14 内核版本 2.6.35 和 Sun 的 Java System Application Server
9.1 作为操作系统和应用服务器。
为了评估各种节能方法的性能,测量处理器功耗的适当技术非常重要。在一般的软件方 法中,例如 CMOS 电路的动态功率测量,CPU 的功耗被表示为每个核的电压加频率的平方值。然而,软件方法仅测量动态功耗。由于漏电流问题,静态功耗在现代处理器中变得很大
[37]。缺乏静态功率测量可能导致 CPU 功耗评估不准确[38]。
为了改善这个问题,提出了一种新的硬件方法[39]。用两个精确的数字功率计来测量过程功耗。专用电子插座(称为电压调节模块(VRM)[40])的电流和电压变化,集成在主板上,为主处理器供电。VRM 由多个并联转换器组成,通常具有响应来自处理器的信号的特
殊控制,例如电压识别(VID)。值得注意的是,电压调节器的输出电压根据处理器的要求而变化。
3.2 多线程 Java 基准
为了接近 Web 应用程序的多线程特性,本研究研究了五个广泛使用的多线程 Java 基准。它们是 Dacapo 基准套装中的 Eclipse 、 Hsqldb 、 Lusearch 和 Xalan[42] , 以及
SPECjbb2005 基准[43]。这些多线程基准执行各种类型的工作负载,以呈现 Web 应用程序的特性。
此外,为了使用应用服务器验证所提出的节能方法的性能,在实验中使用了两个广泛使用的 Web 应用程序基准 SPECjAppServer2004 和 RUBiS。SPECjAppServer2004 [44]使用 J2EE API 的大型代表性样本来评估单个系统的性能。RUBiS [45]是一个仿效 e-Bay 的在线拍卖网站。实验性
SPECjAppServer2004 和 RUBiS 基准测试的结果用于表示实验应用服务器 Sun 的 Java System Application Server 9.1 的性能和功耗。
3.3 垃圾收集器的行为分析
由于 Hotspot JVM 的市场份额最高,因此在实验中使用了 OpenJDK 1.7 [46]附带的先进 Hotspot JVM。通过使用 HotspotJVM,并行垃圾收集也称为吞吐量收集器。它使用年轻一代收集器的并行版本。旧的(保留的)层代仍使用默认收集器清除。另一方面,并发垃圾收集器 也称为并发低暂停收集器。它与执行应用程序同时收集旧(租用)生成中的垃圾。
值得注意的是,当应用 NewRatio 技术时,使用不同的堆大小可能会产生显著效果。堆的大小可以决定收集的频率,并影响旧对象和年轻对象的局部性。例如,使用更大的堆可以 减少收集的频率。另一方面,由于堆中必须收集更多的对象,因此每个收集的时间消耗将增 加。

图 3.使用不同数量的处理器内核时,主要/次要 GC 的时间消耗
垃圾回收的配置基于 HotSpot JVM 中的默认设置,其中使用的垃圾收集器是世代的垃圾收集器。垃圾收集空间分为两类:
年轻一代和终身教养的一代[47]。复制收集器用于年轻一代。年轻一代针对寿命短的对 象进行了优化。在多次收集之后,现有对象将移至终身层代,因为这些对象具有更长的生存 期。在保留生成中,标记-扫描-压缩收集器用于同时收集垃圾[48]。
为了验证我们的假设,我们提出通过实验来澄清这一假设。在本实验中,使用三个多线程基准测试来检查垃圾收集器的两个主要阶段,即次要垃圾收集(minor-GC)和主要垃圾收集(major-GC)的时间消耗。
为了研究在采用多核处理器和不同 CPU 频率的情况下, 小 GC 和主 GC 的行为,提出了测试小 GC 和主 GC 的时间消耗的实验。GC 的时间消耗越少,表明使用更多的核心或更高的频率可以提高性能。通过实验验证了垃圾收集器的节能能力。
三个多线程基准测试(Hsqldb、Xalan 和 SPECjbb005)的次要 GC 时间消耗如图 3(a)至(c)所示。可以观察到,使用更多的处理器内核可显著降低副 GC 的时间消耗。此观察结果表明,gc_threads 可以利用次要 GC 中所有可用的多处理器内核。这也表明 gc_threads 进行并行收集。
另一方面,当使用不同的 CPU 频率时,观察到副 GC 的时间消耗略有变化。这一观察表明, 处理器正在等待内存访问,对象从年轻一代移动到老一代。由于存储器访问的速度远低于处理器的速度,所以处理器必须等待存储器访问,并导致大量存储器暂停。基于这种观察,可以假设小 GC 与记忆阶段而非执行阶段高度相关。值得注意的是,可以最小化 CPU 频率以
减少存储器阶段期间的能量浪费,而不会显著降低系统性能。因此,次要 GC 可以被认为是JVM 的节能能力。
主要 GC 的时间消耗如所示。
图 3(d)至(f)。当处理器内核数量增加时,观察到时间消耗的轻微变化,而不是次要 GC。另一方面,当 CPU 频率增加时,观察到时间显著减少。观测结果表明,主 GC 的性能与处理器的计算能力相关。因此,与记忆阶段相比,主要 GC 与执行阶段高度相关。
此外,主要 GC 不能利用使用多个核心,这可以通过使用不同核心的类似时间消耗来观察到。
处理器内核。当使用 major-GC 时,使用锁来保证在修改 Java 堆的过程中没有其他 JVM线程。因此,可以正确地完成全局工作。因为在 major-GC 中只有一个 JVM 线程可以工作,所以使用多个处理器内核并不能减少 major-GC 的时间消耗。
简言之,次要 GC 利用了多核,但没有增加 CPU 频率。 因此,可以假设使用所有可用核并将它们设置为最小 CPU 频率的配置可以导致次要 GC 的性能保持和能量损耗的降低。另一方面,由于主要 GC 利用了高 CPU 频率,而不是多处理器核心。可以假设,使用具有最大 CPU 频率的单核可能会为主要 GC 带来高性能和低功耗。
为了验证这些假设,下一节提出了基于不同处理器核数的实验。通过特定的硬件事件, 对次要 GC 和主要 GC 的行为进行了详细的分析。因此,可以进一步详细描述作为省电能力的垃圾收集器的耗时和耗电。
3.4 单核 JVM 软件构件的研究
为了验证这些假设,本节提出了使用单个内核的实验,以详细说明每个 JVM 的软件组件的特定行为。通过使用单核,JVM 作为单线程应用程序工作。因此,每个 JVM 的软件组件按顺序执行。因此,可以避免多线程和多核的交互,从而可以观察和分析每个 JVM 软件组件的特定行为。
为了详细说明每个 JVM 的软件组件的特定行为,监视硬件事件以确定组件的阶段。通过访问 CPU 中内置的性能计数器,监测两个重要的硬件事件 Instr_Ret 和 IFU_Mem_Stall 。
Instr_Ret 统 计 失 效 指 令 数 ,IFU_Mem_Stall 统计 CPU 等待内存访问结果时的暂停周期数。
此外,还使用了一种称为“每次指令的暂停周期”(Stall Cycle Per Instruction,SCPI)的特殊度量来分析多线程基准的阶段。SCPI 定义如下:

其中 Mem_Stall 和 Instr_Ret 都是内置的硬件事件。Instr_Ret 表示失效的指令数。Mem_Stall表示停滞周期,反映 CPU 需要等待来自存储器的所需输入数据的时间。
在本实验中,使用较低的 SCPI 值来指示执行阶段,因为这意味着高 CPU 工作负载。另一方面,SCPI 的高值用于表示存储器阶段,这通常意味着 CPU 等待存储器请求,并且实际上意味着降低 CPU 频率的定时。

图 4.JVM 的全局行为
有四个图用于表示 JVM 软件组件的性能。JVM(包括 JVM 的所有软件组件)的全局行为如图 4 所示。主要 JVM 软件组件(vm_thread 和 gc_thread)的行为如图 6 和 7 所示。失效的指令数和 SCPI 值是用来表示 JVM 及其软件组件的行为的两个度量。所有图中的时间刻度
(X 轴)均相同。从而达到 JVM 软件组件之间的比较。并且主 GC 和次 GC 的脱离定时以相同的时间标度(X 轴)显示,因此可以观察 GC 的周期,并与 JVM 的软件组件的性能进行比较。
图 5.VM_thread 的全局行为
与图 4 中 JVM 的全局行为相比,可以看出,大多数 Instr_Ret 是由图 5 和图 6 中的 vm_thread和 gc_thread 生成的。值得注意的是,vm_thread 和 gc_thread 都与垃圾收集(JVM 的节能功能)高度相关。为了详细说明软件组件和垃圾收集器的相关性,图 7 显示了垃圾收集的周期
(包括次要 GC 和主要 GC)。
图 6.gc_thread 的行为
在 major-GC 中,在图 7 中的 vm_thread 中观察到大量的 Instr_Ret。然而,大的 vm_thread 的
Instr_Ret 编号仅导致几个 SCPI 在主要 GC 中的价值。该观察表明,在主 GC 中生成了很少的内存访问暂停周期。vm_thread 访问所有对象并发现不可访问对象的工作量导致了这样的观察。因此,由于 vm_thread 的存储器访问暂停周期较少,主要 GC 的周期被视为执行阶段。
图 7.主要 GC 和次要 GC 的聘用/解除聘用时间
此外,在图 7 中每个主要-gc 的末尾都观察到 SCPI 值的显著峰值。在执行轮中,SCPI的峰值分别为 8.76 秒、9.43 秒、10.05 秒和 10.32 秒。SCPI 的峰值是由于大量的内存访问停止周期,这是由 gc_thread 的垃圾收集产生的。由于观察到大量的内存访问停滞周期,一个主gc 的结束应该被视为内存阶段。
另一方面,在每个次要 GC 中观察到显著的 SCPI 值。比较图 7 中 vm_thread 和 gc_thread 的
Instr_Rets 值,可以看出大多数 Instr_Rets 是由 gc_thread 生成的。同时,gc_thread 还会生成大量的内存暂停周期。因此,它在次要 GC 中导致显著的 SCPI 值。该观察证实了以下假设: 轻微 GC 高度与记忆阶段相关。
简言之,由于 vm_thread 的行为,主要 GC 的阶段被视为执行阶段。此外,major-GC的结束(gc_thread 收集垃圾的时间段)应被视为内存阶段。另一方面,由于 gc_thread 的行为,次要 GC 应被视为内存阶段。值得注意的是,使用 JVM 中已有的运行时信息可以观察 到主 GC 和次 GC 的占用和脱离定时。从而达到精确的相位确定,从而开发 JVM 的节能策略。
3.5 多核 JVM 软件构件的研究
一般来说,现代多线程应用程序可以通过使用多个核心处理器来利用。然而,由于软件 和硬件的相互作用,如锁、任务调度、并行性和缓存局部性。多线程应用程序可能无法充分 利用所有可用内核的优势。此外,这种相互作用可能导致能源浪费。例如,较差的任务调度 可能导致一个处理器核等待另一个核,然后由于处理器核的空闲等待而导致能量浪费。
为了分析使用多核的软硬件交互作用,本实验用多核处理器(四核)测试了两个多线程基准 Hsqldb 和 Xalan。由于第 3.4 节的发现,垃圾收集可能是 JVM 的节能能力,因此本实验进一步研究了主要 GC 和次要 GC 的交互。两个多线程基准的实验结果如下所示。对于 Hsqldb基准点,失效的指令数量、SCPI 值和 GC 的启用/断开时间如 图 8(a)至(c)所示。对于
Xalan 基准,如图 8(d)至(f)所示。这些图中的时间刻度(X 轴)相同。实验结果分析如下:
首先,与图 8 中 Instr_Ret 的数量和主要 GC 的接合/分离时序进行比较(a)至(c),仅在一个核心中观察到大量 Instr_Ret。另一方面,与其他核心同时观察到极少数量的
Instr_Ret。此外,在图(d)至(f)中使用 Xalan 观察到相同的主要 GC 的实验结果。导致这一现象的原因详述如下 :
对 JVM 的全局工作使用锁导致了主要 GC 中的这一观察结果。在 major-GC 中,vm_thread使用锁机制来避免堆被其他 JVM 线程修改。因此,可以保留堆中对象的状态。通过使用锁,
vm_thread 可以访问 Java_thread 和堆的堆栈,以找到不可访问的对象。然而,锁的使用可能导致其它核空闲。这似乎是导致对主 GC 进行具体观察的原因,只有一个核心工作,其他核心处于闲置状态
其次,仅在进行主要 GC 的岩心中观察到 SCPI 的低值。这是由于主 GC 中 vm_thread 的行为。通过标记不可访问对象,对象的状态被改变,但不会被收集。因此,产生较少的存储器存取停顿。这表明 vm_thread 执行的核心与执行阶段高度相关。另一方面,在其他空闲核中可以观察到极高的 SCPI 值。此观察结果详细说明了使用多个内核的主要 GC 的行为。在 major-GC 中,一个 vm_thread 使用的 core 被看作是执行阶段,其他 core 与空闲阶段相关。最后,在次要 GC 中,大量 Instr_Ret 并且在所有岩心中观察到高的 SCPI 值。Instr_Ret 的
高数
量表示垃圾收集器利用次要 GC 中的所有可用核心。高 SCPI 值的观察证实,小 GC 与记忆阶段高度相关。由于可以在所有可用内核中观察到大量 Instr_Ret,因此该观察结果验证了并行垃圾收集器在次 GC 期间是否正常工作。所有的核都工作在一个子-GC 中,并且所有的核都与记忆阶段相关。
这些垃圾收集器的发现提供了 JVM 的节能功能。首先,主要 GC 中空闲内核的 CPU 频率应最小化,以减少能源浪费,因为它们正在空闲等待锁。值得注意的是,CPU 频率调整不会降低系统性能,因为频率调整仅应用于空闲内核。其次,应该最大化 vm_thread 执行的特定内核的 CPU 频率,以保持主要 GC 中的垃圾收集性能。第三,应最大化垃圾收集中所有可用内核的 CPU 频率,这在主要 GC 结束时观察到。最后,由于次要 GC 与存储器阶段高度相关,所有可用核心的频率应在次要 GC 中最小化。
3.6 研究总结
作为简要总结,本研究的结果如下所示。首先,主要只有一个核心工作——GC,其阶段是执行阶段。其次,主要 GC 中的其他核是空闲阶段。最后,所有核都可以在次 GC 中工作, 并且它们的阶段是存储器阶段。此外,在实际改变这些阶段之前,可以通过 JVM 的运行时间信息来观察这些阶段的开始和结束。基于这些发现,下一节提出了绿色虚拟机(GVM) 方法的节能算法和实现。

4 JVM 的节能策略
图 8.Hsqldb 和 Xalan 在四核下的行为
基于以上发现,本节提出了 JVM(也称为 Green Java 虚拟机(Green Java Virtual
Machine,GVM))的节能策略。GVM 节电算法结合了两种节电算法,即主-GC 和次-GC。此外,本节还讨论了 GVM 节能方法的优点。
4.1 节能策略的算法
基于垃圾收集器的相位分析,提出了 GVM 省电算法来利用 JVM 中的运行时行为。由于小 gc 和大 gc 的行为不同,GVM 算法由以下两部分构建。
首先,利用主要 GC 的 JVM 的节电能力,开发了主要 GC 节电算法。根据实验结果,可以将一个主 gc 看作是执行阶段、空闲阶段和内存阶段的组合。执行阶段为 在 vm_thread 执行的核心中观察到,而在其他核心中观察到空闲阶段。此外,在主 gc 结束时,所有可用核心都成为内存阶段,因为垃圾。
vm_thread 执行的特定核心的 CPU 频率应该最大化,以保持主要 gc 的性能。应尽量降低空闲核的 CPU 频率,以在不降低性能的情况下减少能量损耗。在一个专业的最后 GC,
所有可用核的 CPU 频率应该从内存阶段开始就被最小化。在此基础上,在 Algorit 中提出了主要的 gc 省电算法。
算法 1。Major-GC 的节能算法
在主 GC 节电算法中,主 GC 的接入/脱离定时可以通过 JVM 的运行时间信息来观察。此外,vm_thread 执行的特定核心(Cv)也可以通过 JVM 的运行时间信息来观察。在大 GC期间,Cv 的 CPU 频率被最大化以保持性能。另一方面,空闲核(Ci)的 CPU 频率被最小化以减少处理器的能量浪费。当 vm_thread 完成不可访问对象的查找时,所有可用核心(Ca)的 CPU 频率应最小化,因为垃圾收集是内存阶段。在大-GC 之后,所有核都正常工作,因此需要最大化 Ca 的 CPU 频率以保持系统性能。值得注意的是,CPU 频率调整不会降低系统性能,因为调整仅适用于空闲内核(Ci)。
算法 2.Minor-GC 的节能算法 JVM 的另一种节能能力,即 minor-GC,用于开发 Minor GC 节能算法。基于上述研究,次
要 GC 被视为所有可用核心的记忆阶段。基于这一发现,在算法 2 中提出了小 GC 节电算法。在 Minor-GC 节能算法中,可以通过 JVM 的运行时间信息来观察 Minor-GC 的接入/脱离
定时。由于次要 GC 与内存阶段高度相关,所有可用内核的 CPU 频率应降至最低,以等待内存访问。因此,在小型 GC 中可以减少能量浪费。
根据图 8(e)和 8(f)中的观察结果,不会同时激活大 GC 和小 GC。这意味着大 GC 与小 GC 的周期不重叠。因此,可以将主要 GC 和次要 GC 节电算法集成为算法 3 中的 GVM 节电算法。
算法 3.省电算法
GVM 节电算法可以看作是算法 1 和算法 2 的集成。GVM 节电算法可以充分利用
Minor-GC 和 Major-GC 的优势。所有的 GVM 节能算法,包括主 GC、小 GC 和 GVM,都是用 Sun 的 Hotspot 和 Jikes RVM 来实现的。与广泛部署的商用 JVM Sun Hotspot 不同,Jikes
RVM 可以作为学术性的
JVM 进行研究。基于这两种 JVM 的实验结果,证明了所提出的 GVM 方法的功率效率。
GVM 节能方法的实现如图 9 所示。从技术上讲,这涉及(1)为检测空闲、执行和内存阶段的应用程序服务器的 JVM 提供工具,以及(2)调整设备/服务器的 CPU 频率的过程。
前者对应于定时通知模块,其被添加用于观察和收集所需的 GC 信息,例如关于主要
GC 或次要 GC 阶段的开始和结束的定时信息。后者通过频率调整模块实现,该频率调整模块被嵌入到内核中以有效地调整 CPU 频率(根据请求)。所有请求均来自定时通知模块。还值得注意的是,频率调整模块包括内嵌汇编代码,其可以通过访问 CPU 的一些特定寄存器来直接调整 CPU 频率。因此,与基于用户级调用的方法相比,我们调整 CPU 频率的方法更有效;频率调整所需的 CPU 周期被最小化。

图 9.拟定战略的实施
4.2 提出的 GVM 节电策略的优点
为了进一步分析广义支持向量机(GVM)的节能效果。分析了 GVM 方法的优点,包括相位检测、精确的相位定时、精确的相位确定和性能维护。
首先,相位检测在大多数节电方法中起着重要的作用。基于相位检测的结果,可以应用 适当的 CPU 频率以减少能量浪费。然而,相位检测通常会导致系统开销,降低系统性能。例如,额外剖析工作的需求可被视为剖析方法的开销。此外,性能监控器访问还导致性能监 控器省电方法的开销。
值得注意的是,GVM 节能方法的阶段检测是基于 JVM 中已有的运行时信息。例如大 GC 和小 GC 的接合/脱离时机。此外,主要 GC 和次要 GC 的特定阶段是恒定的并且已经观察到。因此,相位检测不会导致 GVM 节能方法中的开销。
其次,相位计时不准确是节电方法的缺点。性能监视器。只有在实际行为已经出现在性 能监控器中之后,才识别特定阶段。总是落后一步。相位计时不准确会导致不必要的性能下 降和能量浪费。
另一方面,垃圾回收的周期可以精确地用垃圾回收器的占用/脱离时间来标记。定时可用于确定 JVM 的阶段。此外,由于 JVM 的中间件特性,这些阶段实际上可以在硬件上出现之前被观察到。因此,通过 GVM 节电方法可以达到精确的相位定时。
第三,在分析节能方法中,观察到的阶段可能会受到运行时间中的其他任务的影响。这 导致观察相与剖析相不同。相位信息不准确可能导致频率调谐不当,从而导致不必要的性能 下降和能量浪费。
另一方面,通过 GVM 节能方法可以达到精确的相位确定。由于 GVM 的节能算法集中于垃圾收集器的阶段,这与 JVM 本身相关,而不是与应用程序相关。即使使用不同的应用,垃圾收集器的相位也是稳定的。因此,GVM 的相位确定不会受到应用的影响。可以避免不 必要的性能降级和能量浪
费。
最后,GVM 的节能优势改善了其它节能方式的性能下降问题。由于不可避免的相位检测开销、不准确的相位定时和不准确的相位确定,系统性能通常会下降。然而,主要 GC 节
电算法提出了具有良好性能维护的节电解决方案。因此,对于对性能要求高、响应速度快的Web 应用服务器,主 GC 算法是一种节能的解决方案。
5 实验结果
在本节中,检查了 GVM 省电方法的性能,并与其他省电技术进行了比较。五个广泛使用的 Java 多线程基准测试被用于使用 Sun 的热点来评估节能技术的性能。此外,还使用两个多层 Web 应用程序基准 SPECjAppServer2004 和 RUBiS 来验证 GVM 与两个 JVM(Sun Hotspot 和 Jikes RVM)的性能。基于这些实验结果,可以检验和阐明 GVM 的性能。
值得注意的是,功耗不能准确指示功率效率,因为较低的频率设置(CPU)可能会显著降低系统性能。因此,这里使用另一种称为能量延迟积(EDP)的度量来评估功率效率。EDP 值定义为功耗与执行时间平方的乘积。由于该措施同时考虑了能量和同时延迟,EDP 值可以更好地反映功率效率。通常,较低的 EDP 值表示较好的功率效率。
5.1 节能技术比较
为了比较 GVM 节能方法与其它节能技术的性能,本文提出了 6 种电源配置来检验节能技术的性能和功耗。实验功率配置如下所示。
首先,在实验中使用两个静态 CPU 频率,即最大和最小频率作为对照组。这两个静态配置映射到 Linux 中的性能和节能调节器。通常,使用最大频率导致最佳性能,使用最小频率导致最差性能。此外,由于执行时间长,使用最小频率通常会导致相当大的功率消耗。
其次,采用 GVM 的两种节功算法,主要 gc 节功算法(算法 1)和次要 gc 节功算法(算法 2)来检验其性能。此外,另外两种配置分别是指 Linux 节电调节器、按需型和保守型。这两个节电调节器将根据观察 CPU 的工作负载来调整频率。当 CPU 负载较高时,使用按需调节器通常会立即切换到最高频率。这样可以很好地保持系统性能,同时导致更多的能量损 耗。另一方面,使用保守的调节器可以逐步增加频率。因此,可以观察到轻微的性能下降和更少的能量损耗。这两个 Linux 省电调节器很受欢迎,实际上可以用来表示基于性能监视器的省电方法。
为了比较按需和保守的组合,对合并调节器 Smartass 进行了评估。Smartass 可以看作是保守和按需对立的最佳特性的融合。该调节器试图通过关注理想频率来平衡性能与效率。
在这些实验中使用了所有可用的核(四核),每个核的 CPU 频率都可以独立调整。系统性能、功耗和 EDP 的实验结果如图 10 至 12 所示。最大 CPU 频率的结果已归一化到 1.0, 然后,对于每个电源配置,结果被归一化为最大频率的结果。
首先,我们观察到,只有使用主要的 gc 省功算法才保持了与图 11 中使用最大频率相似的性能,只有 2%的退化。与保守方法和按需方法的性能下降 10%到 16%的性能下降相比, 主要的 gc 省电算法可以更好地保持系统性能。
此外,应用主要 GC 省电算法后,能量显著降低(15%至 29%),如图 12 所示。主要
GC 算法的功耗降低幅度高于保守和按需算法的功耗降低幅度(10%至 16%)。此外,在图
13 中,使用 major-GC 算法导致大多数基准中 EDP 值最低(Lusearch 除外)。这些结果表明,主 GC 节能算法在不降低性能的情况下显著降低能量损耗,并导致 EDP 的最小值。
图 11.各种节电技术的功耗。
与主 gc 算法相比,小 gc 算法的贡献越少。然而,在某些特殊情况下,小 gc 算法显示出了它的重要性,不能被替换。例如,值得注意的是,使用的主要 GC 算法无法降低图 11 中 Lusearch 基准测试的功耗。由于 Lusearch 的内存空间要求较少,因此在运行时不会生成任何主要 GC。因此,在该特殊情况下,使用主 GC 算法不能减少任何能量浪费。
另一方面,使用小 gc 算法导致 Luserch 减少 23%的能量,6%的性能下降。这表明,主
GC 算法和小 GC 算法应该集成一个针对应用服务器的综合节能解决方案。集成的节电方法,
GVM 省电算法(算法 3)应该是应用服务器的综合解决方案。
图 12.各种节电技术的 EDP
最后,对这些实验的总结如下。使用主要的 gc 省功算法在不降低性能的情况下降低了显著的功耗。根据统计数据,合并调节器 Smartass 的性能与在各种实验设置中使用的按需性或保守性的使用非常相似。平均而言,这些差异还不到 2.5%。然而,在某些特殊情况下,使用主-gc 算法可能不会减少任何能量浪费。因此,综合节电解决方案应由主 gc 算法和小
gc 算法集成。下一节将通过使用 web 应用程序基准测试来研究集成的 GVM 省电算法。
5.2 使用 Web 应用程序基准的验证
为了验证使用集成 GVM 节电算法可以达到本研究的目的,对应用服务器进行了节电和性能维护。两种广泛使用的 Web 应用程序基准(SPECjAppServer2004 和 RUBiS)以及两种广泛使用的 JVM(Hostspot 和 Jikes RVM)被用于评估 GVM 节能方法的性能。本实验考察了主 GC 算法(算法 1)
和 GVM 节能算法(算法 3)的性能。性能、功耗和 EDP 如图 13 至图 15 所示。
图 13.Web 应用基准的系统性能
在本实验中,可以观察到 GVM 节能算法在单调环境中的显著优势。通过使用 GVM 算法,在图 13 中可以观察到两个基准测试中的 14%到 23%的能量减少。此外,在图 13 中,
GVM 算法的性能下降不到 4%。与保守和按需节能方法的 10-16%的节能和 8-12%的性能下降相比,验证了使用 GVM 省电算法的性能更好。此外,使用 GVM 省电算法导致 EDP 在图
15 中 EDP 值的最小。基于实验结果,GVM 算法可以为长期运行的 web 应用服务器提供一种有效的、全面的省电解决方案。
图 14.Web 应用基准的功耗
另一方面,研究了主 gc 算法的性能维护。在图 14 中,当使用主要-gc 算法小于使用最大频率时,只观察到 2%的性能下降。与使用 GVM 算法降低的功耗相比(14%到 23%),主要 gc 算法降低的功耗更小(15%到 29%)。然而,使用 magor-
全套毕业设计论文现成成品资料请咨询微信号:biyezuopin QQ:2922748026
返回首页
如转载请注明来源于www.biyezuopin.vip