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算法,性能完全一样,感觉有点不可思议,待研究!