(MICRO18) Amber:一个可以准确、详细地模拟全部SSD内部资源的模拟器(SimpleSSD 您所在的位置:网站首页 固态硬盘开发板 (MICRO18) Amber:一个可以准确、详细地模拟全部SSD内部资源的模拟器(SimpleSSD

(MICRO18) Amber:一个可以准确、详细地模拟全部SSD内部资源的模拟器(SimpleSSD

2024-07-07 13:34| 来源: 网络整理| 查看: 265

Amber: Enabling Precise Full-System Simulation with Detailed Modeling of All SSD Resources

作者:Donghyun Gouk, Miryeong Kwon, Jie Zhang, Sungjoon Koh, Wonil Choi, Nam Sung Kim, Mahmut Kandemir and Myoungsoo Jung****鄭溟隨

@ KAIST(Korea)

SimpleSSD主页:https://docs.simplessd.org/en/v2.0.12/

camelab研究组主页:http://camelab.org/pmwiki.php

Amber是SimpleSSD的扩展版本。相比于以往的SSD模拟器,Amber对SSD内部软硬件资源的运行时间和功耗进行了详细的建模,实现了对SSD设备单体更加精确的模拟;通过修改gem5模拟的主机DMA引擎,和对功能型(functional)和计时型(timing)CPU系统总线模型提供支持,实现了真实数据转移的仿真,进而支持主机+SSD的全系统模拟。

论文为什么要做这件事?

SSD模拟器可以为研究提供更加高效、低价的选择。然而,准确的SSD模拟框架有以下要求:

虽然SSD往往被认为是整个系统的存储或者内存子系统部分,但是相对于传统存储来说,它本身是一个有自己架构和系统的计算机系统。 SSD不仅包含存储实体后端,也包含复杂的计算部分。例如嵌入式CPU核心、DRAM和内存控制器。SSD内部的计算部分是与主机并行运行的,因而模拟结果很容易不准确。 SSD通过多种存储接口和协议与主机系统进行数据交换,包含SATA,NVMe,OpenChannelSSD (OCSSD)等。在全系统性能模拟时,我们需要考虑这些存储接口和软件栈的差异。 SSD上运行的固件有不同的设计方案和运行机制,因而固件的软件栈对于整个系统的性能有很大的影响。 这个事情之前别人是怎么做的,存在什么问题?

论文写作时(2018),也存在各种SSD模拟器(SimpleSSD v1.0 / MQSim / FlashSim / SSD-ext),但是它们的模型或多或少的简化了以上的问题场景:

缺乏SSD内部的计算资源的模型,使得这些模拟器无法胜任全系统模拟。特别是无法模拟固件的运行时间。 之前的SSD模拟器并没有建模实际的存储接口模型和实际数据转移的仿真,无法集成进全系统模拟的环境。 没有SSD模拟器能够既支持**功能型(functional),又支持计时型(timing)**的CPU模型接口。大部分都是只支持功能型的CPU模型,这种假设过于简化了。 该论文解决了什么难点,难点存在的原因是什么,作者是如何发现这些难点的?

难点:用FIO工具进行探究过程中发现,在相同设定下,当改变I/O队列的深度时,现有模拟器得到的带宽和延迟数值不论是从变化趋势,还是某个设定下的真实效果,都与真实硬件存在非常大的偏差。

难点产生的原因:

缺乏SSD内部计算单元延迟的建模;

采取不完整的固件软件栈;

忽略了存储接口和协议的建模;

针对以上难点,作者各做了哪些优化,优化背后的思想是什么?

Amber新增的模拟对象主要包含三个方面:SSD硬件架构(包含计算单元和存储单元)、固件软件栈、主机和SSD之间存储接口和协议(数据转移机制仿真)。

对真实SSD的分析 SSD内部硬件架构:可以分为计算部分(Computation Complex)、存储部分(Storage Complex)。SSD的固件由SSD内部计算核心做计算;DRAM作为SSD和主机数据传输的数据缓冲区,也保存了一些其他重要信息;存储部分由flash芯片组成,有一些特别的读写特性,比如写放大等。(略) SSD内部软件栈(固件):软件栈主要包括主机-SSD接口层、Flash翻译层、Flash芯片接口层。内部也有比较复杂的小机制,比如缓存管理、垃圾回收、地址翻译、Flash请求队列管理等等。固件运行在嵌入式处理器上,用DRAM保存相关数据。 主机-SSD之间的接口和协议栈: SSD与主机之间的硬件接口可以分为与南桥(ICH)或北桥(MCH[PCIe])连接,二者分别由硬件的主机控制器和软件的设备驱动程序驱动,所以可以将SSD分为**硬件驱动型(h-type)和软件驱动型(s-type)**。硬件驱动型的SSD协议有SATA和UFS,一般都是传统的SSD;软件驱动型SSD协议包括NVMe和OCSSD。相比来说,软件驱动型要更快、吞吐量要更高,在另一方面,其占用的主机资源也越多。由于真实的SSD与主机之间的硬件接口和协议不同,其性能也完全不同,因此一个完整的模拟器应该建模所有的协议和接口情况。

比如,硬件驱动的SSD由主机控制器发送I/O请求的,所以它的特点是:在主机和存储之间的数据转移需要在主机控制器的硬件队列和DRAM中进行数据的冗余复制;对SSD发出的I/O请求必须全部串行。

另一方面,软件驱动的SSD和主机之间的数据传输是由设备驱动程序完成的。主机和SSD之间的通信一片主机、SSD共同可见的内存地址(BAR)实现,I/O请求的接收和发送通过这篇地址中的请求队列实现,此外还通过寄存器门铃机制和MSI中断来控制主机和SSD对请求队列的同步。

在建模时这些接口和协议栈也将影响SSD和主机通信的精确性能,并且可以看到,不仅需要建模SSD端,主机也必须建立相应的模拟组件才能实现全系统的精确模拟。

SSD硬件架构模拟 嵌入式处理器建模(指令级模拟):基于ARM v8指令集架构,将每个模块的函数做指令解码,并将不同的固件组件分配给一个CPU核心执行。每个函数的调用在每次运行都是动态的,模拟器通过保留每个函数在动态调用过程的轨迹,来建立评估指令执行的时间和功耗的模型,指令包括算术、分支、load-store等,进而实现每个请求和事务的时间详细评估。因为处理器执行和FLASH读写数据可以同时发生,因此要捕捉每个请求每个事务的处理时间。此外,在CPU模型中还集成了多核动态能耗和面积模型。 SSD DRAM建模: 建模了带有DRAM计时参数的DRAM和内存控制器模型,与处理器通过SSD系统接口相连接。内存模型中包含缓存的数据、额外数据和页面映射表,他们可以被固件动态更新。此外还集成了DRAM功耗模型。 FLASH设备建模:FLASH建模了多通道多路的flash存储器,模型包括写入时间、访问时间、数据转移时间等参数,这些参数使得Amber支持TLC,MLC等存储颗粒,并且也建立了动态功耗评估模型。 SSD固件(软件)栈模拟 HIL(host interface level,主机接口层):基于主机存储接口定义的队列协议来调度I/O请求(比如h-type用FIFO,s-type用Round-Robin),I/O请求来自于SSD设备管理器建模的SATA/PCIe物理界面模块,并执行数据转移;再将请求转换为基于flash页面大小的内部请求。 ICL(internal cache level,内部缓存层):将HIL得到的内部请求缓存到DRAM模型里,并且将主机到SSD或者从flash到主机的数据缓存到DRAM里。 FTL(flash translation layer,地址翻译层):地址转换,将逻辑块地址使用DRAM中的映射表翻译为物理页面地址;还有垃圾回收、磨损管理等机制。 FIL(flash interface layer,Flash接口层):调度flash访问事务,并行对flash做访问。

注意:在Amber模拟器中,以上模块都可以高度重构。Amber本身提供了一些模块的其他选项可供选择,用户也可以自定义一些函数功能等。

SSD和主机之间的接口和协议模拟(仿真数据转移机制)

Amber可以处理主机和存储器之间I/O请求中的实际数据内容,这对于在全系统环境下运行应用层和操作是非常重要的。因此,Amber建模了DMA控制器,并将其集成进了gem5模拟器,它可以实现主机系统内存与SSD模型的DRAM的数据转移。

实现过程中,主机控制器或者软件驱动内部的所有I/O请求形成了一个指针列表,每个项指向一个待搬运的系统页面。DMA控制器会分析这个指针列表,根据不同协议的定义,项的结构是不同的。DMA模块在分析后完成数据转移。

DMA控制器模型实现过程中的一个挑战是:在gem5中,当实现不同的协议时,不同的CPU模拟模型有不同的存储访问计时模型和I/O处理过程。例如,计时型的CPU模型(Timing CPU)要计时内存页面访问、页面转移和通过MSI完成I/O请求等操作;而功能型的CPU(Functional CPU)只需要将每个请求的数据转移操作集成进一个I/O任务,因而需要DMA模块对每个请求的数据量做估计和模拟,用一个简单的请求延迟来实现计时。Amber实现了对不同种类CPU模型的支持。

举例:NVMe的实现

使用了PCIe interface,PCIe多路链接到PCIe终端,终端上有8KB FIFO来接受请求; 实现了gem5的系统总线和DMA控制器,用设备控制器来支持NVMe命令。 实现了在内存中的NVMe队列(包括完成队列和提交队列),并通过实现一系列门铃寄存器和MSI机制来同步驱动或者设备控制器上的队列状态。 实验结果 准确性

带宽准确率:72%~96%

延迟准确率:64%~94%

带宽与主机CPU性能的关系 使用2 GHz CPU,由于内核执行(用户级)和协议管理(接口级),其带宽相比于设备层降低了41%。 当以更高的频率(8GHz)运行相同的内核时,用户级性能提高了12%。

可以研究内核栈和协议栈给SSD的带宽带来了多少影响。

模拟执行的时间

单独执行:基本上是最慢的模拟器了,比MQSim强一些;

全系统:在gem5的基础上再加三分之一。

自己的思考

Amber支持对SSD全面和详细的建模,效果也很贴近真实硬件;但是由于其复杂性和与gem5进行了全系统集成,真实数据的转移仿真过程其消耗的模拟时间可能会很长,加上采用SSD做应用的模拟往往是大数据应用,比较怀疑其实用性。

附:本论文没有对比FEMU。FEMU、Amber和MQSim同年(2018)发表,通过本文可以知道Amber在准确率和模拟时间上比MQSim可能都要更好一些。而Amber没有对比FEMU,FEMU是一个基于QEMU的SSD模拟器,可能模拟运行的时间会更好一点。

目前就二者的引用量来看,FEMU(65)要比Amber(33)更多。

大哥大嫂过年好!

支付宝 微信 本文作者: Zhang Xinmiao 本文链接: https://recoderchris.github.io/2022/10/20/amber/ 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有