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)
In ssd/Host_Interface_SATA.cpp and ssd/Host_Interface_NVMe.cpp, the function Request_Fetch_Unit_NVMe::Process_pcie_read_message gets the new_request->Start_LBA (uint64_t) by combining two uint32_t fields of Command_specific. However it left shift the upper bits by 31 but not 32.
In ssd/Host_Interface_SATA.cpp and ssd/Host_Interface_NVMe.cpp, the function Request_Fetch_Unit_NVMe::Process_pcie_read_message gets the new_request->Start_LBA (uint64_t) by combining two uint32_t fields of Command_specific. However it left shift the upper bits by 31 but not 32.
new_request->Start_LBA = ((LHA_type)sqe->Command_specific[1]) << 31 | (LHA_type)sqe->Command_specific[0];
I believe that it should be: new_request->Start_LBA = ((LHA_type)sqe->Command_specific[1]) << 32 | (LHA_type)sqe->Command_specific[0];
Maybe I misunderstood it. Does anyone find the same issue :)