Background

NVM出现,可以与DRAM一同出现在处理器内存总线上,提高带宽以访问持久性数据。DRAM和NVMM的混合存储系统给设计者带来许多机遇和挑战,如果要充分利用NVMM的高性能,并有效支持更灵活的访问模式,系统需要最小化软件开销,同时必须提供引用程序所需的强有力的一致性保证,并尊重新型存储的限制,eg.有限的写入周期

NVMM的出现给设计者带来以下问题:

  1. 针对NVMM的软件设计
  • NVM的低延迟使得需要平衡硬件和软件的开销。传统的慢的存储设备是影响延迟的主要关键,所以软件开销不是关键因素。使用DAX(Direct Access) 可绕过DRAM 的page cache直接访问NVM。
  • 写重排
    为了提高性能,处理器及缓存结构可能会对写进行重排序,CPU的内存一致性协议保证了内存更新的顺序,但不提供更新何时到达NVMs的保证,因此电源故障可能会使数据处于不一致状态。如下图所示。虽然NVM可以通过显式刷新缓存和发出内存屏障来执行写顺序,eg.X86架构下提出clflush和mfence指令,但仍存在开销大、不能保证到达NVM顺序的问题。
  • 原子性
    原子性即要么成功,要么失败,不会是两者的组合。许多应用程序以来于原子的文件系统操作去确保正确性,存储设备通常只提供简单的原子操作(eg.扇区写入),为复杂的原子更新,文件系统需要更复杂的技术。
  1. 构建复杂的原子操作
    已经存在的文件系统使用下述方法提供原子保证,但都存在不同类型的开销。
  • 【Journaling】(write-ahead logging) 在应用之前,将所有更新记录到journal中,发生电源故障,重新扫描日志恢复到一致性状态。为提高性能,通常只记录日志元数据。因此,在使用journal的方式下,需要2次写入数据,先写入log,然后写入目标位置。
  • 【Shadow paging】不是写时就地更新,而是将受影响页的副本先写道存储设备空的部分,然后通过更新页和根之间的节点将新页连接到文件系统树中,严重依赖它们的树结构来提供原子性。因此,会产生潜在的级联更新的开销
  • 【Log-structuring】将对内存的随机写入转化为更大的、顺序的磁盘写入,依赖于顺序写入磁盘的连续空闲区域,因而需要不断GC,产生开销。
  1. 目前针对NVMM的文件系统
    目前针对NVMM设计的文件系统不能提供强一致性保证
  • 【BPFS】使用shadow page的方法,提供了数据和元数据一致性,提供一种增强存储持久性和排序的硬件机制,但某些跨越文件系统很大一部分的操作(eg.目录之间的移动)会产生较大开销
  • 【PMFS】使用journaling保证元数据更新,执行就地写,不是原子的
  • 【EXT-DAX】使用journaling保证元数据更新原子性,而数据更新不是原子的
  • 【SCMFS】利用虚拟内存管理模块,将文件映射到大型连续虚拟地址区域,不提供元数据和数据的一致性
  • 【Aerie】在用户空间实现文件系统接口和功能,journal元数据但不支持数据原子性或mmap操作

因此,基于1)NVMM要求具有小的软件开销;2)保证数据持久化的顺序;3)复杂的原子性保证。提出了NVOA文件系统,主要设计思想如下:

Design

作者在设计时观察到以下现象:

  • 支持原子更新的日志很容易在NVMM中实现,但支持快速搜索的树结构(eg.B+树的插入中包含随机和顺序写入的混合,开销比较大)在NVMM中实现相对困难。
  • NVMM具有快速随机访问的特性,不需要复杂的日志清理以提供连续的空间
  • 使用单个日志限制了并发访问

因此提出以下设计:

  1. 在NVMM中保存日志,在DRAM中保存索引
  2. 每个indode保存自己的日志,提高并发性
  3. 对于复杂的原子操作(设计多个inode)使用logging和轻量级journal
  4. 以单链表的方式实现log
  5. 在log中仅记录元数据,不log数据,使用copy-on-write的方式更新数据页
    (理由:1)日志是短的,方便恢复;2)不需要拷贝文件数据,方便GC;3)回收旧页和配置新页是容易的;4)能够立即回收旧页,在高负荷写入的情况下维持高性能))

