您是第 位访客

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

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

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

读操作流程

下图展示了一个总线通道上交叉的读操作流程:

首先,控制时间(图中的Ctrl部分)表示,当控制信号到来时,总线通道会被锁住,请求 die 从给定的页中准备数据。

然后,die 处理读取数据的请求。这个时候总线是空闲的,可以处理其他请求。

最后,控制信号又会锁住总线通道,请求 die 从指定的页发送数据,并把这个数据发送出去。

一个有趣的现象是,在 R2 的第一次 ctrl time 的结束到 R1 的第二次 ctrl time 的开始之间的这段总线空闲时间并不能被 R3 所利用,所以第三个请求(R3)必须要等到第二个请求(R2)结束后才能开始。

写操作流程

下图展示了一个总线通道上的写操作流程:

首先,控制信号会独占总线通道,总线通道被锁住,控制信号会通知相应的 die 它将要接收数据。

然后,总线通道仍然处于锁住状态,这个时候总线通道上会进行数据传输。

最后,相应的 die 写入数据,这个时候总线通道是空闲的,可以处理其他请求。

因为读请求只需要占用连续的总线通道时间,所以读请求总是先来先服务(FIFO)。


Reference

Kim Y, Tauras B, Gupta A, et al. Flashsim: A simulator for nand flash-based solid-state drives[C]//Advances in System Simulation, 2009. SIMUL’09. First International Conference on. IEEE, 2009: 125-131.