SSDsim_user_guide_第1页
SSDsim_user_guide_第2页
SSDsim_user_guide_第3页
SSDsim_user_guide_第4页
SSDsim_user_guide_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5固态盘模拟器SSDsim的设计实现作者:胡洋说明:本文摘自胡洋博士毕业论文。Yanghu固态盘模拟器可以给研究开发人员提供一个前期功能验证的手段,通过固态盘模拟器的模拟,可以以最低开发成本,提前验证所设计的硬件结构,软件算法的有效性,而最终设计出满足预定目标的固态盘产品。目前开源的固态盘主要是两个:一个是微软开发的disksim的固态盘模块46,另外一个是宾夕法尼亚州立大学开发的固态盘模拟器47,这两个模拟器均未实现高级命令的模拟,也不能对能耗进行模拟,最重要的一点是,这两个模拟器没有经过验证,无法确保模拟结果的准确性。本章介绍一个自主开发的高准确性、模块化、可配置的固态盘模拟器SSDsim

2、,它能够对高级命令、能耗进行模拟,最终要的一点是它的模拟结果经过了基本的验证。本章从SSDsim的设计思路,总体框架,操作流程,SSDsim的验证工作,全面介绍SSDsim。本章的结构如下:5.1节阐述SSDsim的整体设计思路;5.2节介绍SSDsim的总体框架,包括重要的数据结构,模拟流程等;5.3节介绍了SSDsim的操作流程; 5.4节给出了SSDsim的验证过程。5.5节是本章小结。5.1 SSDsim的设计思路固态盘是一个既有系统软件,又有系统硬件的嵌入式系统,SSDsim需要对固态盘进行模拟,就需要对固态盘上的软件算法,硬件行为进行模拟。SSDsim作为一个模拟软件,其上的软件算

3、法与真实系统的系统软件基本类似,因此,模拟的关键在于对固态盘系统硬件的模拟。而固态盘的系统硬件是由多个通道、多个芯片组成,闪存作为固态盘硬件的核心,是SSDsim模拟的关键点。所以SSDsim的模拟就是围绕闪存的行为模拟进行的。SSDsim可以提供对时间和能耗的模拟。下面分别介绍SSDsim对时间和能耗的模拟原理。5.1.1时间模拟一般来说,模拟器的驱动方式分三种类型,即时间驱动,事件驱动和请求驱动。时间驱动的模拟器需要设置一个时间的步进长度,每前进一个步进时间窗口,系统时间增加一个步进长度,在处理器的模拟器中经常用到这种类型的模拟方法;事件驱动的模拟器是根据系统内部各个部件的状态改变来修改系

4、统时间,SSDsim就是采用的这种方式的驱动方法;请求驱动是根据外部请求的到达来修改系统时间,这种方法实现简单,但是精确性不高。在高性能固态盘中,存在三类主要的部件,既固态盘中的嵌入式处理器,内存颗粒,和闪存颗粒。处理器的时钟通常大于100MHz,既单个时钟的时间为10纳秒甚至更短;内存的读写操作时间是纳秒级;与此形成对比的是,闪存颗粒的读写时间是微秒级。因此在SSDsim中,只考虑对闪存的读写擦除操作的时间开销,内存的读写时间开销取一个平均值,忽略处理器的时间开销。对于一个独立的读、写、擦除操作,可以根据公式5.1、5.2、5.3获得准确的时间开销。表5.1中介绍了三个公式中出现的变量,表中

5、所列参数具体值取自具体的闪存芯片的数据手册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纳秒P

6、S传输的数据量图5.1是一个闪存读操作过程。从图中可以看到,一个读操作分成三个阶段:输入命令地址阶段、访问介质阶段、数据传输阶段。公式5.1中的三个部分分别对应这三个阶段。第一个部分是输入命令地址阶段耗费的时间。一个读请求,首先花费一个tWC时间通过总线传输一个起始命令(00h),之后花费5个tWC时间通过总线传输读操作的地址,紧接着是花费一个tWC时间传输结束命令(30h),因此公式5.1中第一个部分是7个tWC;公式的第二个部分是闪存将数据从介质中读到分组的数据寄存器上,这个过程如图5.1中忙(busy)状态所指。在读操作中这个时间是tR;公式的第三个部分是数据的传输部分,在这个部分,上一

