HTMFS: Strong Consistency Comes for Free with Hardware Transactional Memory in PersistentMemory File Systems

Introduction

文件系统在设计之初并没有过多的考虑一致性,主要注重的是性能。然而随着存储设备的速度和广泛性的 发展,性能已经并不是应用唯一关注的。例如说崩溃一致性,如果文件系统不能保证崩溃一致性,那么应用就 需要复杂的机制来保证一致性。

文件系统的一致性主要分为两个方面,请求顺序的一致性和崩溃一致性。 前者需要保证对于当前任务来说修改是原子性的,这主要靠文件系统的inode的锁,后者需要保证崩溃之后,一个 文件系统的命令要么全都执行要么都不执行。后者并不是所有文件系统都可以保证,例如zoFS就无法完全保证

在PM推出以后,使用PM的文件系统可以利用PM的特性获得强一致性,但是机制仍然比较复杂。 主流的文件系统会使用日志和shadow页的机制来保证崩溃一致性,分别会带来写放大和更新需要原子化的问题

challenge

  • clf can abort RTM
    事务内存(RTM)可以提供原子性的多更新,但是把RTM用于文件系统并不简单。即使PM可以通过load/store来 直接访问,但是持久化操作仍然会打断RTM(RTM利用的是cache中的数据),好在这个问题被EADR解决了。
  • RTM size受限
  • 文件系统调用存在依赖

为了解决这些挑战,本文提出了HOP机制在EADR傲腾内存上提供轻量开销的强一致性保证的PM文件系统。

Background

文件系统一致性和开销

假如文件系统不提供一致性保证,应用想要更新A文件的数据就需要以下几步

  1. Create file B with the same content as file A;
  2. Write new data to file B;
  3. Flush file B to guarantee that the new data is persisted in storage;
  4. Rename file B as file A;
  5. Sync the directory change;

这对于应用来说是非常复杂的,所以NOVA、ext4这样的文件系统开始提供一致性保证,但是一致性都会影响它们的 性能

事务内存(RTM)

事务内存是英特尔提供的一种简单的保证一致性的方式,只需要使用_xbegin或者是_xend来维护关键性的资源 硬件会去检测是否存在冲突。但是事务内存也会因为以下几点退出

  • 读写冲突,当读队列的操作被其他核修改时,就会引发冲突导致退出
  • 容量冲突 RTM读写队列容量是有限的
  • 其他冲突,这种冲突有的可以被重复提交解决

Design

简单的使用_xbegin(), _xend()似乎就可以将RTM引入文件系统,但是这样很容易导致RTM的冲突

  • 代码路径太长容易引起容量限制
  • 代码路径太长容易引起读写冲突
  • 需要更多的retry去保证事务进行

本文提出了HOP机制来解决这个问题

HOP

文件系统操作的内存可以分为读,可见的写以及不可见的写(例如allocate)。

images

如上图所示,HOP只用RTM保护可见的写。对于读和不可见的写,HOP使用其他的机制seqcount来保证,如上图所示,如果需要访问RTM区域外的变量就需要先记录seqcount,之后在在RTM区域中验证seqcount。如果,RTM因为seqcount abort了,那么就通过seqcount去定位到需要回滚的地方。

HTMFS提出的优化机制HOP好处是在

  1. HTM会使用更少的内存,因为这个是受限的
  2. 减少RTM自身abort的次数
  3. 每次abort之后,不用都重做

File system operation

images

read

读利用seqcount来保护,在读数据之后检查映射和seqcount,如果seqcount发生改变,就在读一次这个页的数据,这样保证读数据过程中数据不会改变。

write

HTMFS将写分为两种,一种是小数据的单页更新,这个直接在RTM内用显示的写完成,另一种是多页的更新,这里HTMFS使用了一种类似写时复制的技术,利用shadow页把数据的写改为元数据的更新(但是这个shadow页是无法保证原子性的,HTMFS先把数据写到PM,再把分配的原数据保存在dram,最后操作完成了之后,再把分配信息持久化,如果中间发生崩溃,分配信息直接丢弃,类似于undo logging)

Evaluation

HTMFS的性能和abort的次数有关,和负载的情况关系很大,HTMFS对于无法使用HTM的操作设计了fallback机制,如果无法retry将重新使用软件上的锁。 使用FxMark测试HTMFS、ZOFS、NOVA等PM文件系统,HTMFS处于NOVA和ZOFS之间,因为ZOFS是弱一致性的保证。

image