NVM(NonVolatile Memory)(非易失性内存)
NVM特性
NonVolatile Memory,非易失存储器,具有非易失、按字节存取、存储密度高、低能耗、读写性能接近DRAM,但读写速度不对称,读远快于写,寿命有限(需要像ssd一样考虑磨损均衡)。当电流关掉后,所存储的数据不会消失的计算机存储器。没有数据寻道,这点和ssd比较像。
常见NVM:
相变存储器(PCM,phase change memory)
磁阻式存储器(MRAM,Magnetoresistive RAM)
电阻式/阻变存储器(RRAM,resistive ram)
铁电存储器(FeRAM, Ferroelectric RAM)
赛道存储器(Racetrack Memory)
石墨烯存储器(Graphene Memory)
忆阻器(Memristor,也是一种RRAM)
具体每种特性我就不具体介绍了,因为感觉意义不大。
未来NVM可能的应用场景
完全取代内存(DRAM):
这种做法虽然快,但带来了安全问题,很容易被野指针修改NVM上的数据,因为毕竟是内存;除此之外还得考虑往NVM上写的顺序性(因为系统会对访问内存的指令做优化,因此执行顺序可能会乱序);cache与NVM一致性的问题,怎么防止断电时cache上的新数据没有写入NVM上;同时这种模型对原有的内存模型带来巨大变化,需要我们对操作系统做出适当修改,兼容性不好。
与DRAM混合使用构成新的内存系统:
基本和上面情况类似,甚至更复杂,但更贴合实际,因为感觉NVM就算有成型的商业化产品,价格肯定也会很昂贵,再加上还有使用寿命。因此大规模使用还是不太现实。
作为块设备(外设)使用(类似ssd):
这种做法能有很好的兼容性,因为我们把它当做块设备来用,只要编写好它的驱动就能使用它了,并不用修改操作系统。但缺点是毕竟是外设,如果挂在io总线上的话读写速度还是很慢的。
作为cache使用
除了掉电数据还在,但NVM的速度远低于原有cache的速度。
背景
新兴的存储技术提供像DRAM一样的低延迟读取/写入,但具有永久写入和大容量等类似SSD的特性。
AKA存储级内存,永久内存
最早的设备将是块地址(NVMe),但是基于块地址的设备并不被数据库研发人员所青睐,它的性能仅仅类似于一个更好更快的NAND flash内存。
后来的设备,字节地址改变了人们设计操作系统结构的方式。
发现的过程这儿就不描述了,大概就是发现了除了电容、电阻、电感以外的第四种原件,忆阻器(Memristor)。
论文How We Found the Missing Memristor和Two centuries of memristors。
对工业界的影响
工业界已经对标准技术和外形因素达成了统一。
Linux和微软在其内核(DAX)中增加了对NVM的支持。
2017英特尔增加了将缓存行清空到NVM的新指令。在这之前人们是无法控制CPU将缓存清空至NVM的,都是由CPU自己决定的,但是有了这些指令之后就可以确定地将数据存入NVM。
NVM DIMM 的类型
NVDIMM-F(2015)
只有闪存(flash)。必须与DRAM DIMM配对。
对于操作系统来说,太慢了
NVDIMM-N(2015)
在同一个DIMM共同含有flash和DRAM。
作为易失性存储器出现在操作系统上,比通常的DRAM大多了。
NVDIMM-P(2018)
真正的持久性内存,用到之前说过的三种技术。
没有DRAM或闪存。
NVM 对数据库系统的影响
Block-addressable NVM不是那么有趣,这在之前简单地提到了一些。
字节寻址NVM将是一个行业改变者,但需要一些工作才能正确使用。
内存数据库管理系统可以更好地使用可定制的NVM。(无法证明)
面向磁盘的DBMS最初将NVM视为更快的SSD。
论文Let’s Talk About Storage & Recovery Methods for Non-Volatile Memory Database Systems。
SYNCHRONIZATION
现有的编程模型假设任何写入内存都是非易失性的。
CPU决定何时将数据从高速缓存移动到DRAM。
DBMS需要一种方法来确保将数据从缓存刷新到NVM。
这个问题在Intel为NVM添加CPU指令集之后就被解决了。
NAMING
如果DBMS进程重新启动,我们需要确保内存数据的所有指针都指向相同的数据。
其中不仅包含索引对数据的指针,还包含类似MVCC中数据表内部的指针。
NVM-AWARE MEMORY ALLOCATOR
功能#1:同步
分配器使用CLFLUSH指令将CPU高速缓存行写回到NVM。
然后发出SFENCE指令,等待数据在NVM上变为持久。
功能#2:命名
分配器确保即使在OS或DBMS重新启动后,分配给内存映射区域的虚拟内存地址也不会改变。
DBMS ENGINE ARCHITECTURES
选择1:in-place更新
具有预写日志+快照的表堆。
示例:VoltDB
如果想要更新一个元组,先往日志中写入信息,再进行更新,最后在进行快照保存。
所以要进行3次写入,重复的数据、恢复延迟。
利用分配器的非易失性指针来记录改变的内容,而不是改变它的方式。
DBMS只需要维护一个txn的临时UNDO日志,直到它提交。
来自未提交的txn的脏高速缓存行可以由硬件刷新到内存控制器。
没有REDO日志,因为我们在提交时刷新所有对NVM的更改。
所以我们只需要2次写,就能保证数据不丢失。
选择2:copy-on-write
更新时创建表的影子副本。
没有预写日志。
例如:LMDB
对于SLOTTED PAGES,我们维护一个树形结构。当我们想要去改变一个page的某个值时,我们就需要拷贝一个副本,然后将指针维护好(包括父指针和子指针)。
那么我们也都知道复制的代价是非常大的。
对于NVM版本,我们不需要去维护一个SLOTTED PAGES中的元组,而是维护这些元组的指针。
选择3:Log-structured
所有写入都附加到日志中。 没有表堆。
例子:RocksDB
如果要更新一个元组,那么也就需要维护它的日志,它的日志不仅在内存中存在,在硬盘中也存在。这儿的数据需要拷贝多份和压缩。
对于NVM而言,就不需要磁盘上的日志维护了。
总结
存储优化
利用字节寻址能力避免不必要的数据重复。
恢复优化
NVM优化的恢复协议避免了处理日志的开销。
非易失性数据结构确保一致性。
NVM(NonVolatile Memory)(非易失性内存)相关推荐
- 非易失性内存在阿里生产环境的首次应用:Tair NVM最佳实践总结
阿里妹导读:本文介绍了非易失性内存在阿里巴巴集团生产环境的首次应用:线上运行的情况:使用NVM遇到的问题和优化的过程:最后,总结性地给出了基于NVM构建缓存服务的设计要点,希望这些实践总结能对大家的工 ...
- Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl
<持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK> <PMDK介绍> <PMDK(NVM ...
- 面向非易失性内存的持久索引数据结构研究综述
点击上方蓝字关注我们 面向非易失性内存的持久索引数据结构研究综述 王永锋, 陈志广 中山大学计算机学院,广东 广州 510006 摘要:随着非易失性内存从理论走向实用,现代存储系统的设计与实现将迎来颠 ...
- Linux傲腾DC128G内存设置,Intel发布傲腾DC非易失性内存:3DXpoint、128GB起、服务器专用...
Intel今日举行了内存存储日活动上,会议上正式发布了3DXpoint黑科技DDR4内存Optane DC Persistent Memory,一看名字就知道不是我们普通人能用上的,单条128GB起步 ...
- 非易失性内存技术及数据库
非易失性内存技术及数据库 内容 "2013年开始这个项目的研究,当时不确定非易失性内存技术是否可商用.2019年Intel商用了NVM产品,NVM对下一代数据库系统的影响吸引了广大研究者&q ...
- 今晚直播 | PostgreSQL基于非易失性内存优化探索
PostgreSQL基于非易失性内存优化探索-07/22 Intel于2019年首次完成PCM商品化,其3D XPoint傲腾系列持久内存新硬件具有可字节寻址.非易失.大容量.堪比内存的速度特性,这种 ...
- 或取代当前非易失性内存技术 Crossbar正式进军中国存储市场
阻变式存储器(RRAM)技术的领导者Crossbar公司日前宣布正式进军中国市场,并在上海设立新的办事处. 目前,Crossbar RRAM能够在邮票大小的芯片上实现太字节(terabyte)存储,而 ...
- 非易失性数据库系统存储与恢复方法
非易失性数据库系统存储与恢复方法 摘要 非易失性内存的出现从根本上改变了数据库管理系统的内存和持久存储的架构.这些新型NVM设备具有堪比DRAM的速度,但是写到NVM设备后这些数据就具备了持久性.因为 ...
- 非易失性NV-SRAM简介
尽管闪存和其他非易失性存储技术已广泛用于实现嵌入式文件系统,但对于某些嵌入式应用程序来说可能太复杂了.在许多情况下的内存可以最有效地用作已预先初始化的数据结构.这种方法需要对数据完整性进行某种管理.本 ...
最新文章
- Redis 笔记(01)— 安装、启动配置、开启远程连接、设置密码、远程连接
- 利用BP神经网络教计算机识别语音特征信号(代码部分SSR)
- c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化
- 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
- 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )
- 关于Plos one 和 SR
- Serverless 选型:深度解读 Serverless 架构及平台选择
- java正则表达式验证密码_java密码验证正则表达式校验
- SLAM 学习与开发经验分享
- [深度学习] 自然语言处理 --- 1.Attention
- jenkins部署java项目之小白的笔记
- 整数转字符串,字符串转整数
- 树分解 tree decomposition
- 家到学校路线图怎么画_从家到学校的详细地图怎么画?
- 8.局部变量、成员变量、jvm垃圾回收机制 、封装、this关键字、匿名对象
- 阿里云服务器docker安装网心云容器魔方
- KF UD分解之UD分解基础篇【1】
- 有趣好玩的html页面,有趣的HTML5网站集合 - 小俊学习网
- 求一个数的最小素因子外加快速分解质因子
- 京东数据化运营(二)- 转化率