当前位置: 代码迷 >> Flash >> 在disksim-3.0中安装flashsim,并测试不同FTL算法在不同trace上的性能
  详细解决方案

在disksim-3.0中安装flashsim,并测试不同FTL算法在不同trace上的性能

热度:3512   发布时间:2013-02-26 00:00:00.0
在disksim-3.0中安装flashsim,并测试不同FTL算法在不同trace下的性能

1、flashsim的安装

成功安装disksim-3.0之后,按照如下步骤安装flashsim:

a、将flashsim-psu中的src.release.tar.gz压缩包解压生成src.release文件夹,将其拷入disksim-3.0目录下,更名为src,替代disksim-3.0中已有的src目录

b、将flashsim-psu中的flashsim-20100324.patch文件拷入/disksim-3.0/src目录下,然后命令行进入src目录,为其中的某些文件打补丁。(为什么打补丁?因为之前的某些代码编写不够规范,可能导致编译通不过,flashsim-20100324.patch文件就是为了修正那些不规范的写法。)命令如下:

he@he-virtual-machine:~/disksim-3.0/src$ 

patch -p1 -i flashsim-20100324.patch

运行时可能提示patch 命令找不到之类的,这是因为ubuntu系统默认没有安装patch,需要先安装一下。命令为:

sudo apt-get install patch

Patch安装成功后再执行如上命令,出现类似如下错误:

patching file fast.c

Hunk #1 FAILED at 58.

 

Hunk #2 FAILED at 266.

Hunk #3 FAILED at 294.

……

6 out of 6 hunks FAILED -- savingrejects to file fast.c.rej

则表明从flashsim-psu中拷过来的src.release不是原始的版本。我刚开始因为不了解patch文件的真正含义,所以无意识中就犯了这个粗心的错误。因为之前对disksim-3.0中的代码做了一些修改,导致行号和原来的不对应(行数有增加),而flashsim-20100324.patch文件的执行是严格按照行号来修订原始版本中的不规范代码,所以patch总是通不过。意识到问题症结所在后,使用重新解压得到的disksim-3.0,再执行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

Hunk #1 FAILED at 129.

Hunk #2 FAILED at 139.

2 out of 4 hunks FAILED -- savingrejects to file syssim_driver.c.rej

然后通过阅读patch文件以及错误提示信息,直接在syssim_driver.c的相应部位增加如下代码:

FILE *fp = fopen(argv[5],"r");

double time;

int devno, bcount, flags;

unsigned int blkno;

char buffer[80];

unsigned int cnt = 0;

int BLOCKSIZE = 512;

c、退回到disksim-3.0目录下,再次编译。

he@he-virtual-machine:~/程序/disksim-3.0$make

编译正确,至此flashsim的配置大功告成,可以运行其自带的一些FTL算法了。


2、运行自带的trace文件

在http://csl.cse.psu.edu/?q=node/322中下载了一个自带的trace文件和脚本文件test.release。

将其拷贝到disksim-3.0目录下,然后进入该目录运行./runtest

得到的运行结果如下:



3、运行Financial1 trace文件

前面也已经写过一篇博客,在不含flashsim的disksim-3.0里面运行financial1 trace文件,加进flashsim之后我还是按照前面的方法,但是遇到了很多问题。具体的截图没有保留下来(有点遗憾),后来在师兄的指点下,用gdb一步步的调试,找到了如下的一个解决办法(如果你有更好的办法,烦请通知一声):

a、在disksim_iotrace.c中增加一个解析financial1 trace文件的函数iotrace_financial1_get_ioreq_event();

b、在disksim_main.c中还需要增加一个解析financial1 trace文件的函数warmFlash_financial1(char *tname);

c、在disksim_main.c中的main函数中根据运行disksim的argv[3]来选择底层的warmFlash函数(如:warmFlash_ascii、warmFlash_financial1、warmFlash_websearch1)

经过上述改动之后,重新编译、运行,得到如下结果:


3种FTL算法中DFTL还有一点问题,用gdb调试之后,发现是financial1 trace文件中有些请求的起始地址太大,超过了模拟的SSD的地址范围,后来将financial1 trace文件中的请求起始地址稍微过滤了一下(为什么另外两种FTL算法中请求地址没有越界呢,暂不得其解),重新运行得到如下结果:



4、运行WebSearch1 trace文件

有了运行financial1的基础,再来运行websearch1很顺利,直接贴结果如下:



5、测试结果分析

为什么对于不同的trace文件,对于同一种FTL算法,性能完全一样,感觉有点不可思议,待研究!

  相关解决方案