阅读更多

 现在有越来越多的产品服务器在运行着托管代码,无论是Java、.NET、Ruby还是Python,然而无论是硬件还是操作系统,其基本设计上都没有考虑到对这种情况进行优化。这导致的一个问题就是在垃圾收集(GC)时所产生的停顿现象。

  对于众多的企业架构师和开发者来说,一方面越来越多的程序被放在了内存当中,另一方面GC会产生停顿现象,如何权衡这两者已经成为一个棘手的问 题。在企业级Java中,这种停顿所带来的影响可以通过分布式程序(降低堆的大小)来缓解,或是通过其他技术解决,譬如在吞吐量比响应时间更为重要的情况 下,可以通过异步调用以“批处理”的方式解决。

  虽然从工程角度来看,这些解决方案是合情合理的,但结果却并不理想。在与Azul Systems技术副总裁兼CTO Gil Tene的对话中,他对目前的情况和DOS时代的核心与扩展、增强的内存模式进行了比对,后者的设计目的是在PC支持的情况下,充分利用640KB限度之 上的内存。

我们的经验与推测表明在运行普通的企业负载的情况下,单核的至强可以产生~0.5GB/sec的新对象。由于现在每个 Socket可以持有6~8个核心,因此$20K以下的系统可以持有12~48个核心,这样在现代系统(假设CPU的实际处理能力都用在了有用的地方)上 就会达到5-15GB/sec的分配率。

上面提到的~0.5GB/sec有些主观臆断,说的不太清楚,我们所看到的实际范围(每个核心从150MB到1+GB/sec不等)取决于工作负 载。如果主要工作是“转换型”负载(比如消息总线、Web应用、集成服务器、DB为中心的事务性负载、数据缓存等等),那么分配率就会高一些;如果主要工 作是数字计算型负载(比如蒙特卡罗模拟、加密、压缩、有限元分析等等),那么分配率就会低一些。可以通过常见的工业基准找到一些支撑数据,但我并不热衷于 这些基准,主要是因为他们都忽略掉了真实世界的GC效应。关于GC,这些基准普遍存在的一个盲点是他们都是人们刻意制造出来的,但在运行时却忽略掉了GC 效应,没法填满一台现代服务器并进行度量。通过与假设保持紧密的一致性并避免长期的堆搅动问题(会在运行期导致实际的压缩GC事件),他们可以长时间维持 基准以度量吞吐量,接下来在包含的时间窗口之外产生完整的GC事件时有意忽略掉不可避免的失败情况。然而,就像这些基准没法推断负载下真实世界的应用行为 一样,可以在每个OP分配时(几个调查已经做过这些事情了)度量其工作量,之后的数据就可以用于表示这些负载上的对象分配率了(以及生成的垃圾)。

举个例子吧:

JOP是SPECjAppServer2004基准中的操作度量(我想它代表的应该是Java操作),请查看www.spec.org来了解详情。这是一个单元数,表示没有什么东西超出了度量,但可以比较基于同样基准的结果。

编辑注:

这些OP数来自于

  Azul Systems通过内置于硬件中的对写与读屏障的直接支持来解决垃圾回收问题。Dr. Cliff Click最近曾向InfoQ解释过

...可以切换到更简单的GC算法上:简单的算法更易于达到并行、可伸缩、并发以及健壮的要求。我们早就转换算法了,相比于其他竞争者来说,GC所能处理的堆容量(以及分配率)要超出一个数量级。

  Tene说到即便是硬件,尤其是Intel和AMD最新的芯片都对托管负载提供了良好的支持,这样Azul GC算法就能同时应用在这两家处理器上了:

特别地,对于Intel来说,这意味着芯片包含了EPT(Extended Page Table)特性(首度出现在Intel的至强55xx中,后来的至强56xx、65xx和75xx也都加入了);对于AMD来说,芯片包含了NPT(又 叫做AMD-V Nested Paging)。这些新的虚拟内存架构特性(EPT和NPT)都支持我们的GC算法,同时在x86平台上还有读屏障和高持久性的虚拟内存映射变化率。 Vega处理器包含了一个客户化的读屏障指令,它具有字段检查元数据和针对GC压缩页面的特殊的虚拟内存保护。我们基于x86的JVM使用多种x86指令 执行与Vega读屏障操作相对应的语义,还使用了x86虚拟内存子系统来重新映射并保护GC压缩页面,这也达到了同样的读屏障效果,同时对于 Pauseless GC算法来说也保证了算法的不变性。“读屏障”指令集是由JIT编译器发出的,并有效地融入到了正常的指令流当中(在这些现代的x86-64核心管道中拥 有足够的空间来容纳他们),虚拟内存操纵使用了新的OS API以追上大量虚拟内存映射变化率的步伐(超出大多数OS所能保持的100多倍)。好处是借助于现代的x86核心中的EPT/NPT和健壮的 TLB(translation look-aside buffer)支持,我们可以轻松保持GB/sec的分配率:这仅仅是对软件所作的修改(比如OS内核),也是我们的Managed Runtime Initiative的用武之地。

  Managed Runtime Initiative目 标是采取整体研究的方法。它关注可伸缩性和响应时间的改进,旨在增强垂直组件和系统堆栈(比如运行时、内核、OS及管理程序)的接口。该项目有一个参考实 现,包含了对OpenJDK(Java 6)和可加载的Linux内核对象(LKO)的增强,还有一些模块提供了新的功能与接口,他们都基于GPLV2许可。

  Azul为Linux内核发布了一个针对GC优化过的内存管理、策略增强组件和新的资源调度程序,该程序兼容于Red Hat Enterprise Linux 6、Fedora C12和Suse。对于OpenJDK来说,该发布包含了一个新的JIT编译器,不会停顿的垃圾收集器和可伸缩的运行时。Azul systems说JVM与Linux的组合对运行时的增强是现在的100倍,对象分配率也提升了两个数量级(以及支持的堆大小)。

  该项目还得到了Java编程语言的发明者James Gosling的支持。新闻如是说:

我对Managed Runtime Initiative以及Azul对开源社区的贡献感到兴奋。管理运行时由来已久,可以追溯到上世纪90年代。然而,系统堆栈的其他部分尚无法满足这些普 适应用环境的要求。该项目会给系统栈带来很多新功能,这样管理运行时就会继续其成长和变革之路了。

  开源知识产权的关键部分是个大胆的决定。Azul Systems发展迅速,上个季度的收益比第一季度提高了64%。他们希能从合作者、ISV和厂商那里获得支持以转向其他平台和运行时,比如Windows上的.NET,还有Ruby、Python等。Azul的第二个目标是希望能有商业产品使用优化的Linux和OpenJDK,但这取决于厂商的参与和支持。

  查看英文原文:Azul Systems To Open Source Significant Technology in Managed Runtime Initiative

