MQSim模拟器论文阅读

来自论文:MQSim A Framework for Enabling Realistic Studies of Modern Multi-Queue SSD Devices

这是一个使现代多队列SSD设备称为现实研究的框架。

Abstract

首先指出了那个时候比较好的一些SSD 模拟器(simulator)的三个缺点:

  • 没有模拟新协议(如:NVMe)的关键特性,比如它们对请求的多个应用程序级队列的使用,以及消除操作系统对I/O请求处理的干预。
  • 通常不能准确地捕捉高级SSD维护算法的影响(如,垃圾回收),因为它们不能正确或快速地模拟稳态条件(steady-state condition),而稳态条件会显著改变这些算法在实际SSD中的行为。
  • 没有捕获I/O请求的全部端到端延迟(end-to-end latency),这可能会错误地歪曲SSD报告的结果,这些SSD使用了新兴的非易失性内存技术。

由于这三点没有正确建模,现有的模拟器报告结果与现实SSD性能存在明显的偏离。于是我们的工作是推出一款新的模拟器:MQSim,能够精准地模拟现代SSD和传统的基于SATA-based SSD的性能。(SATA, Serial Advanced Technology Attachment (SATA) protocol [67], which was originally designed for HDDs )

我们验证了MQSim,它报告的性能结果与四个真正的先进SSD的实际性能相比,结果只有6%-18%的性能。我们已经发布了MQSim作为一个开源工具,我们希望它能够帮助研究者在新的和不同的领域探索方向。

1,Introduction

SATA协议(Serial Advanced Technology Attachment (SATA) protocol [67], which was originally designed for HDDs ) 已经被证明对SSD是低效的,因为它不能支持当前SSD能够提供的快速I/O访问和IOPS(millions of I/O operations per second)。最新的协议(如,NVMe[63])克服了这些困难,它是专门位SSD中的高吞吐量设计的。NVMe 通过使用多队列SSD(multi-queue SSD)概念,为I/O请求提供高吞吐量和低延迟。而SATA仅为操作系统公开了一个请求端口。

Goal: develop a new SSD simulator that can faith-fully model the features and performance of both modern multi-queue SSDs and conventional SATA-based SSDs

MQSim解决了上面提到的三个问题,by:

(1)提供传统(如SATA)和现代(如NVMe)模型的主机接口

(2)准确和快速地模拟了稳态SSD的行为(steady-state SSD behavior)

(3)度量请求的完整端到端延迟(从应用程序将请求排队到请求响应到达主机的时间)

我们为MQSim提供了两种执行模式:<1>独立执行(standalone execution); <2>与gem5全系统模拟器[8]集成执行。我们发现MQSim报告的响应时间结果非常接近实际ssd的响应时间,实际存储工作负载跟踪的平均(最大)错误仅为11% (18%)

通过忠实地建模现代ssd中的主要特性,MQSim可以发现现有模拟器无法演示的几个问题。其中一个问题是现代MQ-SSD中的流间干扰(inter-flow interference)对性能的影响。用于两个或多个并发流 (例如,来自多个应用程序的I/O请求流),有三个主要的干扰来源:(1)写缓存,(2)映射表,和(3)I/O调度器。

使用MQSim,我们发现在现代ssd中,流间干扰会导致显著的不公平(即,干扰会不平等地降低每个流的速度)。不公平降低了每个流的I/O延迟和吞吐量的可预测性,并允许恶意流拒绝或延迟I/O服务到其他良性流。

2,Background

这部分简要介绍MQ-SSD(multi-queue SSD)的背景:

  • internal organization of an MQ-SSD(section 2.1)
  • host-interface protocols commonly used by SSDs(section 2.2)
  • how the SSD flash translation layer(FTL)handles requests and performs maintenance tasks(section 2.3)

2.1 SSD Internals

