您是第 位访客

disksim-3.0 with flashsim 源码分析(六):垃圾回收

仍然以DFTL为例,在 dftl.c 文件中有一个 opm_write() 函数,前面对这个函数也进行过介绍,这个函数主要是实现 dftl 的写操作逻辑。在这个函数中会进行 GC 操作的判断,先调用 nand_get_free_blk(0) 函数,如果返回 -1 ,则表示需要进行垃圾回收,当整个 SSD 的空闲页大于阈值的时候就停止垃圾回收。这部分的代码,如下所示:

disksim-3.0 with flashsim 源码分析(五):写操作

flashsim中读写操作的函数调用流程是: callFsim() –> send_flash_request() –> opm_write() –> nand_page_write()

callFsim(): 主要解决的是缓冲区中映射表的查找和替换。
send_flash_request(): 通过判断当前使用的是什么类型的FTL,然后将读写请求发送到该 FTL 中去处理。
opm_write(): FTL 中的读写操作,
nand_page_write(): 最底层的读写操作的实现。

disksim-3.0 with flashsim 源码分析(三):callFsim()函数介绍

disksim-3.0 with flashim 和前面的 disksim-4.0 with ssdmodel 在逻辑上基本相似,只是多了些 FTL 层的东西。和前面介绍的 disksim-4.0 with ssdmodel 一样,程序仍然是从 disksim_device.c 中的 device_event_arrive() 函数中进入到 ssd 模块的。

进入到 ssd 模块后首先进入的是 disksim_simpleflash.c 文件,这就类似于 disksim-4.0 with ssdmodel 中的 ssd.c 文件,他们实现的功能有很多是相同的。

最后在 simpleflash_get_acctime() 函数中调用 callFsim() 函数。callFsim() 函数以后的内容才是 flashsim 重点实现的部分。

flashsim 源码分析(五): flashsim 的初始化

flashsim 的配置

flashsim 的源码目录下有个 ssd.conf 文件,对于 SSD 的一些参数可以在这个文件里面进行设置。还有一些默认的参数会在 ssd_config.cpp 文件中作为全局变量进行设置。

当需要模拟一个 SSD 时,首先需要调用 load_config(), 这个函数会读取配置文件,将配置文件中的信息保存在一些全局变量中。

flashsim 的初始化

flashsim 源码分析(三): 总线通道中的交叉

在 SSD 的读写中,很多过程都需要占用总线,有效利用总线的空闲时间可以降低 SSD 的响应时间。如果交叉地进行读写操作,这样可以提高总线的利用效率。

每一个总线通道(bus channel)上连接一个 package 里的所有 die。每个总线通道都是独立和并行的,不同通道上的操作是互相不干扰的。