来自: infoq
2
1
评论 共 1 条 请登录后发表评论
1 楼 无厚之刃 2010-06-23 11:41
这文章讲得不明不白,还是说我有阅读障碍?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • C++ Builder 2010下载地址

    C++ Builder 2010下载地址

  • C++ Builder 11.3 的新特性

    总的来说,C++ Builder 11.3 引入了许多新的特性和改进,旨在提高开发者的工作效率和代码质量,帮助开发者更好地构建现代化的应用程序。

  • 在Windows11下安装 C++Builder

    在之前, 我使用 WinMount 软件挂载 C++ Builder 安装文件, 可以比较顺利的安装这款开发软件。不过, 今天在 Windows11中安装 C++ Builder 的时候, WinMount 软件在挂载文件的过程中总会出错。后来发现, 可以直接使用 Windows11 中右键中的文件挂载功能, 可以将 C++ Builder安装文件挂载成 Z 盘。使用这个方法, 现在能够成功的安装 C++ Builder 软件了。说实在的, C++ Builder开发环境, 是我使用最长的 一款。

  • 【C++ Builder 11】文件和目录的操作

    文件操作方法 目录操作方法

  • 【C++ Builder11】获取文件时间

    获取文件时间

  • 体验 RAD Studio C++ Builder 11.1.5

    这两天,RADStudio有一个针对C++Builder的补丁包发布,也就是11.1.5这个版本。今天抽一点时间体验了一下。主要的改进,就是C++Builder二十年来,代码提示卡和慢的问题。安装完后,打开工程或他建工程,在工程文件框的下方,会多一个状态栏,如下图。建索引的速度并不快,这主要的原因VCL的头文件是一个非常大的。2、正在编辑的文件,没有保存的话,是不会给你新的代码提供代码提示的功能。完成后,就会发现,代码提示是秒开,这点可以点赞。总的来说,有点进步了,但是,还是没有真正解决问题。...

  • ]许多代码段,没准儿有你需要的 C++ Builder

    [code:1:d5dc046d55] 1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.C++Builder如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Deskt

  • C++设计模式课件(11) - builder 生成器 | 构建器 模式

    C++设计模式笔记(10) - Prototype 原型模式: https://blog.csdn.net/mofan6930/article/details/104998680 参考书籍: 《设计模式:可复用面向对象软件的基础》 《Head First 设计模式》 参考课程:《C++设计模式》-李建忠 1.动机 (Motivation) ➢在软件系统中,有时候面临着“一个...

  • C++ Builder初学问与答11

    11.工具条组件 87) 问:工具条是Windows编程经常要用的, C++Builder能不能实现这个功能呢? 答:当然可以,工具条是由许多具有图形的按钮组成的,这些按钮被分隔符分隔成许多组,每个组都能够完成特定的工作。工具条上的按钮具有与位图按钮相似的特性——可以拥有多个位图,当按钮处于不同状态时,例如按下、失效等,将显示不同的位图。以前C++Builder制作工具条的方法是通过把加速按钮放在

  • win10安装RAD Studio 11.1(C++ Builder)以及组件DevExpress VCL v21.1.6

    RAD Studio 11.1安装包 破解工具 DevExpressVCL 21.1.6[CS]

  • C++ Builder中Toolbar控件的一些用法和说明整理

    1、在Toolbar内可以显示图片和文字,图片的放置方式需要images与一个imageList组件想关联。其中有几个概念:imageList 图片如何控制大小? 其实imageList中的图片是可以整体控制大小的,默认是height×weight = 16×16 改成想要的尺寸就可以了imageList 对于背景透明的图片默认是背景是黑色的! 这里要控制ImageList 的ColorDepth...

  • control bar 的用法 转

    MFC技术系列(四)--Frame窗口之Control Bar(1) <br />Visual C++2007-12-25 23:36:11阅读92评论0  字号:大中小 订阅<br /> <br />接上篇,  MFC技术系列(四)--Frame窗口(2)<br />MFC中主要涉及到下面的文件和类:<br />barcore.cpp (CControlBar)<br />dockcont.cpp (CDockContext)<br />bardock.cpp (CDockBar)<br />winfrm

  • C++ Builder

    ---------------------------------------------------------------------------1. C++ Builder 网上资源    C++ Builder 研究    http://www.ccrun.com/    C++ Builder 程序员    http://mybcb.diy.myrice.com/    电脑学习 C++

  • 【C++11】30分钟了解C++11新特性

    2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

  • C++Builder XE5对于C++11的支持真蛋疼

    好不容易下载个XE5,安装,破解,准备测试一下C++11中的lambda,写了一个最简单的表达式: [](){}; 居然编译通不过。 查了帮助文档,才晓得它的编译器分为BCC32和BCC64, BCC32只支持C++0x, 而BCC64才支持C++11,我是在32位虚拟机下面安装的,肯定用不了了。真是蛋疼,又得在64位系统下重新安装。 转载于:https://www.cnblogs.com/swn...

Global site tag (gtag.js) - Google Analytics