热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scalablehighperformancemainmemorysystemUsingPCMTechnology

sosp09年的betteriothroughbyte-addressableandpersistentmemory一文中,把BPRAM放在内存总线上,
 sosp09年的better io through byte-addressable and persistent memory一文中,把BPRAM放在内存总线上,与DRAM一起。文章中提到了会有三个不利点:1.BPRAM的访问可能会干扰DRAM的访问,从而影响整体性能 2.BRRAM的可用容量被BPRAM的密度和在机器中空闲DIMM槽数量限制。3.放置BRRAM在内存总线上,可能会受到write stray。作者在文中避重就轻,没有详细讨论~
在看这篇将PCM放在内存总线,扩展主存系统的高性能一文,可以重点关注一下这几点,看其是怎么解释的。




 我发现问题的不一样性了:当PCM与DRAM放在一起作为主存系统的时候,才要考虑这方面的问题。。。。但是这篇文章关注的点是,PCM作为DRAM的替代品,在PCM上层放置小的DRAM buffer做性能优化,并不是把DRAM和PCM并排放置。所以文章要考虑的问题是:

          1.PCM比DRAM速度更慢。

          2.有写寿命限制,必须降低写次数。
          3.写寿命的影响可能会降低PCM系统的实用性
          4.我觉得还有一个重要问题就是散热性了?







PCM最主要的问题就在于散热和写寿命,所以在针对PCM设计文件系统的时候,一定要考虑到写寿命和散热方面的问题,单纯针对PCM,现有的研究有很多磨损均衡方面的算法。若是针对混合系统,可以考虑怎样从根本上减少对PCM的写次数来达到延长寿命的目的。




问题:现在的存储子系统占据了计算机系统大部分的cost和能源预算,基于DRAM的现有存储系统开始hit power和cost的限制。




解决方案:在未来的主存系统中,由于PCM比DRAM的密度更小,可以帮助扩展主存容量,其与DRAM混合使用,可以提高存储系统性能,同时限制cost和power在约束范围内。(DRAM 需要动态刷新,需要更多的power,DRAM的成本比SSD贵很多,4GB内存条大概是250RMB左右,120GB SSD大概是500RMB左右,需要更多的cost。但是PCM的成本也很贵?怎么把cost控制在约束范围内?)在本文中,我们分析基于PCM的混合主存系统,使用PCM的架构级模型。主存系统包括了耦合小的DRAM buffer的PCM存储。在这样的架构中,既有DRAM的延迟优势,又有PCM的容量优势。




实验评估:我们的评估展示,对比于8GB DRAM,16核系统,PCM平均能降低5倍的页错误,(为什么加入了PCM就能降低页错误?因为容量大了,缓存的磁盘数据多?) 提供3倍的加速(PCM比DRAM更慢,这3倍的速度是怎么回事?)。                 

由于PCM有写寿命的限制,我们一样提出简单的混合存储的组织和管理方案,去降低对PCM的写traffic,将他的寿命从3年增加到9.7年。




     本篇文章并没有提到PCM的两个重要优势:非易失,按字节寻址,读速度跟Dram差2-4倍,写速度差5-10倍。反而是利用PCM组成混合主存系统,增大容量,加速主存系统,同时满足power和cost的约束。(新的主存系统要达到的要求总结为以下四个方面:capacity,performance,power,cost)







2.BACKGROUND




     2.1 What is Phase-Change Memory?




2.2 Why PCM for Main Memory?

     PCM的密度大于DRAM。

PCM读延迟只比DRAM 慢4倍。

PCM写延迟比DRAM慢5~10倍

PCM有更长的寿命,写次数在10^8左右。

所以PCM是高性能服务器主存系统出色的候选设备。

 2.3 Abstract Memory Model

    我们关注的焦点是研究整个系统的性能,通过加入PCM作为一个DRAM memory的补充。为了不限制我们对PCM的研究,我们采用通用内存模型的方式,利用PCM memory结合DRAM memory。因此,为了研究加入PCM到主存中的影响,我们首先开发了一个简单的抽象模型,使用DRAM作为参考。PCM技术被描述为{D,S,Wmax},分别代表PCM的密度是DRAM的D倍,读延迟时间比DRAM慢S倍,每个单元能够容忍的最大写次数是Wmax。对于我们的评估目的,我们使用目前PCM的预测值,将其描述为{D=4,S=4,Wmax=10Million}

