FLIN(2018 ISCA)

FLIN:Enabling Fairness and Enhancing Performance in Modern NVMe Solid State Drives

这篇论文发表在2018年的International Symposium on Computer Architecture(ISCA)会议上,主要讲的是:在NVMe协议下,多队列I/O请求直接访问SSD,SSD如何保证其间的公平性问题。

Abstract

  1. 原来单队列模式下的应用程序需要在操作系统与之关联的IO堆中创建一个堆栈单元,现在多队列SSD用的协议主要是NVMe,NVMe协议允许应用程序跳过操作系统IO堆,直接发送IO请求到SSD中。这样就出现了一个问题:原来在操作系统中的公平性控制机制就不起作用了,多个应用程序产生的多个IO请求流直接进入SSD后很难保证公平性,当一个流的强度太大,其它请求流就会明显变慢。

  2. 本文提出了一个叫做FLIN的调度机制来解决这个公平性问题

  3. 实验结果表明,FLIN在公平性和性能方面分别提升了70%和47%

Introduction

  1. 像之前说的,本来应用程序先通过操作系统的软件堆,操作系统通过限制每个应用程序派遣到SSD的请求数量来保证公平性。多队列SSD中,应用程序直接把请求发到SSD,应用程序的优先级可以由操作系统控制,NVMe允许host给每个流分配不同的优先级,但是相同优先级的io流之间的公平性就很难保证,当一个流的请求强度太大,另一个低强度的流可能会一直得不到满足。

  2. 影响io流之间的公平性主要有四个因素:
    第一个是I / O强度:具有较高流强度的I O流会导致具有较低流强度的流变慢。
    第二个是访问模式:与不利用并行性的I / O流一起运行时,较好的利用内部并行性的io流速度反而会降低大概2.4倍。因为利用了并行性的io流会分到不同的chip中,单个chip里的io强度就会更低。
    第三个是读/写比例:写入请求比例较高的流会让写入请求比例较小的并发运行的流速度减慢。
    第四个是垃圾回收:当I / O流需要频繁进行GC操作时,这些操作可能会阻止很少执行GC的第二个流的I / O请求。

  3. 本文的目的是设计一种有效的I / O请求调度程序,通过减轻SSD内的所有四种干扰来提供I / O流之间的公平性,并最大化SSD的性能和吞吐量。
    FLIN考虑每个流的优先级类别,并使用三个阶段来调度请求。
    (1). 感知强度和并行性的队列插入,对事务进行重新排序,以减轻不同的I / O强度和不同的访问模式的影响。
    (2). 流级别的优先级仲裁,根据事务的相应流的优先级对事务进行优先级排序。
    (3). 读/写等待平衡,平衡读写请求的总体停顿时间,并计划GC活动以在不同流之间按比例分配GC开销。

Background

  1. MQ-SSD的内部结构如下图所示:
    MQ-SSD Internal Organization
    HIL: 将请求分解成多个闪存事务,每个事务的闪存操作粒度是一个页
    FTL: 将事务分进chip层次的队列,队列分为读队列和写队列
    TSU: 将队列分配到对应的FCC(flash chip controllers)

  2. 性能衡量标准:
    slowdownslowdown define
    Fairness
    fairness define
    Slowdown越小越好,fairness越大越好。
    下图是高强度的io流对一个中等强度的io流的影响,黑色是中等强度的io流,红色是高强度的io流。可以看到中等强度的io流速度明显减慢了,缺乏公平性。
    experiment-p1

Design and Implementation

FLIN是将原来多队列SSD中的TSU模块也就是事务调度单元进行了重新设计。
FLIN
Chip只有一个接口,而事务太多、优先级不同

  1. fairness-aware queue insertion: 第一步是将请求加到对应优先级的队列中,这个数值P是根据NVMe协议来定的,因为NVMe允许host给每个流分配不同的优先级,NVMe能定义多少个优先级数值P就是多少。所以第一步中相同优先级的请求、不管属于哪个io流都会被分到同个队列,然后采用设计的算法就事务进行排序,保证公平性。
  2. Priority-Aware Queue Arbitration: 第二步是根据不同的优先级,用加权轮询算法选出要执行的读事务和写事务。
  3. Wait-Balancing Transaction Selection: 第三步是利用算法平衡读写事务和GC操作。

1. fairness-aware queue insertion

在第一阶段,FLIN在每个chip中为每个流优先级维护单独的读队列和写队列。 在每个队列中找到事务的最佳排序是多维分配问题的一个变体,是一个NP难问题。 FLIN使用一种近似最佳排序的试探法。
需要解决以下几个问题:
1,当高强度流一下子插入许多事务时,低强度流的性能对增加的队列长度会非常敏感;2,根据应用程序的当前阶段,一些流可以在高强度和低强度之间变化;3,当并行性差的流将请求插入到某些(但不是全部)芯片级队列中时,利用后端并行性的流中的某些(但不是全部)事务会经历较高的队列等待时间。

下面是stage1的算法:将低强度的io流事务分配在队列前面,高强度的io流事务分配在队列后面,每次增加一个事务时如果是低强度流的事务就加到低强度事务中的末端,如果是高强度流的事务就加到高强度事务中的末端。然后再根据情况进行调整。
stage1

2. Priority-Aware Queue Arbitration

优先级感知队列仲裁从P个读取队列的开头的事务中选择一个就绪读取事务,并从P个写入队列的开头的事务中选择一个就绪写入事务。 然后,两个选定的事务移至调度程序的最后阶段。

队列仲裁器使用加权循环策略来选择移至下一个调度阶段的读取和写入事务。 如果协议定义了P个优先级,其中0级是最低优先级,P – 1是最高优先级,则FLIN将权重2的i次方分配给优先级i。 在加权轮询下,这意味着在第二阶段的每2的i个调度决策中,优先级为i队列的事务接收到这些时隙中的2的i次方个。

3. Wait-Balancing Transaction Selection

第三步比较简单,算法看图:
stage3

Results

experiment2
平均而言,与最先进的设备级I / O请求调度程序相比,FLIN可以提供70%的公平性和47%的性能提升。
FLIN在工作负载中的每个流之间更公平地分布干扰的影响。 他们得出的结论是,FLIN的减速管理方案可以有效地提高两个最新基准的MQ-SSD公平性。

Conclusion

FLIN是用于现代多队列SSD(MQ-SSD)的轻型事务调度程序,可在并发运行的流之间提供公平性。

FLIN使用三阶段设计来防御实际MQ-SSD中存在的所有四个主要干扰源,同时强制执行由主机分配的应用程序级优先级。

评估表明,与最新的设备级调度程序相比,FLIN有效地提高了公平性和系统性能。 FLIN易于在SSD控制器固件中实现,不需要额外的硬件,并且消耗的内存少于SSD内置DRAM中可用存储空间的0.06%。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值