disksim使用总结

在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
出现了如下错误:

disksim使用总结_第1张图片

很明显是访问地址越界(我也知道是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,看你够不够。再运行之,直到现在还没有出现什么错误,但是也没有结果,我的直觉告诉我应该是对了,再等等吧!

你可能感兴趣的:(disksim使用总结)