Implementing

  • 结构
    【superblock】包含全局的文件系统的信息
    【recovery inode】存储恢复信息,加速NOVA的重挂载
    【inode table】2MB的inode块数组,按循环顺序为每个inode表分配新的节点,每个inode包含一个有效位,包含指向日志头和尾的指针,日志是4KB页链表
    【journal】4KB的循环缓冲区。使用<enQueue,deQueue>指针对管理每个journal。为协调跨多个inode更新,NOVA首先将日志条目追加到每个日志,然后通过将所有受影响的日志尾追加到当前CPU的journal enqueue开始一个事务。在更新传播到目标日志尾之后,更新dequeue提交事务。在断电恢复时,NOVA检查journal,并回滚dequeue和enqueue之间的所有更新。

  • 空间管理
    将NVMM划分为pool,每个CPU在DRAM中使用红黑树维护一个空闲列表。为提高性能NOVA在操作期间不将分配状态存储在NVMM中,常规关闭时将分配状态保存在recovery inode的log中,异常关闭时,通过扫描所有的inode日志重新存储分配状态

  • 原子性和强制写顺序
    机制:
    【64-bit atomic updates】NOVA使用64-bit就地写以直接修改元数据
    【Logging】使用inode的日志记录对单个inode修改的操作
    【Lightweight journaling】对于修改多个inode的目录操作,NOVA使用轻量级journaling提供原子性,记录inode log tail
    【Enforcing write ordering】1)更新尾指针之前先提交数据和日志条目到NVMM;2)传播更新之前,提交journal data到NVMM中;3)回收旧数据页前提交新的数据页。使用下列代码强制写顺序:

  • 目录操作

  • 目录包括:在NVMM中的目录inode的日志和在DRAM中的基树(key:dentry 名字的哈希值;每个叶节点执行log中响应的dentry)

  • 目录的日志有两种entries:
    directory entries(dentry);inode update entries

     dentry: <子文件和目录的名字、它的inode号、时间戳>当在该目录下创建、删除或重命名一个文件或子目录时,追加一个dentry到log中inode update entries:记录目录的inode的更新(eg.chmod/chown)
    
  • 文件操作

  • 为减小log大小,使用copy-on-write的方式更新文件数据

  • 文件inode的日志仅记录元数据改变,每个文件在DRAM中有一个基树通过文件的偏移量定位数据

  • file inode’log包含两种entries:inode update entries、file write entries

    file write entries:<时间戳和文件大小>
    
  • 对于读操作,NOVA使用64-bit原子写更新inode的访问时间,使用文件基树定位需要的页,将数据从NVMM中拷贝到用户buffer

  • Atomic mmap
    内存映射的持久数据结构:不是从文件中连续读取字节和在内存中构建数据结构,而是程序的地址空间出现并准备使用,允许快速访问最大、最复杂的持久数据结构。
    DAX-mmap绕过page cache将NVMM暴漏给用户,而目前提供的一些原子机制eg.64-bit写、fences和cache的刷新指令给构建强壮的非易失性数据结构带来困难。所有,NOVA提供atomic-mmap,通过使用copy-on-write的方式保证一致性。即先在NVMM中配置一个副本页,然后将其映射到用户地址空间,当应用程序对副本页调用msync时,NOVA将其作为写请求来处理

  • GC

  • NOVA分别处理陈旧数据页和陈旧日志条目的垃圾收集。在写操作期间立即收集陈旧的数据页;
    提出两种回收陈旧日志条目的方式:
    【Fast GC】强调速度而不是彻底性,不需要任何复制。Nova使用它在扩展索引节点的日志时快速回收空间。如果日志页中的所有条目都已死亡,则Fast GC通过从日志的链接列表中删除页面回收它。
    【Thorough GC】在Fast GC日志扫描过程中,Nova将记录日志条目占用的空间。如果活条目占日志空间的50%以下,则Nova在完成Fast GC后应用Thorough GC。将活动条目复制到日志的新的压缩版本中,更新DRAM数据结构以指向新日志,然后原子化地用新日志替换旧日志,最后回收旧日志。

  • 关闭和恢复
    NOVA使用lazy rebuild的方式减少恢复时间:它推迟重建基树和inode,直到系统第一次访问inode。该策略加快了恢复过程,减少了DRAM消耗。
    【常规关闭后的恢复】 Nova将NVMM页面分配器状态存储在恢复索引节点的日志中,并在后续重新装载过程中恢复分配器。因为Nova不扫描任何索引节点日志,因此恢复过程非常快
    【异常关闭后的恢复】Nova必须通过扫描inode日志重新生成NVMM分配器信息。1)Nova检查每个journal并回滚任何未提交的事务,以将文件系统恢复到一致状态。2)Nova在每个CPU上启动一个恢复线程,并行地扫描inode表,对inode表中的每个有效inode执行日志扫描。Nova对目录inodes和文件inodes使用不同的恢复机制:对于 directory inode,Nova扫描日志的链接列表以枚举它占用的页面,但它不检查log的内容。对于file inode,Nova读取日志中的写条目来枚举数据页。在恢复扫描过程中,Nova构建被占用页面的位图,并根据结果重新构建分配器。

  • NVMM保护
    由于在挂载期间,内核将NVMM映射到其地址空间中,所以NVMM容易受到来自内核的错误存储的损坏。NOVA必须确保它时唯一访问NVMM的系统软件。
    Nova使用与PMFS相同的保护机制。在挂载时,整个NVMM区域被映射为只读。每当Nova需要写入NVMM页面时,它会通过禁用处理器的写保护控制(CR0.WP)来打开写窗口。当CR0.WP clear时,运行在0环上的内核软件可以在内核地址空间中写入标记为只读的页面。完成NVMM写入后,Nova重置CR0.WP以关闭写入窗口。Nova在写窗口期间禁用本地中断。