现代MQ-SSDs通常由NAND-flash memory chip构建。NAND闪存[11,12]支持在page(通常是4 kB)粒度上的读写操作。在NAND闪存芯片内部,多个page被分组到一个闪存block中,这是擦除操作发生的粒度。闪存写入只能发生在被擦除的页面(例如,free)。为了最小化写入延迟,MQ-SSD执行out-of-place update(异地更新,即在更新逻辑页时,将其数据写到不同的空闲物理页,并更新逻辑到物理的映射)。这避免了在写操作期间擦除旧物理页的需要与时间。同时,旧的页面被标记为无效,垃圾收集过程[11 - 13,23]将在后台回收无效的物理页面。

下图展示了MQ-SSD的内部构造。MQ-SSD内部构建被分为两组:

  1. back end: include memory devices.
  2. front end: include control and management units.

在这里插入图片描述

后端(back end)中的存储设备(例如,NAND-flash memory[11,12], phase-change memory[42], STT-MRAM[40], 3D XPoint[9])以高度分层的方式组织,以最大化I/O并发性 (concurrency)。

后端还包括许多独立的bus channels, 它们将memory devices和front end连接。每一个channel连接一个或更多memory chip。 对于NAND-flash memory based SSD, 每一个NAND-flash chip被分为多个dies,每个die能够独立执行存储指令。一个chip中的所有dies共享一个常见的通信接口。每个die由一个或多个plane构成,plane就是flash cells阵列。每一个plane包括多个block。只有当每个平面在平面内的相同地址偏移上执行相同命令时,单个die中的多个平面才能并行执行内存操作。

前端包括三个部分:

  1. The host-interface logic(HIL),implements the protocol used to communicate with the host (section 2.2)
  2. The flash translation layer(FTL),manages flash resources and processes I/O requests (section 2.3)
  3. The flash chip controllers(FCC),send commands to and transfer data to/from the memory chips in the back end.

前端还包含板载(on-board)DRAM,三个组件使用它来缓存应用程序数据和存储数据结构,以供flash管理。

2.2 Host-Interface Logic

HIL在利用NAND-flash memory的内部并行性为主机提供更高的I/O性能方面发挥着关键作用。

SATA协议[67]通常用于传统的SSD,因为SATA在企业和客户系统上得到了广泛的支持。SATA使用本机命令排队(NCQ, Native Command Queuing),它允许SSD并发地执行I/O请求。NCQ允许SSD基于后端资源当前空闲的情况调度多个I/O请求[29,50]

NVM Express (NVMe) 协议为减轻SATA的瓶颈而设计,在PCIe总线上支持可伸缩的、高带宽和低延迟的通信。当应用程序在VNMe中发出I/O请求时,它会绕过OS中的I/O stack 和 block layer queue,而直接将请求插入应用程序专用的提交队列(上图中的SQ)。然后SSD从SQ中选择一个请求,执行请求,并将请求作业的完成信息(例如ack, read data)插入到相应应用程序的请求完成队列(上图中的CQ)中。

NVMe现已广泛应用于现代SSD产品中。

2.3 Flash Translation Layer ⭐️

FTL在SSD内的微处理器上执行I/O请求和闪存管理程序[11,12]。

对于使用NVMe的SSD,在FTL中处理I/O请求需要4个步骤:

  1. 当HIL在SQ中选择一个请求时,会将其插入到一个 device-level queue 中。
  2. HIL将请求分解为多个flash transactions, 其中每个事务都是单个页面的粒度。
  3. FTL检查这个事务是不是写操作。如果是写操作,并且MQ-SSD支持write caching,那么写缓存管理单元将每个事务的数据存储在DRAM中的写缓存空间中,并要求HIL准备一个响应。否则,FTL将事务的逻辑页面地址(LPA,logical page address)翻译成物理页面地址(PPA,physical page address),并且将事务插入到相应的chip-level queue中。有单独的度队列(RDQ,read queue)和写队列(WRQ,write queue)。事务调度单元(TSU,Transaction scheduling unit)解决chip-level queue中待定(pending)事务之间的资源争用(contention),并将可执行的事务发送给相应的FCC [20,78]。
  4. 最后,当一个请求的所有事务都执行完了,FTL告诉HIL准备一个待会传送给主机的响应。

