Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preconditioning doesn't work properly. #31

Open
SAM-ZY-2019 opened this issue Oct 19, 2019 · 3 comments
Open

Preconditioning doesn't work properly. #31

SAM-ZY-2019 opened this issue Oct 19, 2019 · 3 comments

Comments

@SAM-ZY-2019
Copy link

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
Copy link
Collaborator

arashta commented Oct 20, 2019

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
Copy link
Author

Error:
Unhandled address distribution type in FTL's preconditioning function.
SSD:
<?xml version="1.0" encoding="us-ascii"?> <Execution_Parameter_Set> <Host_Parameter_Set> <PCIe_Lane_Bandwidth>1.00000</PCIe_Lane_Bandwidth> <PCIe_Lane_Count>4</PCIe_Lane_Count> <SATA_Processing_Delay>400000</SATA_Processing_Delay> <Enable_ResponseTime_Logging>false</Enable_ResponseTime_Logging> <ResponseTime_Logging_Period_Length>1000000</ResponseTime_Logging_Period_Length> </Host_Parameter_Set> <Device_Parameter_Set> <Seed>321</Seed> <Enabled_Preconditioning>true</Enabled_Preconditioning> <Memory_Type>FLASH</Memory_Type> <HostInterface_Type>NVME</HostInterface_Type> <IO_Queue_Depth>65535</IO_Queue_Depth> <Queue_Fetch_Size>16</Queue_Fetch_Size> <Caching_Mechanism>ADVANCED</Caching_Mechanism> <Data_Cache_Sharing_Mode>SHARED</Data_Cache_Sharing_Mode> <Data_Cache_Capacity>268435456</Data_Cache_Capacity> <Data_Cache_DRAM_Row_Size>8192</Data_Cache_DRAM_Row_Size> <Data_Cache_DRAM_Data_Rate>400</Data_Cache_DRAM_Data_Rate> <Data_Cache_DRAM_Data_Busrt_Size>2</Data_Cache_DRAM_Data_Busrt_Size> <Data_Cache_DRAM_tRCD>13</Data_Cache_DRAM_tRCD> <Data_Cache_DRAM_tCL>13</Data_Cache_DRAM_tCL> <Data_Cache_DRAM_tRP>13</Data_Cache_DRAM_tRP> <Address_Mapping>HYBRID</Address_Mapping> <Ideal_Mapping_Table>true</Ideal_Mapping_Table> <CMT_Capacity>2097152</CMT_Capacity> <CMT_Sharing_Mode>SHARED</CMT_Sharing_Mode> <Plane_Allocation_Scheme>CWDP</Plane_Allocation_Scheme> <Transaction_Scheduling_Policy>OUT_OF_ORDER</Transaction_Scheduling_Policy> <Overprovisioning_Ratio>0.07</Overprovisioning_Ratio> <GC_Exec_Threshold>0.05000</GC_Exec_Threshold> <GC_Block_Selection_Policy>RGA</GC_Block_Selection_Policy> <Use_Copyback_for_GC>false</Use_Copyback_for_GC> <Preemptible_GC_Enabled>false</Preemptible_GC_Enabled> <GC_Hard_Threshold>0.005000</GC_Hard_Threshold> <Dynamic_Wearleveling_Enabled>true</Dynamic_Wearleveling_Enabled> <Static_Wearleveling_Enabled>true</Static_Wearleveling_Enabled> <Static_Wearleveling_Threshold>100</Static_Wearleveling_Threshold> <Preferred_suspend_erase_time_for_read>700000</Preferred_suspend_erase_time_for_read> <Preferred_suspend_erase_time_for_write>700000</Preferred_suspend_erase_time_for_write> <Preferred_suspend_write_time_for_read>100000</Preferred_suspend_write_time_for_read> <Flash_Channel_Count>2</Flash_Channel_Count> <Flash_Channel_Width>1</Flash_Channel_Width> <Channel_Transfer_Rate>333</Channel_Transfer_Rate> <Chip_No_Per_Channel>4</Chip_No_Per_Channel> <Flash_Comm_Protocol>NVDDR2</Flash_Comm_Protocol> <Flash_Parameter_Set> <Flash_Technology>MLC</Flash_Technology> <CMD_Suspension_Support>ERASE</CMD_Suspension_Support> <Page_Read_Latency_LSB>75000</Page_Read_Latency_LSB> <Page_Read_Latency_CSB>75000</Page_Read_Latency_CSB> <Page_Read_Latency_MSB>75000</Page_Read_Latency_MSB> <Page_Program_Latency_LSB>750000</Page_Program_Latency_LSB> <Page_Program_Latency_CSB>750000</Page_Program_Latency_CSB> <Page_Program_Latency_MSB>750000</Page_Program_Latency_MSB> <Block_Erase_Latency>3800000</Block_Erase_Latency> <Block_PE_Cycles_Limit>10000</Block_PE_Cycles_Limit> <Suspend_Erase_Time>700000</Suspend_Erase_Time> <Suspend_Program_Time>100000</Suspend_Program_Time> <Die_No_Per_Chip>2</Die_No_Per_Chip> <Plane_No_Per_Die>2</Plane_No_Per_Die> <Block_No_Per_Plane>2048</Block_No_Per_Plane> <Page_No_Per_Block>256</Page_No_Per_Block> <Page_Capacity>8192</Page_Capacity> <Page_Metadat_Capacity>448</Page_Metadat_Capacity> </Flash_Parameter_Set> </Device_Parameter_Set> </Execution_Parameter_Set>
Trace-based Workload
`

<MQSim_IO_Scenarios>

<IO_Scenario>
	<IO_Flow_Parameter_Set_Trace_Based>
			 <Priority_Class>HIGH</Priority_Class>
			 <Device_Level_Data_Caching_Mode>WRITE_CACHE</Device_Level_Data_Caching_Mode>
			 <Channel_IDs>0,1</Channel_IDs>
			 <Chip_IDs>0,1,2,3</Chip_IDs>
			 <Die_IDs>0,1</Die_IDs>
			 <Plane_IDs>0,1</Plane_IDs>
			 <Initial_Occupancy_Percentage>70</Initial_Occupancy_Percentage>
			 <File_Path>traces/tpcc-small.trace</File_Path>
			 <Percentage_To_Be_Executed>100</Percentage_To_Be_Executed>
			 <Relay_Count>1</Relay_Count>
			 <Time_Unit>NANOSECOND</Time_Unit>
	</IO_Flow_Parameter_Set_Trace_Based>
</IO_Scenario>

</MQSim_IO_Scenarios>
`

@zinechant
Copy link

zinechant commented Jan 6, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants