[Disksim-users] A problem in using the Cachemem module

Lei Tian leitian.hust at gmail.com
Thu Oct 21 15:31:27 EDT 2010


Hi,

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: http://iotta.snia.org/traces/list/Subtrace?parent=MSR+Cambridge+Traces. 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:
2MB_simpledisk_src2_2.outv:IOdriver Response time average:      32.755975
4MB_simpledisk_src2_2.outv:IOdriver Response time average:      30.813907
8MB_simpledisk_src2_2.outv:IOdriver Response time average:      31.827948
16MB_simpledisk_src2_2.outv:IOdriver Response time average:     38.167345
32MB_simpledisk_src2_2.outv:IOdriver Response time average:     60.471973
64MB_simpledisk_src2_2.outv:IOdriver Response time average:     100.896662
128MB_simpledisk_src2_2.outv:IOdriver Response time average:    157.491571

I am wondering whether there is something wrong with my configuration file or anything else. Any help or clue is highly appreciated. 

Thanks,

BTW, the detailed configuration file I used is as follows:

disksim_global Global { 
Init Seed = 42,
Real Seed = 42,
# Statistic warm-up period = 1000 I/Os,
Stat definition file = statdefs

}

disksim_stats Stats {
iodriver stats = disksim_iodriver_stats {
Print driver size stats = 1,
Print driver locality stats = 1,
Print driver blocking stats = 1,
Print driver interference stats = 1,
Print driver queue stats = 1,
Print driver crit stats = 1,
Print driver idle stats = 1,
Print driver intarr stats = 1,
Print driver streak stats = 1,
Print driver stamp stats = 1,
Print driver per-device stats = 1 },
bus stats = disksim_bus_stats {
Print bus idle stats = 1,
Print bus arbwait stats = 1 },
ctlr stats = disksim_ctlr_stats {
Print controller cache stats = 1,
Print controller size stats = 1,
Print controller locality stats = 1,
Print controller blocking stats = 1,
Print controller interference stats = 1,
Print controller queue stats = 1,
Print controller crit stats = 1,
Print controller idle stats = 1,
Print controller intarr stats = 1,
Print controller streak stats = 1,
Print controller stamp stats = 1,
Print controller per-device stats = 1 },
device stats = disksim_device_stats {
Print device queue stats = 1,
Print device crit stats = 1,
Print device idle stats = 1,
Print device intarr stats = 1,
Print device size stats = 1,
Print device seek stats = 1,
Print device latency stats = 1,
Print device xfer stats = 1,
Print device acctime stats = 1,
Print device interfere stats = 1,
Print device buffer stats = 1 },
process flow stats = disksim_pf_stats {
Print per-process stats =  1,
Print per-CPU stats =  1,
Print all interrupt stats =  1,
Print sleep stats =  1
}
} # end of stats block


disksim_iodriver DRIVER0 {
type = 1,
Constant access time = 0.0,
   Scheduler = disksim_ioqueue {
      Scheduling policy = 1,
      Cylinder mapping strategy = 0,
      Write initiation delay = 0.0,
      Read initiation delay = 0.0,
      Sequential stream scheme = 0,
      Maximum concat size = 0,
      Overlapping request scheme = 0,
      Sequential stream diff maximum = 0,
      Scheduling timeout scheme = 0,
      Timeout time/weight = 0,
      Timeout scheduling = 0,
      Scheduling priority scheme = 0,
      Priority scheduling = 0
   }, # end of Scheduler
   Use queueing in subsystem = 1
} # end of DRV0 spec

disksim_bus BUS0 {
type = 2,
Arbitration type = 1,
Arbitration time = 0.001,
Read block transfer time = 0.0016276,
Write block transfer time = 0.0016276,
Print stats =  0
} # end of BUS0 spec

disksim_bus BUS1 {
type = 1,
Arbitration type = 1,
Arbitration time = 0.0,
Read block transfer time = 0.0,
Write block transfer time = 0.0,
Print stats =  1
} # end of BUS1 spec

