您是第 位访客

disksim with ssdmodel 源码解析(二十二):读写和擦除时间的计算

ssdmodel模块中,SSD 的读写和擦除时间都是通过计算算出来的。在配置文件中可以配置 SSD 相应的参数,程序中会通过相应的参数计算出读写一个 page 和擦除一个 block 所需的时间。

读一个 page 的时间

$ read \;\; time \;\; cost = page \;\; read \;\; latency \; + \; chip \;\; xfer \;\; latency \; * \; byte \;\; per \;\; page $

写一个 page 的时间

$ write \;\; time \;\; cost = page \;\; write \;\; latency \; + \; chip \;\; xfer \;\; latency \; * \; byte \;\; per \;\; page $

符号说明

chip xfer latency:表示从(向) chip register 中读(写)一个字节所需要的时间,单位为ms。

byte per page:表示一个 page 里面有多少个字节,单位为字节。

page read latencypage write latency : 读写的延迟,单位为ms。

page read latencypage write latencychip xfer latency 这三个参数都可以在配置文件里面配置。

关于byte per page,在配置文件中可以设置 page size 这个参数的值,如果 page size = 8 表示一个 page 包含了 8 个 sector。一个 sector 的大小是 512 Byte,但是每个 sector 都要包含 16 Byte 的元数据。所以每次读取或者写入一个 sector 时都要读取或者写入相应的元数据。所以当 page size = 8 时,byte per page = 8*(512+16)。

举例

已知 page read latency = 0.025page write latency = 0.2chip xfer latency = 0.000025page size = 8,那么,

$ read \;\; time \;\; cost = 0.025 + 0.000025*(512+16)*8 = 0.1306 \; ms $

$ write \;\; time \;\; cost = 0.2 + 0.000025*(512+16)*8 = 0.3056 \; ms $

Note

SSD 在处理写请求的时候,如果这个写请求正好写在物理块的最后一个数据页上时,需要再写入一个页的元信息(通常一个物理块预留一个物理页作为元数据页,其他的页作为数据页)。

写入一个元数据页时,时间通常要比写入一个数据页要快,因为元数据页中的有效数据通常只有一个 sector(512+16 Byte)。所以写入元数据页的时候数据传输时间比较少,这个时候 $ write \;\; cost = page \;\; write \;\; latency + chip \;\; xfer \;\; latency * byte \;\; per \;\; sector $

擦除操作的时间

擦除操作首先是将该物理块上的有效数据迁移到空闲的物理块上,然后再将整个物理块擦除。迁移的过程中涉及到数据的读写和传输。所以一次擦除操作的时间是不固定的,受这个物理块上的有效数据的数量的影响。

在 ssdmodel 有可能会一次回收多个 block,这个时候只要一次加每次擦除操作的时间相加就可以了。

一次擦除操作的开销:

$ erase \;\; cost = block \;\; erase \;\; latency \; + \; move \;\; data \;\; cost $

block erase latency 表示擦除操作的延迟,这个可以在配置文件中配置,单位为 ms。

move data cost 表示在回收这个物理块的过程中,迁移数据所用的开销。

$ move \;\; data \;\; cost = move \;\; one \;\; page \;\; cost \; * \; number \;\; of \;\; valid \;\; page$

move one page cost 表示迁移一个page所需要的时间。

number of valid pages 表示当前物理块上有效数据的数量。

$ move \;\; one \;\; page \;\; cost = page \;\; read \;\; latency + page \;\; write \;\; latency + xfer \;\; cost $

page write latencypage read latency 的含义同上,表示读写延迟。

注意:如果迁移的数据写入的是新的物理块的最后一个数据物理页上,那么需要再额外写入一个sector大小的数据数据到元数据页上,也就是说这个时候 write latency 应该就等于 $ page \;\; write \;\; latency \; + \; (page \;\; write \;\; latency + chip \;\; xfer \;\; latency * byte \;\; per \;\; sector) $

xfer cost 表示数据传输的时间,如果迁移前后的数据块是在同一个 plane 那么 xfer cost = 0,否则,

$ xfer cost = chip \;\; xfer \;\; latency \; * \; byte \;\; per \;\; page \;\; * \;\; 2 $

之所以要乘以 2 是因为先读再写,有两次的数据传输时间。

move one page cost 表示迁移一个物理页所需要的时间开销,这个值的计算方法已经封装成了一个函数,即 ssd_clean.c 中的 ssd_clean_one_page() 函数。