在ubuntu10.10下安装了disksim-3.0,runvalid也运行通了,然后在spc里面下载了一个Financial1的Trace文件,连接为:traces.cs.umass.edu/index.php/Storage/Storage也按照disksim的使用手册做了如下事情:
1.在Disksim-3.0/Src/Disksim_global.h中增加了一行
[cpp]
#define FIN1 10
2.在Disksim-3.0/Src/Disksim_iotrace.c中的iotrace_set_format函数中相应部位增加如下代码:
[cpp]
else if(strcmp(formatname,"fin1")==0)
{
disksim->traceformat = FIN1;
}
3.在Disksim-3.0/Src/Disksim_iotrace.c中增加了一个iotrace_financial1_get_ioreq_event函数如下:
[cpp]
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中增加如下代码:
[cpp]
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)这个文件