FTL的address translation module 在实现out-of-place update中起着关键作用。当一个事务写到一个LPA时,页面分配方案(page allocation scheme)将LPA分配给一个空闲的PPA。LPA到PPA的映射记录在一个mapping table中,存储表存储在非易失性内存中并缓存在DRAM中(以减少映射查找的延迟)[24] 。当事务从LPA读取数据时,模块将搜索LPA的映射并检索相应的PPA。

FTL还负责内存损耗管理(如,wear-leveling)和垃圾回收(GC)[11-13, 23] 。当空闲页面数量下降到阈值以下时,将触发GC。GC过程同通过选择一个具有大量无效页的候选块(candidate block),将块中的所有有效页移动到一个空闲块中,然后擦除候选块,来回收无效页(invalidated page)。任何在GC期间生成的读写事务被插入到专用的读写队列中(GC-RDQ,GC-WRQ)。这允许事务调度单元在空闲期间调度GC相关的请求。

3,Challenges

simulation challenges for modern MQ-SSDs:

  1. 多队列支持
  2. 快速构建稳态行为
  3. 合适地对端到端的请求延迟建模

3.1 Multi-Queue Support

对于传统的ssd, OS I/O调度程序协调对存储设备的并发访问,并确保共同运行应用程序的公平性[66,68]。MQ-SSD消除了OS I/O调度程序,其本身负责公平地服务来自并发运行的应用程序的I/O请求,并保证高响应性

将应用程序级队列公开给存储设备,允许在MQ-SSD控制器中使用许多优化的管理技术,这些技术可以提供高性能和高水平的公平性和响应性。这主要是因为设备控制器可以做出比操作系统更好的调度决策,因为设备控制器知道SSD内部资源的当前状态。

下图展示了真实的MQ-SSD中,并发I/O流之间的影响(假设每个不同的I/O流,使用独立的I/O队列,队列深度Depth可以用请求数来表示)。Flow1的队列深度固定为8个请求,Flow2的队列深度从8到1024去变化(图里面不是只有256吗?)。

公式说明:
S l o w d o w n : S f i = R T f i s h a r e d / R T f i a l o n e ( R T 是 r e s p o n s e t i m e ) Slowdown: S_{fi}=RT_{fi}^{shared}/RT_{fi}^{alone} (RT是response time) Slowdown:Sfi=RTfishared/RTfialoneRTresponsetime

F a i r n e s s : F = min ⁡ i S f i / max ⁡ i S f i Fairness: F=\min_{i} S_{fi}/\max_{i} S_{fi} Fairness:F=iminSfi/imaxSfi

在这里插入图片描述

从中我们可以看到:

  1. 对于SSD A,B,C ,Flow-2的吞吐量随着队列深度成比例增加。除了固态硬盘的最大可用带宽之外,每个I/O流的吞吐量没有限制。
  2. 当Flow-2的队列深度远远大于Flow-1时,对于Flow-1,来自Flow-2的干扰明显减慢。
  3. 对于SSD A,B,C , 随着Flow-2的强度增加,它的减速(slowdown)几乎可以忽略不计。
  4. SSD D限制了每个流的最大吞吐量,从而很好地控制了Flow-2对Flow-1性能的负面影响。

SSD D中存在某些控制内部公平的机制,而对A,B,C ,一个Flow可能不公平地占用SSD的全部I/O能力。

所以我们的结论是:

  1. 每个流的相对强度(relative intensity)显著影响每个流的吞吐量
  2. 当并发流的相对强度不同时,具有公平性控制的MQ-SSD(例如SSD-D)的性能不同于没有公平性控制的MQ-固态硬盘。

