【论文】OrcFS: Orchestrated file system for flash storage 【未完】

OrcFS: Orchestrated file system for flash storage
这是一个 acm的A类文章
ref:https://dl.acm.org/doi/10.1145/3162614
1.Introduction
SSD的市场份额越来越大,价格也越来越便宜,但是DRAM的开销特别大。同时,应用层,文件系统和FTL层面都在做相关努力来利用SSD的物理特性,但是他们各个层面之间是有冗余的。
之前也有在文件系统和FTL层面协同处理的,但是他们没有考虑GC的性能和page size不一致的写放大,让之前的处理难以应用到实际场景。
之前也有很多冗余去除的方法,区分与之前方法的差异主要有以下三点:(1)文件系统直接管理mapping table. (2)避免段清理影响QoS. (3)block patching的方式避免写放大。

  1. Background
    2.1 Segment Clean in Log-structured File System
    log-structrued file system将数据和元数据的写集中起来,顺序刷下去。原来无效的数据需要做空间清理才能被再次分配。但是,空间清理影响QoS,会带来无法预知的延迟。
    2.2 Garbage Collection in Flash Storage
    SSD上的垃圾回收已有的算法:Greedy,EF-Greedy,cost benifit.还有一些提出是为了QoS的,比如back ground, preepmtive.
    TRIM,Multi-stream ID能够最小化GC,但依旧是一个大问题。
    2.3 Redundancies across the Layers
    将随机写变成顺序写有一些优势,主要是垃圾回收和page mapping的效率。跨层之间的冗余总结下来有以下几点:(1)mapping information.(2)segment clean.(3)over-provisioning area.
    已有的解决方法虽然能够减少冗余,但是尾延迟没有解决。同时,也没有解决单页的写在block mapping的写放大问题。

3.Design:Orchestrated File System
3.1 Concept
OrcFS将FTL的部分功能,address mapping, Garbage Collection给文件系统。
在这里插入图片描述
主要的思想是数据和元数据分开管理。数据不需要mapping table而元数据则是page mapping。这样的话,磨损均衡要怎么做呢?如果要分开管理,他们之间的更新频率?如何overprovisioning?
3.2 Disaggregate Mapping
segment为单位能够利用SSD的内部并行性,冷热程度划分和F2FS一样。这种方式SSD不会有over provisioning,因为没有必要。这种mapping的方式和hybrid mapping是不一样的。
3.3 Quasi-Preemptive Segment Cleaning
section的大小很大,如果valid的数量多,那么就会影响相关 的 foreground I/O。GC的触发为空间小于5%,分为foreground 和back ground GC,GC的时候具有互斥性,不能做正常的读写。write()系统调用会被阻塞,read()系统调用不会。
SSD有很多先发制人的GC算法,但文件系统要用到的话就需要保存内核状态。所以这里提出了QPSC。非阻塞的写和非阻塞的垃圾回收都是为了减少主机写的延迟,但是前者的目的是为了减少page cache miss的危害。
该算法主要是设置了一个定时器,在定时器时间终结后,去看是否有write()指令挂起。若有,则释放锁,然后去执行相应的写。具体的检查方式:在VFS有重要的写请求inode列表,在bdi_writeback的数据结构中的 b_io中。写完之后,再继续未完成的GC。
在实现上,用了SC_context暂存了最近清理的segment。
在这里插入图片描述
3.4 Bad Block Management and Wear-Leveling
坏块管理是SSD 在做,磨损均衡文件系统可以利用S.M.A.R.T信息,而FTL则可以根据文件系统给的冷热程度信息做super block级别的磨损均衡。
3.5 Block Patching
文件系统逻辑页和SSD物理页大小不一致导致的写放大的解决方法:request merge,sub-page mapping,read-modify-write. 虽然merge操作能够一定程度上减少开销,但是还是有不足之处。
但是说实话,只有元数据有这个困扰。就是说,block mapping的时候,如果有一个4k的page需要更新,那么整个block都需要更新。这种方式真的有效果吗?
在这里插入图片描述

相关推荐

  1. vuex--

    2023-12-08 00:48:04       50 阅读
  2. C# Parallel

    2023-12-08 00:48:04       9 阅读
  3. 中文论文写作过程中的-GPT命令----待续

    2023-12-08 00:48:04       34 阅读
  4. 【Android】通知(待续)

    2023-12-08 00:48:04       43 阅读
  5. vue整合axios

    2023-12-08 00:48:04       48 阅读
  6. C++ -- STL(待续)

    2023-12-08 00:48:04       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 00:48:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 00:48:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 00:48:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 00:48:04       20 阅读

热门阅读

  1. P2392 kkksc03考前临时抱佛脚

    2023-12-08 00:48:04       39 阅读
  2. std::async

    2023-12-08 00:48:04       46 阅读
  3. shell/bash 让vi/vim显示空格,及tab字符

    2023-12-08 00:48:04       39 阅读
  4. Python 作业答疑_6.15~6.18

    2023-12-08 00:48:04       41 阅读
  5. mysql 全文索引中的Stopwords

    2023-12-08 00:48:04       39 阅读