2、下载对应的Disksim3.0以及Flashsim安装压缩包,可在博主提供的下载页中获得
http://download.csdn.net/detail/g382112762/9834319
4、删除压缩包内的disksim-3.0文件夹,然后进行解压 tar xfz disksim-3.0.tar.gz
5、解压后,进入disksim-3.0文件夹,输入make指令进行编译
6、编译完成后,cd valid ,进入valid文件后,执行./runvalid
输出结果为以下内容则编译成功 :
These results represent actual drivevalidation experiments
QUANTUM_QM39100TD-SW (rms should be about0.378)
rms = 0.377960
rms = 0.347581
......
8、回到disksim3.0文件夹下,解压src压缩包 tar xfz src.release.tar.gz
9、删除原src文件夹下所有内容 rm -r disksim-3.0/src/*
10、将解压后的src.release中的内容拷贝到disksim-3.0/src/文件夹下 cp -r src.release/* ./disksim-3.0/src/
11、将flashsim-20100324.patch拷贝至disksim-3.0/src/文件夹下 cp flashsim-20100324.patch ./disksim-3.0/src/
12、进入disksim-3.0/src/文件夹,并打补丁 patch -p1 -i flashsim-20100324.patch,成功后出现下列语句:
patching file dftl.c
patching file disksim_logorg.c
patching file fast.c
patching file flash.c
patching file pagemap.c
patching file syssim_driver.c
13、然后,退回到disksim-3.0文件夹,进行编译make。
14、到此,flashsim安装完成。但是,此时的flashsim在一定程度上的某些参数设计不够合理,例如支持的flash page size是2kb,因此,接下来我们需要对相应的配置参数进行调整。
15、flash.h文件中替换以下内容
#ifndef SSD_LAYOUT
#define SSD_LAYOUT
#include "type.h"
#define LB_SIZE_512 1
#define LB_SIZE_1024 2
#define LB_SIZE_2048 4
#define SECT_NUM_PER_PAGE 8 //gaocm original value is 4
#define PAGE_NUM_PER_BLK 64
#define SECT_NUM_PER_BLK (SECT_NUM_PER_PAGE * PAGE_NUM_PER_BLK)
#define SECT_SIZE_B 512
#define SECT_BITS 3 //gaocm original value is 2
#define PAGE_BITS 6 //original value is 6
#define PAGE_SECT_BITS 9 //original value is 8
#define BLK_BITS 28 //original value is 24
#define NAND_STATE_FREE -1
#define NAND_STATE_INVALID -2
#define SECT_MASK_IN_SECT 0x0003
#define PAGE_MASK_IN_SECT 0x00FC
#define PAGE_SECT_MASK_IN_SECT 0x00FF
#define BLK_MASK_IN_SECT 0xFFFFFF00
#define PAGE_BITS_IN_PAGE 0x003F
#define BLK_MASK_IN_PAGE 0x3FFFFFC0
#define PAGE_SIZE_B (SECT_SIZE_B * SECT_NUM_PER_PAGE)
#define PAGE_SIZE_KB (PAGE_SIZE_B / 1024)
#define BLK_SIZE_B (PAGE_SIZE_B * PAGE_NUM_PER_BLK)
#define BLK_SIZE_KB (BLK_SIZE_B / 1024)
#define BLK_NO_SECT(sect) (((sect) & BLK_MASK_IN_SECT) >> (PAGE_BITS + SECT_BITS))
#define PAGE_NO_SECT(sect) (((sect) & PAGE_MASK_IN_SECT) >> SECT_BITS)
#define SECT_NO_SECT(sect) ((sect) & SECT_MASK_IN_SECT)
#define BLK_PAGE_NO_SECT(sect) ((sect) >> SECT_BITS)
#define PAGE_SECT_NO_SECT(sect) ((sect) & PAGE_SECT_MASK_IN_SECT)
#define BLK_NO_PAGE(page) (((page) & BLK_MASK_IN_PAGE) >> PAGE_BITS)
#define PAGE_NO_PAGE(page) ((page) & PAGE_MASK_IN_PAGE)
#define SECTOR(blk, page) (((blk) << PAGE_SECT_BITS) | (page))
#define BLK_MASK_SECT 0x3FFFFE00
#define PGE_MASK_SECT 0x000001F8 //gaocm default value is 0x000000FC
#define OFF_MASK_SECT 0x00000007 //gaocm default value is 0x00000003
#define IND_MASK_SECT (PGE_MASK_SECT | OFF_MASK_SECT)
#define BLK_BITS_SECT 22
#define PGE_BITS_SECT 6
#define OFF_BITS_SECT 3 //gaocm default value is 2
#define IND_BITS_SECT (PGE_BITS_SECT + OFF_BITS_SECT)
#define BLK_F_SECT(sect) (((sect) & BLK_MASK_SECT) >> IND_BITS_SECT)
#define PGE_F_SECT(sect) (((sect) & PGE_MASK_SECT) >> OFF_BITS_SECT)
#define OFF_F_SECT(sect) (((sect) & OFF_MASK_SECT))
#define PNI_F_SECT(sect) (((sect) & (~OFF_MASK_SECT)) >> OFF_BITS_SECT)
#define IND_F_SECT(sect) (((sect) & IND_MASK_SECT))
#define IS_SAME_BLK(s1, s2) (((s1) & BLK_MASK_SECT) == ((s2) & BLK_MASK_SECT))
#define IS_SAME_PAGE(s1, s2) (((s1) & (~OFF_MASK_SECT)) == ((s2) & (~OFF_MASK_SECT)))
以及以下结构体:
struct nand_blk_info {
struct blk_state state; // Erase Conunter
struct sect_state sect[SECT_NUM_PER_BLK]; // Logical Sector Number
int fpc : 11; // free page counter
int ipc : 11; // invalide page counter
int lwn : 13; // last written page number
int page_status[PAGE_NUM_PER_BLK];
};
16、disksim_iotrace.c文件中替换iotrace_ascii_get_ioreq_event函数中以下内容:
//flashsim gaocm
new->bcount = ((new->blkno+ new->bcount-1)/8 - (new->blkno)/8 + 1) * 8;
new->blkno /= 8;
new->blkno *= 8;
17、disksim_main.c文件中替换warmFlash函数中以下内容:
bcount = ((blkno + bcount -1) / 8 - (blkno)/8 + 1) * 8;
blkno /= 8;
blkno *= 8;
18、完成上述参数调整后,当前的flashsim已经支持4KB闪存页,然后回到disksim3.0文件夹,将test.release.tar.gz压缩包解压至disksim-3.0
19、解压完成后,进入test.release文件夹,可进行运行程序,上述我们修改的是针对DFTL的部分进行/8,若需要修改其他ftl,可进行类似修改
20、运行命令../src/disksim dftl.parv dftl.outv ascii ./trace/test.file 0命令,gdb运行命令:
gdb ../src/disksim 然后, r dftl.parv dftl.outv ascii ./trace/test.file 0