因此,为了精确地模拟MQ-SSD的性能,SSD模拟器需要模拟多个队列并支持多个并发运行的流。

3.2 Steady-State Behavior

SSD性能评估标准明确规定SSD性能应该在稳定状态下报告[71]。因此,预处理(即快速达到稳定状态)是固态硬盘设备性能评估的基本要求,以确保在稳定状态下收集结果。这很重要因为:

  1. 垃圾回收(GC)仅在设备执行了一定数量的写入操作时才会被调用,因为这将导致SSD中的可用页数降至GC阈值以下。(注意:一个新的开箱即用“out-of-the-box,FOB”设备不太可能执行GC,因此FOB设备的性能结果不是真实的)
  2. 写缓存的稳态优势可能低于短期优势,尤其是对于写负载较重的工作负载。(在稳定状态下,写缓存被应用程序数据填满并预热,很可能没有空闲插槽可以分配给新的写请求)
  3. 当前运行的应用程序的物理数据放置高度依赖于设备使用历史和先前进程的数据放置

因此,拥有一个能够对固态硬盘进行高效、高性能稳态模拟的模拟器至关重要。

3.3 Real End-to-End Latency

请求延迟是MQ-SSD性能的一个关键因素,因为它影响应用程序在I/O请求上等待的时间。

从I/O请求插入主机提交队列(submission queue)到响应从MQ-SSD设备发送回完成队列(completion queue),I/O请求的端到端延迟包括七个不同的部分,如图所示。现有的模拟工具仅模拟端到端延迟的某些部分,这些部分通常被认为是端到端延迟的主要部分[3, 26, 27, 35, 38]。

在这里插入图片描述

<1> 上图(a)说明了典型基于NAND-flash的MQ-SSD中,小的4KB读取请求的端到端延迟图。包括:

1️⃣ 在submission queue中进行I/O作业的排队

2️⃣ 通过PCIe总线进行主机到设备的I/O作业传输

3️⃣ FTL的地址转换和事务调度

4️⃣ 向flash chip传输读命令和地址

5️⃣ flash chip读取

6️⃣ 通过开放NAND Flash接口(ONFI)总线[65]传输读取的数据

7️⃣ 通过PCIe总线进行设备到主机的读取数据传输

其中5,6部分被认为是端到端请求处理中最耗时的部分。

考虑8 kB页面读取操作的典型延迟值,与闪存读取(50-110us)[49,51,52,69]和ONFI NV-DDR2 [65]闪存传输(20us)相比,I/O作业插入(< 1us,在我们的实际固态硬盘上测量)、多核处理器上的FTL请求处理(1us)47、以及PCIe总线上的I/O作业和数据传输(4us)[41,46]的贡献可以忽略不计。

然而,上述的假设却是不现实的,主要有两个原因。第一,对于一些I/O请求,FTL request processing不是总能忽略,甚至可以跟闪存读取时间媲美(如,FTL使用页级地址映射,没有局部性的工作负载导致cached mapping table(CMT)大量未命中)。

<2> 上图(b)所示,先端的非易失性存储器技术,如3D XPoint[7,9,16,48],极大地减少了MQ-SSD后端的访问和数据传输时间,与NAND闪存相比减少了三个数量级[25,40,42,43]。3D XPoint读取和传输的总延迟(<1us)对端到端I/O请求处理延迟(<10us)的贡献不到10%[7,16]。在这种情况下,传统的模拟工具将是不准确的,因为它不能模拟导致端到端延迟的主要步骤。

总之,端到端延迟的详细、真实模型是精确模拟现代固态硬盘设备的关键,现代固态硬盘设备具有(1)多个输入/输出流,这可能导致CMT(缓存映射表)未命中的显著增加,以及 (2)3D XPoint等极快的NVM技术,这极大地减少了原始内存读/写延迟。现有的模拟工具不能为这些设备提供准确的性能结果。

