当前位置:编程学习 > C/C++ >>

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中增加了一行
 
[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)这个文件
 
2.然后再根据你的trace文件修改,可以对照着ascii.parv和Financial1.spc看,多看看,然后多尝试、多编译、多运行还是很容易改过来的!
 
改完之后,又运行了一遍,那个问题解决了,然而又出现了新问题如下:
 
 
这个问题在邮件列表中见过很多次,故马上到邮件列表中去寻找方法如下:
 
修改Disksim-3.0/src/disksim_logorg.c中MAX_QUEUE_LENGTH的值(默认为10000)
 
第一次我将其值修改为100000,然后再一次运行又出现了如下问题:
 
 
哈哈!Financial1.spc里面有500000的请求,所以那个值还是不够的,我就讲其值改为了1000000,看你够不够。再运行之,直到现在还没有出现什么错误,但是也没有结果,我的直觉告诉我应该是对了,再等等吧!
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,