您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > SSDsim_user_guide
5固态盘模拟器SSDsim的设计实现作者:胡洋说明:本文摘自胡洋博士毕业论文。Yanghu@foxmail.com固态盘模拟器可以给研究开发人员提供一个前期功能验证的手段,通过固态盘模拟器的模拟,可以以最低开发成本,提前验证所设计的硬件结构,软件算法的有效性,而最终设计出满足预定目标的固态盘产品。目前开源的固态盘主要是两个:一个是微软开发的disksim的固态盘模块[46],另外一个是宾夕法尼亚州立大学开发的固态盘模拟器[47],这两个模拟器均未实现高级命令的模拟,也不能对能耗进行模拟,最重要的一点是,这两个模拟器没有经过验证,无法确保模拟结果的准确性。本章介绍一个自主开发的高准确性、模块化、可配置的固态盘模拟器SSDsim,它能够对高级命令、能耗进行模拟,最终要的一点是它的模拟结果经过了基本的验证。本章从SSDsim的设计思路,总体框架,操作流程,SSDsim的验证工作,全面介绍SSDsim。本章的结构如下:5.1节阐述SSDsim的整体设计思路;5.2节介绍SSDsim的总体框架,包括重要的数据结构,模拟流程等;5.3节介绍了SSDsim的操作流程;5.4节给出了SSDsim的验证过程。5.5节是本章小结。5.1SSDsim的设计思路固态盘是一个既有系统软件,又有系统硬件的嵌入式系统,SSDsim需要对固态盘进行模拟,就需要对固态盘上的软件算法,硬件行为进行模拟。SSDsim作为一个模拟软件,其上的软件算法与真实系统的系统软件基本类似,因此,模拟的关键在于对固态盘系统硬件的模拟。而固态盘的系统硬件是由多个通道、多个芯片组成,闪存作为固态盘硬件的核心,是SSDsim模拟的关键点。所以SSDsim的模拟就是围绕闪存的行为模拟进行的。SSDsim可以提供对时间和能耗的模拟。下面分别介绍SSDsim对时间和能耗的模拟原理。5.1.1时间模拟一般来说,模拟器的驱动方式分三种类型,即时间驱动,事件驱动和请求驱动。时间驱动的模拟器需要设置一个时间的步进长度,每前进一个步进时间窗口,系统时间增加一个步进长度,在处理器的模拟器中经常用到这种类型的模拟方法;事件驱动的模拟器是根据系统内部各个部件的状态改变来修改系统时间,SSDsim就是采用的这种方式的驱动方法;请求驱动是根据外部请求的到达来修改系统时间,这种方法实现简单,但是精确性不高。在高性能固态盘中,存在三类主要的部件,既固态盘中的嵌入式处理器,内存颗粒,和闪存颗粒。处理器的时钟通常大于100MHz,既单个时钟的时间为10纳秒甚至更短;内存的读写操作时间是纳秒级;与此形成对比的是,闪存颗粒的读写时间是微秒级。因此在SSDsim中,只考虑对闪存的读写擦除操作的时间开销,内存的读写时间开销取一个平均值,忽略处理器的时间开销。对于一个独立的读、写、擦除操作,可以根据公式5.1、5.2、5.3获得准确的时间开销。表5.1中介绍了三个公式中出现的变量,表中所列参数具体值取自具体的闪存芯片的数据手册[26]。读操作:7×tWC+tR+PS×tRC公式5.1写操作:7×tWC+PS×tWC+tPROG公式5.2擦除操作:5×tWC+tERASE公式5.3表5.1时间开销公式中的主要变量简称含义时间tR数据从目标物理页中读到分组的寄存器所消耗的时间20微妙tPROG数据从分组的寄存器写到目标物理页所消耗的时间200微妙tERASE目标物理块的擦除时间1.5毫秒tWC通过数据总线上向寄存器传输一个字节的数据所消耗的时间25纳秒tRC通过数据总线从寄存器向外传输一个字节的数据所消耗的时间25纳秒PS传输的数据量图5.1是一个闪存读操作过程。从图中可以看到,一个读操作分成三个阶段:输入命令地址阶段、访问介质阶段、数据传输阶段。公式5.1中的三个部分分别对应这三个阶段。第一个部分是输入命令地址阶段耗费的时间。一个读请求,首先花费一个tWC时间通过总线传输一个起始命令(00h),之后花费5个tWC时间通过总线传输读操作的地址,紧接着是花费一个tWC时间传输结束命令(30h),因此公式5.1中第一个部分是7个tWC;公式的第二个部分是闪存将数据从介质中读到分组的数据寄存器上,这个过程如图5.1中忙(busy)状态所指。在读操作中这个时间是tR;公式的第三个部分是数据的传输部分,在这个部分,上一阶段读出的数据将从数据寄存器通过总线传输到通道控制器的缓存中,这个部分的传输时间与传输的数据量有关,因此在公式5.1的的三个部分需要考虑传输的数据量PS大小。00h列地址1列地址2行地址1行地址2行地址330h数据0数据1数据N-1≈≈≈REWEI/O0~7/15tWCtRCtR第一阶段命令地址输入第二阶段访问介质第三阶段数据输出R/B忙:busy图5.1闪存读操作流程80h列地址1列地址2行地址1行地址2行地址310h数据0数据1数据N-1≈≈REWEI/O0~7/15tWC第一阶段命令地址输入第三阶段访问介质R/B≈第二阶段数据输入tPROG忙:busy图5.2闪存写操作流程图5.2是一个闪存写操作过程。从图中可以看到,一个写操作分成三个阶段:输入命令地址阶段、数据传输阶段、访问介质阶段。公式5.2中的三个部分分别对应这三个阶段。第一个部分是输入命令地址阶段耗费的时间。一个写请求,首先花费一个tWC时间通过总线传输一个起始命令(80h),之后花费5个tWC时间通过总线传输写操作的地址,在传输完数据之后将花费一个tWC时间传输结束命令(10h),因此公式5.2中第一个部分是7个tWC;公式的第二个部分是将数据从通道控制器的缓存传输到分组的数据寄存器上的传输阶段,这个部分的传输时间与传输的数据量有关,因此在公式5.2的的第二个部分需要考虑传输的数据量PS大小;公式的第三个部分是访问介质阶段,在这个部分,上一阶段传入的数据将从写到介质中,这个过程如图5.2中忙(busy)状态所指,在写操作中这个时间是tPROG。内存颗粒是固态盘中的独立服务单元,闪存通道相互之间也是独立的,在SSDsim中,将这些单元称之为独立单元。在SSDsim中,每个独立单元设置四个时间和状态变量:当前状态、当前状态时间、下一状态、下一状态预计时间。当前状态表示这个独立单元的当前所处的状态,下一状态表示这个独立单元从当前状态将进化到的下一状态。宏观上来看,固态盘中的闪存颗粒和闪存通道都存在两种状态,既工作状态(busy)和空闲状态(idle)。从微观上看,根据读、写、擦除的状态变化,闪存颗粒存在四种状态,包括空闲状态、接收命令地址状态、介质操作状态和数据传输状态,后三种状态使得闪存颗粒处于工作状态;闪存通道存在三种状态,包括空闲状态、数据传输状态和命令地址传输状态,后两种状态使得闪存通道处于工作状态。表5.2中列出了这几种状态的名称和含义。图5.3是这些状态之间的状态变化图。表5.2SSDsim中独立单元的各种状态独立服务单元状态含义停留时间1CHANNEL_IDLE通道空闲(0,∞)2CHANNEL_C_A_TRANSFER命令地址传输7×tWC3CHANNEL_DATA_TRANSFER数据传输传输的数据量×tRC4CHIP_IDLE芯片空闲(0,∞)5CHIP_WRITE_BUSY介质操作:写tPROG6CHIP_READ_BUSY介质操作:读tR7CHIP_C_A_TRANSFER接收命令地址7×tWC8CHIP_DATA_TRANSFER数据传输接受或发送的数据量×tRCCHIP_IDLECHIP_WRITE_BUSYCHIP_READ_BUSYCHIP_C_A_TRANSFERCHIP_DATA_TRANSFER1234123411读操作状态转换流程写操作状态转换流程状态4状态5状态7状态8状态6CHANNEL_IDLECHANNEL_C_A_TRANSFERCHANNEL_DATA_TRANSFER状态1状态2状态31234123闪存芯片状态变化固态盘通道状态变化图5.3读写操作状态变化图例如,对于一个执行读操作的内存颗粒而言,假设当前状态是接受命令地址状态(CHIP_C_A_TRANSFER),则下一个状态必然是读介质状态(CHIP_READ_BUSY),如图5.3从状态7到状态6的转变。表5.2给出了各个状态的停留时间,独立单元的下一状态预计时间就是依据每个状态的停留时间计算获得。在SSDsim中,状态的转变就是一个事件,每一个事件的发生将招致SSDsim的系统时间向前推进。具体来说,时间的推进方法是:已知每个独立单元的当前状态,和当前状态时间,同时下一状态和下一状态的预计时间可以通过图5.3和表5.2获得,在所有独立单元中寻找最先到达的下一个状态的时间,作为SSDsim的新的系统时间,周而复始地使模拟不断向前推进。通过对所模拟的固态盘内的每个状态进行观测,可以准确地得到对每条外部请求的响应时间,从而完成SSDsim的时间模拟。5.1.2能耗模拟SSDsim在提供对时间的模拟同时,提供了对能耗的模拟。在固态盘中,存在三种主要的耗能元件,包括处理器,内存颗粒和闪存颗粒。因为不同的固态盘所使用的处理器不一样,不管采用什么样硬件结构和软件算法,处理器的能耗基本相同,所以在SSDsim中,不考虑处理器的能耗,只考虑内存和闪存的能耗。闪存芯片是COMS器件,只有在对其进行读写擦除操作时才产生能量的损耗。闪存芯片的数据手册[26]给出了芯片在不同状态之间转换时的电流、电压(通常,电压保存3.3V不变,电流在不同状态下有些区别),时间可以根据前面描述的方法获得,因此在SSDsim中可以获取闪存每次读写擦除操作的能耗值。固态盘中需要一定的内存空间存储映射关系和缓存数据,通常采用两种类型的内存,DRAM或者SRAM。SRAM成本较高,容量较低,一般集成在处理器中;DRAM的成本较低,容量较大,一般是独立存在的。DRAM有三种工作状态,激活状态(active)、低功耗状态(standby)、刷新状态(refresh),在对DRAM进行读写操作时,DRAM处于激活状态;当短时间内没有对DRAM进行读写操作时,DRAM进入低功耗状态;当长时间内没有对DRAM有读写操作,DRAM就进入周期性刷新状态。在SSDsim中,每次对内存的操作的时间可以根据读写的数据量计算获得,所以DRAM处于激活状态的能耗可以根据所使用的内存颗粒的电压电流以及内存操作时间计算获得;当DRAM服务完一个读写操作后,随即进入低功耗状态,这段时间是两次读写操作之间的间隔时间,也可以计算获得;DRAM的刷新过程与所服务的负载的时间跨度有关,特定DRAM芯片的刷新周期是一定的,例如64毫秒,在SSDsim中可以根据负载的时间跨度,DRAM的刷新周期,以及DRAM的大小既DRAM刷新单位计算获得DRAM的刷新操作所消耗的能耗。SSDsim通过采用上述的方法,分别获得闪存的能耗和内存的能耗,最终获得所模拟的固态盘服务某个负载所耗费的能量。5.2SSDsim的总体框架本节介绍SSDsim的总体框架及其具体实现过程。5.2.1模块划分SSDsim用来模拟固态盘的硬件结构(包括闪存颗粒,固态盘内部通道等),闪存转换层(包括数据缓存区、地址映射、垃圾回收及损耗均衡等)。SSDsim分成三个逻辑模块,既硬件行为模拟层,闪存转换层,和数据缓存层,这三个模块也是固态盘中标准的三个组成部分。(1)硬件行为层在硬件行为层,SSDsim遵循ONFI2.2协议[19]。根据ONFI2.2协议,不同的闪存厂商不但提供了除了基本的读、写、擦除命令,还提供了其他类型的闪存命令。数据迁移(copy-back)命令使得数据从一个物理页移动到同一个分组的另一个物理页。多分组操作(multi-plane)是一个组合命令,它可以和读操作,写操作,擦除操作合并使用,既可以执行多分组读操作(multi-planeread),多分组写操作(multi-planewrite),或者多分组擦除操作(multi-planewrite)。交错操作(interleave)也是一个组合命令,可以与读、写、擦除甚至多分组操作组合在一起执行。交
本文标题:SSDsim_user_guide
链接地址:https://www.777doc.com/doc-2860919 .html