7、阶段读出的数据将从数据寄存器通过总线传输到通道控制器的缓存中,这个部分的传输时间与传输的数据量有关,因此在公式5.1的的三个部分需要考虑传输的数据量PS大小。 图5.1 闪存读操作流程图5.2 闪存写操作流程图5.2是一个闪存写操作过程。从图中可以看到,一个写操作分成三个阶段:输入命令地址阶段、数据传输阶段、访问介质阶段。公式5.2中的三个部分分别对应这三个阶段。第一个部分是输入命令地址阶段耗费的时间。一个写请求,首先花费一个tWC时间通过总线传输一个起始命令(80h),之后花费5个tWC时间通过总线传输写操作的地址,在传输完数据之后将花费一个tWC时间传输结束命令(10h),因此公式5.2中

8、第一个部分是7个tWC;公式的第二个部分是将数据从通道控制器的缓存传输到分组的数据寄存器上的传输阶段,这个部分的传输时间与传输的数据量有关,因此在公式5.2的的第二个部分需要考虑传输的数据量PS大小;公式的第三个部分是访问介质阶段,在这个部分,上一阶段传入的数据将从写到介质中,这个过程如图5.2中忙(busy)状态所指,在写操作中这个时间是tPROG。内存颗粒是固态盘中的独立服务单元,闪存通道相互之间也是独立的,在SSDsim中,将这些单元称之为独立单元。在SSDsim中,每个独立单元设置四个时间和状态变量:当前状态、当前状态时间、下一状态、下一状态预计时间。当前状态表示这个独立单元的当前所处

9、的状态,下一状态表示这个独立单元从当前状态将进化到的下一状态。宏观上来看,固态盘中的闪存颗粒和闪存通道都存在两种状态,既工作状态(busy)和空闲状态(idle)。从微观上看,根据读、写、擦除的状态变化,闪存颗粒存在四种状态,包括空闲状态、接收命令地址状态、介质操作状态和数据传输状态,后三种状态使得闪存颗粒处于工作状态;闪存通道存在三种状态,包括空闲状态、数据传输状态和命令地址传输状态,后两种状态使得闪存通道处于工作状态。表5.2中列出了这几种状态的名称和含义。图5.3是这些状态之间的状态变化图。表5.2 SSDsim中独立单元的各种状态独立服务单元状态含义停留时间1CHANNEL_IDLE通

