转载

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

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

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

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

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.如果命中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

原文  http://cighao.com/2016/12/10/disksim-3.0-with-flashsim-source-analysis-02-DFTL-cache/
正文到此结束
Loading...