4,Modeling

modeling a modern MQ-SSD with MQSim.

据我们所知,当前没有SSD建模工具支持多队列输入/输出执行、SSD稳态(steady-state)行为的快速高效建模以及完整的端到端请求延迟估计。我们推出了MQSim,一个从零开始开发的仿真框架,以支持现代MQ-SSD精确性能建模和设计空间探索所需要的所有这三个重要功能。

虽然MQSim主要是为MQ-SSD仿真而设计的,但它也支持对传统的基于SATA的SSD的仿真,这些SSD实现了本机命令队列(NCQ)。MQSim是一个用C++编写的离散事件模拟器(discrete-event simulator),在MIT License下发布。下图描述了MQSim的主要组件以及其交互的高级视图:

在这里插入图片描述

在本节中,将简要描述这些组件并解释它们相对于以前模拟器的新特性。

4.1 SSD Back End Model

MQSim提供了一个简单而详细的闪存芯片模型。它考虑SSD后端的三个主要延迟组件:
(1)向存储芯片传输地址和命令
(2)不同技术(1,2or3bits per cell)的闪存读/写操作
(3)向/从存储器芯片传输数据

MQSim的闪存模型考虑了die-level和plane-level的并行性以及高级命令执行的约束。MQSim的一个重要新特性是,它可以被配置或轻松修改以模拟新的NVM芯片(它们不需要erase-before-write)。它另一个新特性是它将读写操作的大小解耦,此功能有助于利用现代闪存芯片的大页面尺寸,从而实现更好的写入性能,同时防止大页面尺寸对读取性能的负面影响。

对于闪存芯片写入,操作总是页面大小[11,12]。**(不懂)**MQSim的数据缓存控制器可以延迟写入,以消除部分更新的逻辑页面的回写(其中更新大小小于物理页面大小)。

对于闪存芯片读取,操作可能小于物理页面大小。当读取操作完成时,只有在输入/输出请求中请求的数据段才会从闪存芯片传输到固态硬盘控制器,从而避免了大型物理页面的数据传输开销。

4.2 SSD Front End Model

MQSim的前端模型包括现代SSD controller的所有基本组件,并提供了许多以前SSD建模工具中不存在的新功能。

4.2.1 Host-Interface Model

MQSim的主机接口组件为现代固态硬盘提供了**NVMe多队列(MQ)SATA本机命令队列(NCQ)**模型。据我们所知,MQSim是第一个支持MQ I/O请求处理的建模工具。

其中有一个请求提取单元(Request Fetch Unit),它从不同的输入队列中提取和调度应用程序的I/O请求。NVMe主机接口提供了一个名为QueueFetchSize的参数, 该参数可以调整请求提取单元的行为,以便模拟真实的MQ-SSD。此参数定义了在MQ-SSD中可以同时服务的来自每个SQ的最大I/O请求数。更准确地说是,任何时刻从主机SQ到device-level queue提取的请求数总是小于等于QueueFetchSize。该参数对3.1节中讨论的MQ-SSD多流处理特性(即每个I/O流可实现的最大吞吐量和流间干扰的概率)有很大影响。附录A.3分析了这个参数对性能的影响。

MQSim还为主机端请求队列建模了不同的优先级,这是NVMe标准规范的一部分。

4.2.2 Data Cache Manager

MQSim有一个数据缓存管理器组件,它使用最近最少使用(LRU)替换策略来实现基于DRAM的缓存。DRAM能够被配置缓存(1)最近写入的数据(默认模式),(2)最近读取的数据,或者(3)最近写入和读取的数据。

MQSim缓存管理器与之前的SSD模拟器的不同点是,它实现了一个DRAM的访问模型,其中考虑了对DRAM芯片的并发访问之间的竞争和DRAM命令的延迟

