<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi,<div><br></div><div>I am using the Cachemem module in the DiskSim 4.0 currently. The simulations run very well and obtain some reasonable results under most traces. However, for some traces, with a larger cache size, the "IOdriver Response time average" will also increase. It looks counter-intuitive. In my test, I used the simpledisk module as the storage device, and configured a cachemem module at the controller layer, atop the simpledisk. The traces I used is the MSR Cambridge traces, which can be downloaded from the URL: <a href="http://iotta.snia.org/traces/list/Subtrace?parent=MSR+Cambridge+Traces">http://iotta.snia.org/traces/list/Subtrace?parent=MSR+Cambridge+Traces</a>. To support the MSR traces, I modified the original DiskSim-4.0 source code to support this type of traces, and made requests' addresses and lengths aligned to 4KB. Because the traces are very IO-intensive, I changed the MAX_QUEUE_LENGTH value from 10000 to 100000 in the disksim_logorg.c. When I ran the simulation with the different cache sizes (2MB, 4MB, 8MB, 16MB, 32MB, 64MB, 128MB) under the src2_2.csv trace, the results as follows:</div><div><div>2MB_simpledisk_src2_2.outv:IOdriver Response time average:      32.755975</div><div>4MB_simpledisk_src2_2.outv:IOdriver Response time average:      30.813907</div><div>8MB_simpledisk_src2_2.outv:IOdriver Response time average:      31.827948</div><div>16MB_simpledisk_src2_2.outv:IOdriver Response time average:     38.167345</div><div>32MB_simpledisk_src2_2.outv:IOdriver Response time average:     60.471973</div><div>64MB_simpledisk_src2_2.outv:IOdriver Response time average:     100.896662</div></div><div>128MB_simpledisk_src2_2.outv:IOdriver Response time average:    157.491571</div><div><br></div><div>I am wondering whether there is something wrong with my configuration file or anything else. Any help or clue is highly appreciated. </div><div><br></div><div>Thanks,</div><div><br></div><div>BTW, the detailed configuration file I used is as follows:</div><div><br></div><div><div><div><div>disksim_global Global { </div><div>Init Seed = 42,</div><div>Real Seed = 42,</div><div># Statistic warm-up period = 1000 I/Os,</div><div>Stat definition file = statdefs</div><div><br></div><div>}</div><div><br></div><div>disksim_stats Stats {</div><div>iodriver stats = disksim_iodriver_stats {</div><div>Print driver size stats = 1,</div><div>Print driver locality stats = 1,</div><div>Print driver blocking stats = 1,</div><div>Print driver interference stats = 1,</div><div>Print driver queue stats = 1,</div><div>Print driver crit stats = 1,</div><div>Print driver idle stats = 1,</div><div>Print driver intarr stats = 1,</div><div>Print driver streak stats = 1,</div><div>Print driver stamp stats = 1,</div><div>Print driver per-device stats = 1 },</div><div>bus stats = disksim_bus_stats {</div><div>Print bus idle stats = 1,</div><div>Print bus arbwait stats = 1 },</div><div>ctlr stats = disksim_ctlr_stats {</div><div>Print controller cache stats = 1,</div><div>Print controller size stats = 1,</div><div>Print controller locality stats = 1,</div><div>Print controller blocking stats = 1,</div><div>Print controller interference stats = 1,</div><div>Print controller queue stats = 1,</div><div>Print controller crit stats = 1,</div><div>Print controller idle stats = 1,</div><div>Print controller intarr stats = 1,</div><div>Print controller streak stats = 1,</div><div>Print controller stamp stats = 1,</div><div>Print controller per-device stats = 1 },</div><div>device stats = disksim_device_stats {</div><div>Print device queue stats = 1,</div><div>Print device crit stats = 1,</div><div>Print device idle stats = 1,</div><div>Print device intarr stats = 1,</div><div>Print device size stats = 1,</div><div>Print device seek stats = 1,</div><div>Print device latency stats = 1,</div><div>Print device xfer stats = 1,</div><div>Print device acctime stats = 1,</div><div>Print device interfere stats = 1,</div><div>Print device buffer stats = 1 },</div><div>process flow stats = disksim_pf_stats {</div><div>Print per-process stats =  1,</div><div>Print per-CPU stats =  1,</div><div>Print all interrupt stats =  1,</div><div>Print sleep stats =  1</div><div>}</div><div>} # end of stats block</div><div><br></div><div><br></div><div>disksim_iodriver DRIVER0 {</div><div>type = 1,</div><div>Constant access time = 0.0,</div><div>   Scheduler = disksim_ioqueue {</div><div>      Scheduling policy = 1,</div><div>      Cylinder mapping strategy = 0,</div><div>      Write initiation delay = 0.0,</div><div>      Read initiation delay = 0.0,</div><div>      Sequential stream scheme = 0,</div><div>      Maximum concat size = 0,</div><div>      Overlapping request scheme = 0,</div><div>      Sequential stream diff maximum = 0,</div><div>      Scheduling timeout scheme = 0,</div><div>      Timeout time/weight = 0,</div><div>      Timeout scheduling = 0,</div><div>      Scheduling priority scheme = 0,</div><div>      Priority scheduling = 0</div><div>   }, # end of Scheduler</div><div>   Use queueing in subsystem = 1</div><div>} # end of DRV0 spec</div><div><br></div><div>disksim_bus BUS0 {</div><div>type = 2,</div><div>Arbitration type = 1,</div><div>Arbitration time = 0.001,</div><div>Read block transfer time = 0.0016276,</div><div>Write block transfer time = 0.0016276,</div><div>Print stats =  0</div><div>} # end of BUS0 spec</div><div><br></div><div>disksim_bus BUS1 {</div><div>type = 1,</div><div>Arbitration type = 1,</div><div>Arbitration time = 0.0,</div><div>Read block transfer time = 0.0,</div><div>Write block transfer time = 0.0,</div><div>Print stats =  1</div><div>} # end of BUS1 spec</div><div><br></div><div>disksim_ctlr CTLR0 {</div><div>type = 3,</div><div>Scale for delays = 0.0,</div><div>Bulk sector transfer time = 0.0,</div><div>Maximum queue length = 0,</div><div>Print stats =  1,</div><div>Scheduler = disksim_ioqueue {</div><div>     Scheduling policy = 1,</div><div>     Cylinder mapping strategy = 0,</div><div>     Write initiation delay = 0.0,</div><div>     Read initiation delay = 0.0,</div><div>     Sequential stream scheme = 0,</div><div>     Maximum concat size = 0,</div><div>     Overlapping request scheme = 0,</div><div>     Sequential stream diff maximum = 0,</div><div>     Scheduling timeout scheme = 0,</div><div>     Timeout time/weight = 0,</div><div>     Timeout scheduling = 0,</div><div>     Scheduling priority scheme = 0,</div><div>     Priority scheduling = 0</div><div>},  # end of ioqueue spec </div><div>Cache = disksim_cachemem { </div><div>     Cache size = 65536,</div><div>     SLRU segments = [ 1.0 ],</div><div>     Line size = 8,</div><div>     Bit granularity = 1,</div><div>     Lock granularity = 8,</div><div>     Shared read locks = 0,</div><div>     Max request size = 0,</div><div>     Replacement policy = 2,</div><div>     Allocation policy = 0,</div><div>     Write scheme = 3,</div><div>     Flush policy = 0,</div><div>     Flush period = 0.0,</div><div>     Flush idle delay = -1.0,</div><div>     Flush max line cluster = 32,</div><div>     Read prefetch type  = 0,</div><div>     Write prefetch type = 0,</div><div>     Line-by-line fetches = 0,</div><div>     Max gather = 31</div><div>},  # end of cachemem spec </div><div>Max per-disk pending count = 1</div><div>} # end of CTLR0 spec</div><div><br></div><div><br></div><div><br></div><div>disksim_simpledisk SD0 {</div><div>     Block count =  67108864,</div><div>     Access time =  1.0,</div><div>     Command overhead =  0.0,</div><div>     Bus transaction latency =  0.0,</div><div>     Bulk sector transfer time =  0.0,</div><div>     Never disconnect =  0,</div><div>     Print stats =  1,</div><div>     Max queue length =  1,</div><div>     Scheduler = disksim_ioqueue {</div><div>       Scheduling policy =  1,</div><div>       Cylinder mapping strategy =  0,</div><div>       Write initiation delay =  0.0,</div><div>       Read initiation delay =  0.0,</div><div>       Sequential stream scheme =  0,</div><div>       Maximum concat size =  0,</div><div>       Overlapping request scheme =  0,</div><div>       Sequential stream diff maximum =  0,</div><div>       Scheduling timeout scheme =  0,</div><div>       Timeout time/weight =  0,</div><div>       Timeout scheduling =  0,</div><div>       Scheduling priority scheme =  0,</div><div>       Priority scheduling =  0</div><div>     }</div><div>}  # end of SD0 spec</div><div><br></div><div><br></div><div># HP_C3323A</div><div>#source hp_c3323a.diskspecs</div><div><br></div><div># component instantiation</div><div>instantiate [ statfoo ] as  Stats</div><div>instantiate [ bus0 ]    as  BUS0</div><div>instantiate [ bus1 ]    as  BUS1</div><div>instantiate [ driver0 ] as  DRIVER0</div><div>instantiate [ ctlr0 ]   as  CTLR0</div><div>instantiate [ disk0 ] as SD0</div><div><br></div><div># system topology</div><div>topology disksim_iodriver driver0 [</div><div>     disksim_bus bus0 [ </div><div>          disksim_ctlr ctlr0 [ </div><div>               disksim_bus bus1 [ </div><div>                    disksim_simpledisk disk0 []</div><div>                    # end of bus1</div><div>               ]</div><div>               # end of ctlr0</div><div>          ]</div><div>          # end of bus0</div><div>     ]</div><div>     # end of system topology</div><div>]</div><div><br></div><div># no syncsets</div><div><br></div><div>disksim_logorg org0 {</div><div>   Addressing mode = Parts,</div><div>   Distribution scheme = Asis,</div><div>   Redundancy scheme = Noredun,</div><div>   devices = [ disk0 ],</div><div>   Stripe unit  =  67108864,</div><div>   Synch writes for safety =  0,</div><div>   Number of copies =  2,</div><div>   Copy choice on read =  6,</div><div>   RMW vs. reconstruct =  0.5,</div><div>   Parity stripe unit =  64,</div><div>   Parity rotation type =  1,</div><div>   Time stamp interval =  0.000000,</div><div>   Time stamp start time =  60000.000000,</div><div>   Time stamp stop time =  10000000000.000000,</div><div>   Time stamp file name =  stamps</div><div>} # end of logorg org0 spec</div><div><br></div><div>disksim_pf Proc {</div><div>   Number of processors =  1,</div><div>   Process-Flow Time Scale =  1.0</div><div>} # end of process flow spec</div><div><br></div><div>disksim_synthio Synthio {</div><div>   Number of I/O requests to generate =  100000,</div><div>   Maximum time of trace generated  =  5000.0,</div><div>   System call/return with each request =  0,</div><div>   Think time from call to request =  0.0,</div><div>   Think time from request to return =  0.0,</div><div>Generators = [</div><div>disksim_synthgen { # generator 0 </div><div>   Storage capacity per device  =  67108864,</div><div>   devices = [ disk0 ], </div><div>   Blocking factor =  8,</div><div>   Probability of sequential access =  0.2,</div><div>   Probability of local access =  1.0,</div><div>   Probability of read access =  0.66,</div><div>   Probability of time-critical request =  0.0,</div><div>   Probability of time-limited request =  0.0,</div><div>   Time-limited think times  = [ normal, 0.0, 0.0  ],</div><div>   General inter-arrival times  = [ exponential, 0.0, 5.0  ],</div><div>   Sequential inter-arrival times  = [ exponential, 0.0, 5.0  ],</div><div>   Local inter-arrival times  = [ exponential, 0.0, 5.0  ],</div><div>   Local distances  = [ normal, 0.0, 40000.0  ],</div><div>   Sizes  = [ exponential, 0.0, 4.0  ]</div><div>} # end of generator 0 </div><div>] # end of generator list </div><div>} # end of synthetic workload spec</div><div><br></div><div>Lei</div></div></div><div><br></div></div></body></html>