在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,看你夠不夠。再運行之,直到現在還沒有出現什麼錯誤,但是也沒有結果,我的直覺告訴我應該是對了,再等等吧!