CMU-SAFARI / MQSim

MQSim is a fast and accurate simulator modeling the performance of modern multi-queue (MQ) SSDs as well as traditional SATA based SSDs. MQSim faithfully models new high-bandwidth protocol implementations, steady-state SSD conditions, and the full end-to-end latency of requests in modern SSDs. It is described in detail in the FAST 2018 paper by Arash Tavakkol et al., "MQSim: A Framework for Enabling Realistic Studies of Modern Multi-Queue SSD Devices" (https://people.inf.ethz.ch/omutlu/pub/MQSim-SSD-simulation-framework_fast18.pdf)
https://people.inf.ethz.ch/omutlu/pub/MQSim-SSD-simulation-framework_fast18.pdf
MIT License
268 stars 144 forks source link

Preconditioning doesn't work properly. #31

Open SAM-ZY-2019 opened 4 years ago

SAM-ZY-2019 commented 4 years ago

I think the preconditioning doesn’t work – endless while loop. In FTL.cpp, FTL::Perform_precondition function, Step 1-4, there are two while loops:

while (lpa_set_for_preconditioning.size() < no_of_logical_pages_in_steadystate)
                           {
                                  … cout<<loop1
                                  {
                                         … cout<<loop2

The “loop1” runs forever, and the printouts of it show that "lpa_set_for_preconditioning" is always an empty set. In detail, [FTL::Perform_precondition] Step 1-4: while loop 1:

lpa_set_for_preconditioning.size()=0 <  no_of_logical_pages_in_steadystate=43687868.
arashta commented 4 years ago

Preconditioning has been working correctly for all of our simulation scenarios. Please share the SSD configuration and workload definition files you are using for your simulation scenarios.

SAM-ZY-2019 commented 4 years ago

Error: Unhandled address distribution type in FTL's preconditioning function. SSD: `<?xml version="1.0" encoding="us-ascii"?>

1.00000 4 400000 false 1000000 321 true FLASH NVME 65535 16 ADVANCED SHARED 268435456 8192 400 2 13 13 13 HYBRID true 2097152 SHARED CWDP OUT_OF_ORDER 0.07 0.05000 RGA false false 0.005000 true true 100 700000 700000 100000 2 1 333 4 NVDDR2 MLC ERASE 75000 75000 75000 750000 750000 750000 3800000 10000 700000 100000 2 2 2048 256 8192 448

Trace-based Workload <?xml version="1.0" encoding="us-ascii"?>

HIGH WRITE_CACHE 0,1 0,1,2,3 0,1 0,1 70 traces/tpcc-small.trace 100 1 NANOSECOND

`

zinechant commented 2 years ago

It seems if the workload is trace-only, the Address_Distribution_Type is by default set as MIXED_STREAMING_RANDOM, which is not handled in preconditioning. One workaround seems to be changing the enum definition of Address_Distribution_Type to use a type handled by preconditioning as default.