disksim_ctlr CTLR0 {
type = 3,
Scale for delays = 0.0,
Bulk sector transfer time = 0.0,
Maximum queue length = 0,
Print stats =  1,
Scheduler = disksim_ioqueue {
     Scheduling policy = 1,
     Cylinder mapping strategy = 0,
     Write initiation delay = 0.0,
     Read initiation delay = 0.0,
     Sequential stream scheme = 0,
     Maximum concat size = 0,
     Overlapping request scheme = 0,
     Sequential stream diff maximum = 0,
     Scheduling timeout scheme = 0,
     Timeout time/weight = 0,
     Timeout scheduling = 0,
     Scheduling priority scheme = 0,
     Priority scheduling = 0
},  # end of ioqueue spec 
Cache = disksim_cachemem { 
     Cache size = 65536,
     SLRU segments = [ 1.0 ],
     Line size = 8,
     Bit granularity = 1,
     Lock granularity = 8,
     Shared read locks = 0,
     Max request size = 0,
     Replacement policy = 2,
     Allocation policy = 0,
     Write scheme = 3,
     Flush policy = 0,
     Flush period = 0.0,
     Flush idle delay = -1.0,
     Flush max line cluster = 32,
     Read prefetch type  = 0,
     Write prefetch type = 0,
     Line-by-line fetches = 0,
     Max gather = 31
},  # end of cachemem spec 
Max per-disk pending count = 1
} # end of CTLR0 spec



disksim_simpledisk SD0 {
     Block count =  67108864,
     Access time =  1.0,
     Command overhead =  0.0,
     Bus transaction latency =  0.0,
     Bulk sector transfer time =  0.0,
     Never disconnect =  0,
     Print stats =  1,
     Max queue length =  1,
     Scheduler = disksim_ioqueue {
       Scheduling policy =  1,
       Cylinder mapping strategy =  0,
       Write initiation delay =  0.0,
       Read initiation delay =  0.0,
       Sequential stream scheme =  0,
       Maximum concat size =  0,
       Overlapping request scheme =  0,
       Sequential stream diff maximum =  0,
       Scheduling timeout scheme =  0,
       Timeout time/weight =  0,
       Timeout scheduling =  0,
       Scheduling priority scheme =  0,
       Priority scheduling =  0
     }
}  # end of SD0 spec


# HP_C3323A
#source hp_c3323a.diskspecs

# component instantiation
instantiate [ statfoo ] as  Stats
instantiate [ bus0 ]    as  BUS0
instantiate [ bus1 ]    as  BUS1
instantiate [ driver0 ] as  DRIVER0
instantiate [ ctlr0 ]   as  CTLR0
instantiate [ disk0 ] as SD0

# system topology
topology disksim_iodriver driver0 [
     disksim_bus bus0 [ 
          disksim_ctlr ctlr0 [ 
               disksim_bus bus1 [ 
                    disksim_simpledisk disk0 []
                    # end of bus1
               ]
               # end of ctlr0
          ]
          # end of bus0
     ]
     # end of system topology
]

# no syncsets

disksim_logorg org0 {
   Addressing mode = Parts,
   Distribution scheme = Asis,
   Redundancy scheme = Noredun,
   devices = [ disk0 ],
   Stripe unit  =  67108864,
   Synch writes for safety =  0,
   Number of copies =  2,
   Copy choice on read =  6,
   RMW vs. reconstruct =  0.5,
   Parity stripe unit =  64,
   Parity rotation type =  1,
   Time stamp interval =  0.000000,
   Time stamp start time =  60000.000000,
   Time stamp stop time =  10000000000.000000,
   Time stamp file name =  stamps
} # end of logorg org0 spec

disksim_pf Proc {
   Number of processors =  1,
   Process-Flow Time Scale =  1.0
} # end of process flow spec

disksim_synthio Synthio {
   Number of I/O requests to generate =  100000,
   Maximum time of trace generated  =  5000.0,
   System call/return with each request =  0,
   Think time from call to request =  0.0,
   Think time from request to return =  0.0,
Generators = [
disksim_synthgen { # generator 0 
   Storage capacity per device  =  67108864,
   devices = [ disk0 ], 
   Blocking factor =  8,
   Probability of sequential access =  0.2,
   Probability of local access =  1.0,
   Probability of read access =  0.66,
   Probability of time-critical request =  0.0,
   Probability of time-limited request =  0.0,
   Time-limited think times  = [ normal, 0.0, 0.0  ],
   General inter-arrival times  = [ exponential, 0.0, 5.0  ],
   Sequential inter-arrival times  = [ exponential, 0.0, 5.0  ],
   Local inter-arrival times  = [ exponential, 0.0, 5.0  ],
   Local distances  = [ normal, 0.0, 40000.0  ],
   Sizes  = [ exponential, 0.0, 4.0  ]
} # end of generator 0 
] # end of generator list 
} # end of synthetic workload spec

Lei

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.andrew.cmu.edu/pipermail/disksim-users/attachments/20101021/a1774eed/attachment.html>


More information about the Disksim-users mailing list