使用S=4的PCM作为DRAM的替代品将严重增加memory的访问延迟,这对系统性能可能有一个相反的影响。因此,我们使用DRAM和PCM结合作为主存的一部分来平衡这一影响。而且,PCM的写寿命一样限制了主存的lifetime。

3. HYBRID MAIN MEMORY




在图4(d)的混合主存系统架构中,最快的DRAM memory将被作为主存的buffer,同时作为PCM和处理器系统之间的接口。DRAM buffer(PCM容量的3%)能够桥接DRAM和PCM之间的延迟gap。

3.1 Hybrid Main Memory Organization

    在hybird 主存架构里,PCM存储被操作系统使用页表来管理,以类似于DRAM主存系统的管理方式。DRAM buffer被组织类似于Hardware cache,对于操作系统来说是不可见的,它是被DRAM控制器管理。虽然DRAM buffer能够以任何粒度被组织,我们假设DRAMbuffer和PCM 存储都以页的粒度被组织。




图5展示了我们提出的hybrid主存组织。除了使用DRAM buffer覆盖PCM更大的读延迟,这个结构通过使用write queue达到容忍PCM慢一个数量级的写延迟,使用技术限制写到PCM memory的次数来克服PCM寿命的限制。

3.2 Lazy-Write Organization

我们使用lazy-write组织降低写到PCM的次数,克服PCM更慢的写速度,同时不会招致任何性能开销。当页错误的时候,从hard disk预取的页只被写到DRAM cache中。虽然从HDD预取页的时候会在DRAM中分配一个页表条目,同时自动在PCM中分配这个页的空间。被分配PCM不写HDD的数据,这消除了写PCM的开销。为了追踪只呈现在DRAM中,不在PCM中的页面,DRAM tag目录被”presence“(P)bit 扩展。当页从HDD被存储在DRAM cache中,DRAM tag directory中的P bit被设置为0、在”lazy write“组织中,一个页被写到PCM中只有当这个页被替换出DRAM storage,同时P bit为0,或者dirty bit被设置了。如果DRAM MISS,从PCM中预取页,然后DRAM 中的P bit被设置为1.当设置了P bit的页被从DRAM替换出去,除非它是脏的才被写回到PCM.而且,为了解决PCM更大的写延迟,一个写队列与PCM相关联。

  lazy write organization的主要目的就是减少了写的次数,从而达到降低写PCM的延迟。

3.3 Line-Level Writes

Line-level writes不是一页一页地写,以cache line为单位写回PCM。技术实现点:每一cache line都有一个记录dirty信息的位。比如4096B的page,cache line 256B,那么一个page就有16个cache line,需要16bits记录脏页信息。

3.4 Fine-Grained Wear-Leveling for PCM

在FGWL中,每一页的所有行以旋转的方式被存储在PCM中。页被从write queue写到PCM中以行旋转的模式。当页错误的时候,从hard disk中预取,伪随机数生成器生成一个随机4-bit的旋转值,这个值被存储在wear level shift(W)区域。这个值保持为常数,直到PCM页被替换,PRNG重新随机生成一个值,为被分配在PCM同样物理区域的新页。




4.5.6章节关于实验部分的内容在此不做过多记录




7.RELATED WORK

A NAND Flash based file buffer cache is used in "Improving NAND FLASH based disk caches"。然而,flash比DRAM慢2^8倍,这意味着增加DRAM容量以减少基于flash的disk cache的访问次数是重要的。这篇论文的工作是对"Improving NAND FLASH based disk caches"的补充,实际上,在我们的评估中,我们假设HDD被flash cache支持。而且,"Improving NAND FLASH based disk caches"对flash memory使用改进的纠错码,这不会增加单个独立单元的寿命。因此,我们关注于减少对PCM的write traffic,以至于每个cell在一段更长的时间之后才会写穿。两种方法能够被一起使用,收效会比单独使用任何一种都更好。




推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
幸福璞子难_197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有