10、道空闲(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数据传输接受或发送的数据量×tRC图 5.3 读写操作状态变化图例如,对于一个执行读操作的内存颗粒而言,假设当前状态是接受命令地址状态(CHIP_C_A_TRANSFER),则下

11、一个状态必然是读介质状态(CHIP_READ_BUSY),如图5.3从状态7到状态6的转变。表5.2给出了各个状态的停留时间,独立单元的下一状态预计时间就是依据每个状态的停留时间计算获得。在SSDsim中,状态的转变就是一个事件,每一个事件的发生将招致SSDsim的系统时间向前推进。具体来说,时间的推进方法是:已知每个独立单元的当前状态,和当前状态时间,同时下一状态和下一状态的预计时间可以通过图5.3和表5.2获得,在所有独立单元中寻找最先到达的下一个状态的时间,作为SSDsim的新的系统时间,周而复始地使模拟不断向前推进。通过对所模拟的固态盘内的每个状态进行观测,可以准确地得到对每条外部请求

12、的响应时间,从而完成SSDsim的时间模拟。5.1.2能耗模拟SSDsim在提供对时间的模拟同时,提供了对能耗的模拟。在固态盘中,存在三种主要的耗能元件,包括处理器,内存颗粒和闪存颗粒。因为不同的固态盘所使用的处理器不一样,不管采用什么样硬件结构和软件算法,处理器的能耗基本相同,所以在SSDsim中,不考虑处理器的能耗,只考虑内存和闪存的能耗。闪存芯片是COMS器件,只有在对其进行读写擦除操作时才产生能量的损耗。闪存芯片的数据手册26给出了芯片在不同状态之间转换时的电流、电压(通常,电压保存3.3V不变,电流在不同状态下有些区别),时间可以根据前面描述的方法获得,因此在SSDsim中可以获取闪

13、存每次读写擦除操作的能耗值。固态盘中需要一定的内存空间存储映射关系和缓存数据,通常采用两种类型的内存,DRAM或者SRAM。SRAM成本较高,容量较低,一般集成在处理器中;DRAM的成本较低,容量较大,一般是独立存在的。DRAM有三种工作状态,激活状态(active)、低功耗状态(standby)、刷新状态(refresh),在对DRAM进行读写操作时,DRAM处于激活状态;当短时间内没有对DRAM进行读写操作时,DRAM进入低功耗状态;当长时间内没有对DRAM有读写操作,DRAM就进入周期性刷新状态。在SSDsim中,每次对内存的操作的时间可以根据读写的数据量计算获得,所以DRAM处于激活状

14、态的能耗可以根据所使用的内存颗粒的电压电流以及内存操作时间计算获得;当DRAM服务完一个读写操作后,随即进入低功耗状态,这段时间是两次读写操作之间的间隔时间,也可以计算获得;DRAM的刷新过程与所服务的负载的时间跨度有关,特定DRAM芯片的刷新周期是一定的,例如64毫秒,在SSDsim中可以根据负载的时间跨度,DRAM的刷新周期,以及DRAM的大小既DRAM刷新单位计算获得DRAM的刷新操作所消耗的能耗。SSDsim通过采用上述的方法,分别获得闪存的能耗和内存的能耗,最终获得所模拟的固态盘服务某个负载所耗费的能量。5.2 SSDsim的总体框架本节介绍SSDsim的总体框架及其具体实现过程。5

15、.2.1 模块划分SSDsim用来模拟固态盘的硬件结构(包括闪存颗粒,固态盘内部通道等),闪存转换层(包括数据缓存区、地址映射、垃圾回收及损耗均衡等)。SSDsim分成三个逻辑模块,既硬件行为模拟层,闪存转换层,和数据缓存层,这三个模块也是固态盘中标准的三个组成部分。(1)硬件行为层在硬件行为层,SSDsim遵循ONFI 2.2协议19。根据ONFI 2.2协议,不同的闪存厂商不但提供了除了基本的读、写、擦除命令,还提供了其他类型的闪存命令。数据迁移(copy-back)命令使得数据从一个物理页移动到同一个分组的另一个物理页。多分组操作(multi-plane)是一个组合命令,它可以和读操作,

16、写操作,擦除操作合并使用,既可以执行多分组读操作(multi-plane read),多分组写操作(multi-plane write),或者多分组擦除操作(multi-plane write)。交错操作(interleave)也是一个组合命令,可以与读、写、擦除甚至多分组操作组合在一起执行。交错操作是在同一个芯片上的不同晶圆之间将多个数据传输过程流水执行。因为在高性能的固态盘中,上述的各种命令都使用到了,所以在SSDsim中,为了能够模拟闪存的各种行为,必须实现这些命令的执行过程。所以在硬件行为层,SSDsim提供了对这些命令的模拟。之前的文献20,21,22,23中,以及之前的实验都发现,

17、不同使用程度的固态盘的性能、能耗表现迥异,所以在固态盘模拟器中也需要有不同使用程度的固态盘的模拟手段。在SSDsim中,设置一个参数(aged-ratio)来表示不同的使用程度。当这个参数设置为0时,表示所要模拟的固态盘是一个全新的没有写过的盘;当这个参数设置为0.5时,表示所要模拟的固态盘用过一段时间,其中有50%的存储空间保存有失效数据。因此,在开始模拟初始化时,根据这个参数的值, SSDsim的硬件行为层将随机位置的闪存物理页设置为失效的非空闲页。(2)数据缓存层数据缓存层对提高固态盘整体性能起着至关重要的作用,所以在SSDsim中,提供了对数据缓存层的行为模拟。在内存中,读写一个字节消

18、耗的时间是纳秒级,例如在MT46V64M456内存芯片中,是5纳秒。所以读写内存的时间可以通过读写的数据量乘以每字节的时间得到。缓存数据的最小单位是512字节,所以读写缓存数据的时间可以确定。因此在SSDsim的数据缓存层,通过计算数据量获得内存操作的具体时间。数据缓存层还需要模拟各种固态盘的数据缓存管理算法,例如最近最少使用算法、最不经常使用算法等。在SSDsim中,数据缓存区的最小单位采用一个结构体表示,结构体中最重要的成员是数据的逻辑地址。最小单位的结构体根据某种缓存管理算法进行排序。(3)闪存转换层在SSDsim中,闪存转换层模拟固态盘的闪存转换层的各种算法,包括地址映射、垃圾回收、损

19、耗均衡。地址映射包括页映射、块映射、混合映射、DFTL等,垃圾回收算法包括贪婪算法等,损耗均衡算法包括动态损耗均衡和静态损耗均衡。这个部分的算法与真实系统上的算法基本一致,SSDsim上的部分代码可以直接移植到真实固态盘系统中使用。闪存转换层对性能的影响主要是软件代码在处理器上执行的时间开销,因为处理器的处理周期为几个纳秒,相对读写闪存的读写操作时间,速度快三个数量级,在固态盘中,为完成一个物理页的读写操作,通常需要执行许多行程序,执行这些代码通常需要消耗成千上万个处理器的时钟周期,所以虽然单个时钟周期可以被忽略,但是在实际执行读写操作过程中,这些软件开销不能被忽略。因为在模拟过程中需要将这个

20、开销记录下来,在SSDsim中,采用一个估计值,近似地计算这个软件开销。因为这个软件开销相对闪存的读写过程时间的比例还是很低,所以从整个模拟结果来看,这个估计值不会明显影响SSDsim的模拟准确性。5.2.2 基本流程本节介绍SSDsim的基本流程。图5.4是SSDsim的基本流程图。图5.4 SSDsim的基本流程图如图5.4中所示,在开始模拟之前,首先执行初始化函数(initialize),通过这个函数SSDsim首先从参数文件中读入所有参数,并且根据读入的参数建立与之对应的结构体,例如相应的通道数,芯片数等。之后,执行预处理函数(pre_process),通过这个函数,将外部的请求文件逐

21、条读入,预先处理所有的读请求。预先处理读请求的目的在于,在映射表中将这些读请求的数据的映射关系建立起来,以保证在正式的模拟过程中,读请求可以根据这个映射关系从目标物理页读出该数据。预处理完成后,执行旧化函数(make_aged),这个函数根据参数文件给出的参数,在所模拟的固态盘中生成部分保持有失效数据的存储空间,以模拟使用过一段时间的固态盘。以上三个函数是模拟前准备过程。模拟准备完成之后,进入一个循环过程,在循环中,依次执行一下函数:寻找最近事件函数(find_nearest_event),获取外部请求函数(get_request),缓存区管理函数(buffer_management),分布函

22、数(distribute),处理函数(process),结果输出函数(trace_output)。寻找最近事件函数是在所有通道和芯片的下一状态预计时间中寻找距离SSDsim系统时间最近的时间,作为SSDsim新的系统时间。只有保证系统时间不断向前推进,才能使模拟过程继续。获取外部请求函数根据SSDsim的系统时间、外部的请求文件指针所指的外部请求到达时间、请求队列长度来决定是否要将文件指针所指的外部请求读入到SSDsim中,所有读入SSDsim的请求将挂在ssd_info结构体的request队列上。缓存区管理函数是用来模拟固态盘中缓冲区域对请求的服务过程。将新进来的请求首先在缓存区域寻找其目

23、标数据。例如,如果是读请求,在缓冲区域找到这个读请求的数据,则直接从缓冲区域将这个数据读出,然后响应这个读请求;如果是写请求,在缓冲区域找到这个写请求的数据,则直接将这个数据写到缓冲区域替换缓冲区域原来的旧数据,然后响应这个写请求。如果请求的数据不在缓存区,则需要进一步访问闪存。当需要访问闪存时,需要执行分布函数,在分布函数中,根据参数文件给出的分布方法参数,将外部请求分散成独立的子请求,挂在相应的通道的子请求队列(sub_request)。处理函数根据子请求的数量,选择合适的闪存操作,模拟闪存的访问过程。根据不同的闪存操作类型和请求大小,可以得到执行这个子请求的时间,当一个外部请求的所有子请

24、求完成后,就可以得到处理这个外部请求总的服务时间,响应时间。当一个外部请求的所有子请求完成后,在结果输出函数中将这个外部请求的模拟结果输出到结果输出文件。5.2.3 基本的数据结构在SSDsim中,存在三种类型的数据结构,他们分别是系统结构类、参数类、操作类。下面分别讨论这三类数据结构。(1)系统结构类数据结构系统结构类数据结构组成SSDsim的基础平台。在这一类数据结构中,每一种数据结构表示一种固态盘的逻辑或者物理单元。表5.3列出所有系统结构类数据结构。表5.3 系统结构类数据结构一览表编号命名模拟对象主要成员1ssd_info一个固态盘channel_head、dram、current_

25、time、request_queue、request_tail、子请求、统计2channel_info一个通道chip_head、状态+时间、子请求、统计3chip_info一个芯片die_head、状态+时间、统计4die_info一个晶圆plane_head5plane_info一个分组blk_head、add_reg_ppn、free_page6blk_info一个物理块page_head、erase_count、free_page_num、invalid_page_num、last_write_page7page_info一个物理页valid_state、free_state、lpn8

26、dram_info固态盘中内存map、buffer9map_info映射关系区域统计、map_entry10buffer_info数据缓存区域队列、统计、pTreeHeader11buffer_group数据缓存节点队列、group、stored、dirty_clean12entry映射关系Pn、state如表5.3中所列,18是固态盘中的物理单元,912是固态盘中的逻辑单元。16的结构体中第一个成员是构成模拟平台的关键成员(channel_head、chip_head、die_head、plane_head、blk_head、page_head)。如第一章中所描述的固态盘的基本结构,固态盘中

27、存在多个独立的通道,每个通道上存在多个独立的芯片,每个芯片包括多个晶圆,每个晶圆中有多个分组,每个分组由多个块组成,多个页组成一个块。在SSDsim中,结构体channel_info、chip_info、die_info、plane_info、blk_info、page_info分别表示通道、芯片、晶圆、分组、块、页。所要模拟的固态盘是什么样的硬件结构,SSDsim中就由这些结构体来表示这个固态盘的组成。假设固态盘中存在a个独立通道,每个独立通道中存在b个独立芯片,每个芯片中有c个晶圆,每个晶圆中有d个分组,每个分组中有e个块,每个块中有f个页。那么在SSDsim中就有a个channel_in

28、fo结构体,每个channel_info结构体中有1个chip_info结构体指针,这个指针所指向的是一个有b个chip_info结构体数组。每个chip_info结构体中有一个die_info结构体指针,这个指针所指向的是一个有c个die_info结构体数组,依次类推。在固态盘中,除了上述闪存的物理结构,还有一个物理结构就是内存,在SSDsim中的ssd_info结构体中,使用结构体dram_info来表示这个物理结构。在dram_info中,存在两个成员,既map_info结构体和buffer_info结构体。map_info结构体的成员map_entry结构指针指向一个名为entry的m

29、ap_entry结构体数组,这个固态盘中有多少映射关系就有多少个entry成员。Buffer_info结构体的成员pTreeHeader指向一个平衡二叉树的根节点,这个平衡二叉树的节点是buffer_group结构体,每个buffer_group表示一个数据缓存区节点。图5.3表示的是SSDsim中系统结构类结构体之间的关系。在ssd_info结构体中,除了如图5.5中列出的两个指针成员外,还存在另外四种成员:current_time是SSDsim的系统时间;request_queue和request_tail在SSDsim中维持请求队列的队首,队尾指针。外部请求到达时,先挂在这个队列上,等待

30、目标通道和芯片空闲后再被服务;统计是在SSDsim中用来记录一些高层次的统计信息,例如外部请求到达个数,写闪存次数,读闪存次数等。在channel_info和chip_info结构体中都存在状态+时间成员,它们是前面谈到过的独立单元的状态和时间:当前状态,当前时间,下一状态,下一状态预计时间。当前状态表示这个通道或者芯片当前的状态;当前时间是指开始这个状态的起始时间;下一状态表示,根据图5.3的状态转换图中,当前状态的下一个状态;下一状态预计时间是下个状态开始的时间,也就是当前状态结束的时间。在SSDsim中根据ssd_info中的系统时间(current_time)与每个通道、芯片的下一状态

31、预计时间进行比较,可以得到每个通道、芯片的新的当前状态。在ssd_info和channel_info中都存在子请求成员,这个成员是指向子请求队列的指针,所有外部请求到达固态盘后,需要将外部请求按照闪存页大小分割成独立的子请求。在SSDsim中,将分割出来的子请求,分别挂在子请求队列上。写请求到达时,不能立即确定写操作的物理位置,所以写请求的所有子请求全部挂在ssd_info上;读请求可以根据映射表,确定读操作的物理位置,所以读请求的所有子请求全部挂在channel_info上。图5.5 SSDsim中系统结构类结构体的相互联系在ssd_info、channel_info、chip_info和b

32、uffer_info中,存在统计成员,这个成员用来记录各种统计信息。例如在ssd_info中需要记录总的请求数等;channel_info需要记录在这个通道上的子请求数量等;chip_info需要记录在这个芯片上的子请求数量等;buffer_info需要记录数据缓存区的命中率等。plane_info中存在add_reg_ppn成员,这个成员用来记录在这个分组中进行读操作时的数据的物理页号。因为在SSDsim中需要模拟多分组读操作:当同一个晶圆的多个分组读出数据时,不同分组之间的数据需要相互区分,所以设置这个成员。另外,free_page用来记录在这个分组中还剩多少空闲页,以此作为触发垃圾回收的

33、条件。blk_info中存在erase_count、free_page_num、invalid_page_num、last_write_page,它们分别用来记录这个物理块被擦除的次数,剩余多少空闲页,有多少保存失效数据的页,以及上一次写操作时使用的页号。前面三项都是具体的统计信息。在闪存的物理块中,需要按照物理页的编号,依次写入数据,第四项last_write_page是用作这个写入顺序的记录,下次对这个物理块进行写操作时,直接将这个值加一即得到可以写入的物理页地址。page_info中存在valid_state、free_state、lpn三个成员,分别表示一个物理页中每个扇区的有效状态,

34、空闲状态和所记录的逻辑页号。因为在部分闪存中,比如SLC类型的闪存K9NBG08U5A 26中,允许只写入一个扇区的数据,而其他几个扇区在后续时间再写入,所以可能出现一个情况就是在一个物理页中,部分扇区有数据,部分扇区是空闲状态,在有数据的部分扇区中可能有部分数据是失效数据。因此在SSDsim中,使用valid_state、free_state来记录一个物理页内部分有效、部分空闲的情况。lpn用来记录保存在这个物理页中数据的逻辑页号。在固态盘的内存中,存在两种逻辑结构,既映射关系和数据缓存,在SSDsim中使用map、buffer分别模拟这两个逻辑结构。map是一个map_info类型的指针,

35、它指向一个map_info结构的结构体,在这个map_info结构体内,有一个entry结构体的指针map_entry,map_entry指向n个映射关系,在SSDsim中,每个映射关系用一个entry结构体来表示,每个entry结构体中有pn和state两个成员。pn表示这个逻辑页所在的物理页;state表示这个逻辑页中有效子页的位置。buffer是一个buffer_info类型的指针,它指向一个buffer_info结构的结构体,在这个结构内,包括统计信息成员,和指向缓存节点的指针。在SSDsim中缓存节点使用结构体buffer_group来表示。(2)参数类数据结构因为SSDsim需要模

36、拟不同的硬件结构,软件算法,所以需要提供外部输入不同参数的方法。在SSDsim中,通过参数文件的方式,将这些参数输入,输入的参数需要记录在模拟程序中,以便SSDsim在模拟过程中随时查询。所以在SSDsim中存在一类数据结构:参数类数据结构,用作记录这些参数。表5.5列出参数类数据结构的主要部分。表 5.4 参数类数据结构编号命名意义主要成员1ac_time_characteristics时序参数tWC、tRC、tR、tPROG2dram_parameter内存参数active_current、sleep_current、voltage3parameter_value整体参数其他参数在表5.4

37、中,第一个数据结构用来记录闪存的时序参数;第二个数据结构用来记录内存颗粒的电气参数,包括各种状态下的电流和电压;第三个数据结构包括以上两个结构体,并且还包括其他一些参数。(3)操作类数据结构表 5.5 操作类数据结构编号命名意义主要成员1request外部请求类型、LSN、大小、到达时间2sub_request子请求类型、LPN3local物理地址通道号、芯片号、晶圆号、分组号、块号、页号4gc_info垃圾回收信息统计统计5gc_operation垃圾回收操作请求local表5.5是SSDsim中操作类的数据结构。在固态盘内,从请求到达,到响应请求,需要经过一系列的操作。当外部请求到达时,首

38、先挂在请求队列上,在SSDsim中,使用request结构体来记录每一个到达的外部请求,这个结构体中包括请求到达的时间,类型(读还是写),请求起始地址,请求的数据量大小。在SSDsim中,使用sub_request结构体来记录外部数据转换成的子请求,这个结构体中包括请求类型,目标地址,子请求中的目标地址就是逻辑页。local结构体用来记录固态盘内物理的地址。gc_info结构体用来记录垃圾回收操作的各种统计信息。gc_operation结构体记录被触发的垃圾回收请求,其成员是需要垃圾回收的地址(通道号、芯片号、晶圆号、分组号)。5.3 SSDsim的操作流程SSDsim用来模拟固态盘的行为,根

39、据外部输入的请求流,得出在特定硬件结构,闪存转换层算法及数据缓存算法下固态盘的性能表现。为达到这个目的,SSDsim在开始模拟前,需要输入三个文件:参数文件、负载踪迹文件(trace)、输出文件。参数文件说明当前实验所模拟固态盘的硬件结构,闪存转换层算法及数据缓存算法。参数文件的第一个部分包括两种类型的参数,硬件的组织结构(芯片内的晶圆数,每个晶圆中分组的数量,每个分组内的块数量等),及时间参数;第二个部分包括两种类型的参数,能耗参数和闪存转换层配置参数,比如所要模拟的固态盘的内存芯片的激活状态电流为125mA,低功耗状态电流为50mA,刷新状态电流为5mA,内存和闪存芯片的工作电压为3.3V

40、。负载踪迹文件既通常所说的trace文件,用作记录特定的负载的所有的请求的到达时间,请求的类型,请求的逻辑地址,请求的大小。负载踪迹文件的所有请求都是按照时间顺序排列。SSDsim根据这个踪迹文件,可以重现出这个特定负载或者应用环境下的请求流,通过参数文件设定的硬件结构和算法,可以得到在这种负载下该硬件结构和算法的性能,从而寻找出在这个负载下最优的硬件结构和或算法。输出文件是用来记录每个请求的响应时间,以及特定硬件结构和软件算法在服务这个负载时的性能,能耗统计结果。每个请求的队列等待时间,服务时间和响应时间都依次输出到输出文件中,在模拟完成后输出服务整个负载的平均响应时间,总能耗,读写请求数等

41、统计信息。5.4 SSDsim的验证为了确认SSDsim的模拟结果准确性,需要将同一负载在SSDsim的模拟测试结果与真实系统上的测试结果进行比较,如果两者相差不大,说明SSDsim的模拟结果是可信的,否则SSDsim的模拟结果是失真的。这一节讨论SSDsim的验证过程。图 5.6 固态盘原型系统验证SSDsim所采用的实验平台是华中科技大学信息存储及应用实验室自主开发的一款固态盘原型系统,如图5.6所示。在这个固态盘原型中,采用mini-USB作为外部接口,四颗DRAM颗粒作为内存,八颗闪存颗粒组成两个独立的通道。因为需要对比真实系统上和SSDsim上相同请求的响应时间来验证SSDsim的准确性,所以在验证S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论