语言运行时的混合内存支持

原文来自微信公众号“编程语言Lab”:语言运行时的混合内存支持
搜索关注 “编程语言Lab”公众号(HW-PLLab)获取更多技术内容!
欢迎加入 编程语言社区 SIG-Runtime 参与交流讨论(加入方式:添加文末小助手微信,备注“加入SIG-Runtime”)。

作者 | 吴明瑜

编辑 | Hana

声明:本文档中的所有观点仅代表个人观点,不代表所在研究机构立场

作者简介

大家好,我是吴明瑜,是上海交通大学的老师,我的主要研究兴趣为操作系统和语言运行时,我所在的实验室是并行与分布式系统研究所。我的研究工作更偏系统一些,因为语言运行时本身是一个程序语言和系统的交叉领域。今天带来的分享会更偏系统方面,主要关注如何为语言运行时提供混合内存支持。

个人主页:https://ipads.se.sjtu.edu.cn/zh/pub/members/mingyu_wu/
并行与分布式系统研究所:https://ipads.se.sjtu.edu.cn/zh/index.html

视频回顾

SIG-Runtime技术沙龙回顾|语言运行时的混合内存支持

NVM 简介

由于近年来硬件设备的进步 —— 非易失内存 (Non-Volatile Memory, NVM),使得业界对 混合内存 的概念越来越关注。

那什么是非易失内存 (NVM) 呢?

简单来讲,NVM 相当于一个普通内存的持久化

NVM 既有 DRAM 的字节可寻址 (可以一个 byte 一个 byte 地去选址) ,也有 DRAM 的访存速度 (NVM 的访存速度基本上来说和 DRAM 差不了多少,现在测出来的数据就两三倍,大概是这么一个差别) 。

除此之外,NVM 还结合了传统存储 (比如我们常用的机械硬盘,固态硬盘) 持久化的特性,你写到 NVM 设备上的内容是持久化的,掉电重启后还可以读到。另一个优势和存储也有点像,即 NVM 的容量是比较大的。现在我们能买到的 NVM 设备,最小的都是 128G,当然还有更大的。

以上是 NVM 的一些优点。NVM 其实已经发展了好些年了,只是在更早的时候,比如上世纪 90 年代,或者是 21 世纪初,那时候没有这样的设备,但大家有一些构想。

最近一些年,有人做了 DRAM 和 SSD 配合的一个早期的 NVM 设备,其实就是在普通内存上挂一个后台的固态硬盘,再加一个电容。当你关机或者掉电后,电容会发挥作用,暂时供电。这个过程里,我们会将 DRAM 的数据都写到 SSD 上。所以在那个时候你将这个设备关机,就可以看到内存系统这边会亮灯,然后就开始向 SSD 写数据。

近些年,新介质在逐渐成熟。英特尔在 2015 年宣布了一种 NVM 技术 —— 3D XPoint 1,并且在这个技术上构建了新的 NVM 设备。该设备已经商用 (Intel Optane)。
在这里插入图片描述

3D Cross Point 2 层图示

NVM 可以替代 DRAM 吗

这样的 NVM 设备是否可以用来代替原本的普通内存 (DRAM) 呢?

个人认为,虽然 NVM 有很多优点,但至少现在还是不会代替 DRAM 的,因为与 DRAM 比,NVM 还是有不少缺陷的。

首先,NVM 的访存速度还是略逊于 DRAM,NVM 的带宽也比较小,持久性也会差一些 (更容易写坏) 。在此前提下,NVM 的成本也并没有得到很好的控制。在 NVM 出现后的早期,大家希望可以替代 DRAM 从而降低成本,可是目前的情况来看,成本并没有太大差别。

Device Capacity Price Price per GB
Optane DCPM 128GB $633.22 4.94
Kingston FURY
KF426S16IB/32
32GB $163.99 5.12

目前来看,NVM 想要完成替代还需要一段时间。因此,大家在尝试一个更加实用的选择,即去构建一个 混合内存子系统。简单来说就是把 DRAM 和 NVM 放在一起,做成一个混合内存的架构。
在这里插入图片描述
如上图示,这样的混合架构有两个特征,一是用了 NVM 后整个内存的容量大大提高,此外 NVM 还提供了持久化的保证,至少我们将数据从 DRAM 写到 NVM 这块空间之后,我们的数据是有持久化的保证。这是目前大家认为比较主流的一种方法,可以给系统或者服务器提供一个混合内存的架构支持。

语言运行时 & 混合内存

那么,语言的运行时 (比如 JVM,或者 Python,JavaScript,Go 等语言都) 可以去尝试使用混合内存的架构。

对于 JVM 来说,混合内存架构可能是利好的,这是因为目前很多内存密集型应用或是使用 Java 编写的,或是在 JVM 上运行的。Apache 生态下有很多堆内存需求较大的应用,比如 Hadoop,Spark,Flink 等。以 Spark 为例,Spark 的标识就是 in-memory computing 的框架,专门提供一些内存缓存机制从而将数据缓存在内存里,应用会吃掉很多内存。这种情况下,用混合内存其实是一个比较利好的方式。过去可能一台机器放不下的数据,有了 NVM 后,就可以直接放下了。

另一方面,持久化的特性也是可以发挥作用的,尤其对于以前的内存数据库 (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值