您是第 位访客

disksim-3.0 with flashsim 源码分析(二):DFTL 中的 cache

DFTL[1] 是一个页级映射的 FTL,它将映射表存在闪存中,并将一部分映射表放在 SSD 的缓存中。缓存中的映射表经常会被换进换出,DFTL 中采用了 segmented-LRU[2] 的方式管理缓存。

在 DFTL 中映射表是放在 opagemap[] 数组中的,数组的大小为所有映射记录的数量,也就是所有 page 的数量。

opagemap[] 数组里的每个元素都是一个 opm_entry 结构体,如下所示:

1
2
3
4
5
6
7
8
9
struct opm_entry {
_u32 free : 1;
_u32 ppn : 31;
int cache_status;
int cache_age;
int map_status;
int map_age;
int update;
};

为了深入了解映射表缓存的管理,先定义一些变量:

real_min:在所有 opagemap[].cache_status=MAP_REAL 的记录中,opagemap[real_min].map_age 是最小的。

real_max:在所有 opagemap[].cache_status=MAP_REAL 的记录中,opagemap[real_max].map_age 是最大的。

MAP_REAL_NUM_ENTRIES:所有 opagemap[].cache_status=MAP_REAL 的记录的条数。

MAP_GHOST_NUM_ENTRIES:所有 opagemap[].cache_status=MAP_GHOST 的记录的条数。

相关的操作的是在 ssd_interface.c 中的 callFsim() 函数中实现的。

假设我们要对逻辑页地址为 blkno 的逻辑页进行访问,具体流程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1.如果命中cache (即 opagemap[blkno].map_status == MAP_REAL) || (opagemap[blkno].map_status == MAP_GHOST)
(1)opagemap[blkno].map_age++;
(2)if(opagemap[blkno].map_status == MAP_GHOST)
1.2.1 更新 real_min;
1.2.2 if(opagemap[real_min].map_age <= opagemap[blkno].map_age)
1.2.2.1 将 opagemap[real_min].map_status 置为 MAP_GHOST;
1.2.2.2 将 opagemap[blkno].map_status 置为 MAP_REAL;
(3)if(opagemap[blkno].map_status == MAP_REAL)
1.3.1 更新 real_max;
2.如果没有命中cache:
(1)如果 MAP_REAL_NUM_ENTRIES 达到上限值
2.1.1 如果 MAP_GHOST_NUM_ENTRIES 达到上限值
2.1.1.1 剔除 cache_status=MAP_GHOST 记录中 map_age 最小的记录。
2.1.1.2 将 opagemap[real_min].map_status 置为 MAP_GHOST。
2.1.2 如果 MAP_GHOST_NUM_ENTRIES 没有达到上限值
将 opagemap[real_min].map_status 置为 MAP_GHOST。
(2)从闪存中读取映射表,添加新的记录到 opagemap[]。
设置 opagemap[blkno].map_status 为 MAP_REAL。
设置 opagemap[blkno].map_age 为 opagemap[real_max].map_age+1。
3.如果是写请求,标记该记录被修改过,即 opagemap[blkno].update = 1;

上面的流程只是缓存管理的一些核心操作,具体的细节可以看源代码的实现。


References

[1] Urgaonkar A G Y K B. Dftl: A flash translation layer employing demand-based selective caching of page-level address mappings[J]. Computer Systems Laboratory, department of Computer Science & Engineering. The Pennsylvania State University, Univesity Park, PA, 2008, 16802.

[2] R. Karedla, J. Spencer Love, and Bradley G. Wherry. Caching Strategies to Improve Disk System Performance. IEEE Transactions on Computer, 27(3):38–46, 1994