Conclusion

本文为混合型内存设计了一个log-structured的文件系统NOVA,通过对journaling、copy-on-write、log-structure的结合提供了强一致性保证,并支持快速有效的垃圾回收和恢复。实验表明,针对写密集性程序,与最先进的文件系统相比,Nova提供了22%至216×吞吐量的改进,与提供同样强大的数据一致性保护的文件系统相比,提供了3.1×到1.5×改进。

论文学习-NOVA:A log-structured File System for Hybrid Volatile/Non-volatile Main相关推荐

  1. 论文学习- *Strata: A Cross Media File System

    论文学习- Strata: A Cross Media File System Motivation 从应用程序.文件系统.存储设备三个角度来看: >当前应用程序的需求 数据集庞大(容量) 执行 ...

  2. 论文学习:Ziggurat: A tiered File System for Non-Volatile Main Memories and Disks

    Background NVMM的出现相比于传统磁盘来说,具有更高的吞吐量和更低的延迟,极大地提高了存储性能,目前针对NVMM设计的文件系统利用持久内存的直接访问(DAX)功能绕过页面缓存层,并为用户应 ...

  3. 转:经典论文翻译导读之《Google File System》

    首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 -首页所有文章资讯Web架构基础技术书籍教程Java小组工具资源 经典论文翻译导读之<Google ...

  4. 经典论文翻译导读之《Google File System》

    [译者预读] GFS这三个字母无需过多修饰,<Google File System>的论文也早有译版.但是这不妨碍我们加点批注.重温经典,并结合上篇Haystack的文章,将GFS.TFS ...

  5. 论文学习笔记 Titanium: A Metadata-Hiding File-Sharing System with Malicious Security

    该论文发表于NDSS 2022 在Titanium中,proxy接收用户的API请求,访问file storage,并返回API响应.这意味着Proxy知道所有的秘密信息,因此proxy的状态和执行对 ...

  6. 《EROFS: A Compression-friendly Readonly File System for Resource-scarce Devices》

    一.原文摘要翻译: "智能手机通常存储和运行时内存有限.压缩只读文件系统可以显著减少只读系统资源使用的存储空间.然而,现有的压缩只读文件系统使用固定大小的输入压缩,这会导致显著的I/O放大和 ...

  7. 【Google论文】The Google File System 译文

    The Google File System Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung Google∗ [西周翻译] ABSTRACT 概 ...

  8. The Google File System(GFS)学习笔记

    文章目录 引子 GFS的架构 读数据 写数据 流水线式的网络数据传输 记录追加 总结 引子 这篇文章是我学习极客时间徐文浩老师的<大数据经典论文解读>课程的学习笔记,大量的文字和图片来自专 ...

  9. MapReduce论文中文版--The Google File System

    摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/valu ...

最新文章

  1. windows 切换 默认 jdk 版本
  2. 群友:事务中的异常不也抛出了,为什么没catch到而回滚?
  3. jsp 页面显示格式化的日期
  4. 头文件和库文件的区别
  5. 如何优化WebRTC提升直播体验?
  6. 树状数组成段更新模板
  7. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现
  8. IIS错误代码500.21 ,Nhibernate更新报错,委托的使用。action传参数
  9. linux init 参数,Objective-C中实现覆写init函数以及在初始化时添加参数
  10. 推荐系统000111
  11. 软件性能分析与优化详解
  12. 直接可以用的Python和OpenCV检测及分割图像的目标区域例子
  13. php在线解密,zend在线解密
  14. Jpg格式如何变成gif动图?仅需三步快速合成gif
  15. 今天我们来聊一个很高级的话题:如何设计一个大规模远程命令执行系统
  16. IT蚁族:蜗居和逃离
  17. 《薛兆丰的经济学课》课程总结6--经济学家们
  18. Enterprise Architect安装使用
  19. (C语言代码分享):车辆信息管理系统源代码来了。
  20. SQL 向上取整、向下取整、四舍五入取整的实例!round、rounddown、roundup

热门文章

  1. mac网页java无法加载,chrome浏览器mac版无法加载怎么办_chrome浏览器mac版打不开网页解决方法-win7之家...
  2. 淘宝小程序调研-部署-开发从零到1
  3. Spring Cloud Kubernetes 中文文档
  4. android id 重名_android 中Xml里面的id重名问题
  5. set feedback on
  6. 我们扒了扒那个“阿里美女高管”,真的不简单(附最新回应)
  7. Seed, Expand and Constrain: Three Principles for Weakly-Supervised Image Segmentation 论文笔记
  8. 开启高效阅读全英文数据手册的正确姿势
  9. python \xef\xbb\xbf --- 去除
  10. Java面向对象封装和继承,阿里正式启动2021届春季校招