该DRAM 缓存模块可以扩展到使用详细和快速的DRAM模拟器,如Ramulator[2,39].

4.2.3 FTL Components

MQSim实现了所有主要的FTL组件,包括(1)地址转换单元(address translation unit),(2)垃圾收集(GC, garbage collection)和磨损均衡(WL, wear-leveling)单元,以及(3)事务调度单元(transaction scheduling unit)。

MQSim为每个组件提供了不同的选项,包括最先进的地址转换策略[24,78],GC候选块选择算法[10,18,23,45,81,91],以及事务调度方案[34,87]。MQSim还实现了几种最先进的垃圾收集和闪存管理机制,包括可重复使用的I/O调度[44],使用回拷读写命令对将plane内数据从一个物理page移动到另一个物理page[27],以及P/E暂停[87],以减少垃圾收集操作对应用程序I/O请求的干扰。

MQSim的一个新特性是它的所有FTL组件都支持多流(即多输入队列)请求处理。例如,地址映射单元可以在并发运行的流之间划分缓存的映射表空间。这种对多队列感知请求处理的固有支持促进了对MQ-SSD的性能隔离和服务质量方案的设计空间探索。

4.3 Modeling End-to-End Latency

除了闪存操作和内部数据传输延迟(图4中的步骤3、4、5和6)之外,MQSim还模拟了可变延迟和恒定延迟,以确定端到端请求延迟。

Variable Latencies.

FTL可变请求处理时间是由缓存映射表(CMT)和DRAM写缓存中的争用导致的。

根据请求类型(读或写)请求的逻辑地址,FTL的请求处理时间包括以下几项:(1)从数据缓存读取/写入所需的时间,以及(2)CMT缺失时,从闪存中提取映射数据的时间。

Constant Latencies.

其中包括通过PCIe总线传输I/O作业信息、整个用户数据和I/O完成信息所需的时间,以及控制器微处理器上的固件(FTL)执行时间。

PCIe传输延迟是基于Xilinx [41]提供的简单数据包延迟模型计算的,该模型考虑了:(1)PCIe通信带宽,(2)PCIe事务层数据包(TLP)的有效负载和报头大小,(3)NVMe管理数据结构的大小,以及(4)应用程序数据的大小。固件执行时间是使用中央处理器和缓存延迟模型来估计的[1]

4.4 Modeling Steady-State Behavior

MQSim的基本假设是,所有模拟都应在建模设备处于稳定状态(steady-state)时执行。为了模拟稳态行为,默认情况下,MQSim会在开始实际模拟过程之前自动执行预处理功能。此功能在短时间内执行预处理(例如,在800
GB MQSSD上运行tpcc [53]时不到8分钟),无需执行额外的I/O请求。

在预处理期间,基于[82]中提供的稳态有效/无效页面分布模型,模型化固态硬盘的所有可用物理页面被转换为有效或无效状态(只有极少数闪存块被假定为保持空闲并被添加到空闲块池)。MQSim对输入跟踪进行预处理,以提取跟踪中应用程序I/O请求的访问特征,然后将提取的信息用作有效/无效页面分布模型的输入。此外,输入跟踪特征(如平均写到达率和写地址分布)用于预热写缓存。

4.5 Execution Modes

MQSim提供两种操作模式:
(1)独立模式,向其提供真实磁盘跟踪或合成工作负载;
(2)集成模式,向其提供来自执行驱动引擎(如gem5 [8])的磁盘请求。

5,Comparison

comparison with previous simulators

下表总结了MQSim和流行的现有SSD建模工具的特性。(MQSim用C++编写有13K Loc)

在这里插入图片描述

作者认为其他模拟器高错误率是由四个主要原因造成的:
(1)缺少写缓存或对写缓存访问延迟的建模不准确
(2)缺少对稳态建模的内置支持
(3)FTL请求处理延迟的建模不完整
(4)缺少主机到设备通信延迟的建模。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值