在ubuntu10.10下安装了disksim-3.0,runvalid也运行通了,然后在spc里面下载了一个Financial1的Trace文件,连接为:http://traces.cs.umass.edu/index.php/Storage/Storage也按照disksim的使用手册做了如下事情:
1.在Disksim-3.0/Src/Disksim_global.h中增加了一行
#define FIN1 10
2.在Disksim-3.0/Src/Disksim_iotrace.c中的iotrace_set_format函数中相应部位增加如下代码:
else if(strcmp(formatname,"fin1")==0) { disksim->traceformat = FIN1; }
3.在Disksim-3.0/Src/Disksim_iotrace.c中增加了一个iotrace_financial1_get_ioreq_event函数如下:
static ioreq_event * iotrace_financial1_get_ioreq_event (FILE *tracefile, ioreq_event *new) { char line[201]; char op; if (fgets(line, 200, tracefile) == NULL) { addtoextraq((event *) new); return(NULL); } if (sscanf(line, "%d,%d,%d,%c,%lf\n", &new->devno, &new->blkno, &new->bcount, &op, &new->time) != 5) { fprintf(stderr, "Wrong number of arguments for I/O trace event type\n"); fprintf(stderr, "line: %s", line); ddbg_assert(0); } if(op=='w') new->flags=WRITE; else new->flags=READ; new->buf = 0; new->opid = 0; new->busno = 0; new->cause = 0; return(new); }
4.在Disksim-3.0/Src/Disksim_iotrace.c的iotrace_get_ioreq_event函数的switch中增加如下代码:
case FIN1: temp = iotrace_financial1_get_ioreq_event(tracefile, temp); break;
然后运行如下命令时:../src/disksim ascii.parv ../myout/fin1.outv fin1 /home/he/下载/Financial1.spc 0
出现了如下错误:
很明显是访问地址越界(我也知道是ascii.parv这个地方出现了问题),但是需要怎么修改呢?对着disksim_users邮件列表看了一封一封的邮件(自己是新手,实在不知道解决问题的思路,只好出此下策),好不容易看到了3、4封跟我差不多的问题的邮件,但是都没有大牛回复,很是伤心,最后黄博让我跟那些提问的人发邮件问他们是怎么解决的,截止到目前为止,两个回复如下:
感谢大牛们的回答,两个答案都是为了使trace文件中的请求访问地址在你的逻辑磁盘地址之内,不过我觉得第一种修改trace文件的方法就不能保证你的测试用例与别人一致,结果就不让人信服,所以我还是选择第二种方法修改磁盘配置信息的parv文件。
1.根据在邮件列表中所浏览到的信息,修改parv文件并不是自己从0开始写一个parv文件,而是可以复制一个parv文件(我就是复制的ascii.parv)这个文件
2.然后再根据你的trace文件修改,可以对照着ascii.parv和Financial1.spc看,多看看,然后多尝试、多编译、多运行还是很容易改过来的!
改完之后,又运行了一遍,那个问题解决了,然而又出现了新问题如下:
这个问题在邮件列表中见过很多次,故马上到邮件列表中去寻找方法如下:
修改Disksim-3.0/src/disksim_logorg.c中MAX_QUEUE_LENGTH的值(默认为10000)
第一次我将其值修改为100000,然后再一次运行又出现了如下问题:
哈哈!Financial1.spc里面有500000的请求,所以那个值还是不够的,我就讲其值改为了1000000,看你够不够。再运行之,直到现在还没有出现什么错误,但是也没有结果,我的直觉告诉我应该是对了,再等等吧!