SSDsim源码分析之find_nearest_event()
在介绍find_nearest_event()函数之前,我们很有必要了解下关于SSDsim的一些必要的模拟驱动原理:
SSDsim模拟驱动原理
SSDsim可以提供对时间和能耗的模拟。而首先我们先介绍下时间模拟部分的基本原理和依据;
通常大多数模拟器的驱动方式分为三种类型:即时间驱动,事件驱动和请求驱动。
采用时间驱动方式的模拟器需要先设置一个固定的时间步进长度,每当系统前进一个步进时间窗口,系统时间增加一个响应的步进长度,在针对处理器的模拟器中经常用到这种类型的模拟方法;
而基于事件驱动的模拟器则是根据系统内部各个部件的状态变化来修改系统时间,SSDsim就是采用的这种方式的驱动方法;
请求驱动是根据外部请求的到达来修改系统时间,这种方法实现简单,但是精确性不高,所以一般不考虑。
在SSDsim中,内存颗粒(chip)是固态硬盘中的独立服务单元,闪存通道(channel)相互之间也是独立的,多个内存颗粒chip分布在同一个闪存通道channel上,在SSDsim中,将这些单元统称为独立单元。
所以我们可以清晰而且确切的知道,在SSD中,每一个channel都是可以处理自己的IO队列请求的,所有的channel并行处理属于自己的IO队列请求。
其中每个独立单元都设置四个时间和状态变量:当前状态、当前状态时间、下一状态、下一状态预计时间。当前状态CURRENT_STATE表示这个独立单元的当前所处的状态,下一状态NEXT_STATE表示这个独立单元从当前状态将进化到的下一状态。
宏观上来看&#x