Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion eVSSIM/CONFIG/ssd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FILE_NAME ./data/ssd.img
PAGE_SIZE 4096
PAGE_NB 10
SECTOR_SIZE 1
FLASH_NB 4
FLASH_NB 32
BLOCK_NB 4096
PLANES_PER_FLASH 1
REG_WRITE_DELAY 82
Expand All @@ -16,4 +16,5 @@ CHANNEL_NB 4
STAT_TYPE 15
STAT_SCOPE 62
STAT_PATH /tmp/stat.csv
OSD_PATH /tmp/osd/
STORAGE_STRATEGY 1
28 changes: 16 additions & 12 deletions eVSSIM/CONFIG/vssim_config_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
#include "common.h"

/* SSD Configuration */
int SECTOR_SIZE;
int PAGE_SIZE;
int eVSSIM_SECTOR_SIZE;
int eVSSIM_PAGE_SIZE;

int64_t SECTOR_NB;
int PAGE_NB;
Expand Down Expand Up @@ -59,10 +59,10 @@ double GC_L2_THRESHOLD;
int GC_L2_THRESHOLD_BLOCK_NB;
#endif

/* Storage strategy (1 = address-based, 2 = object-based */
int STORAGE_STRATEGY;

char gFile_Name[PATH_MAX] = {0,};
char OSD_PATH[PATH_MAX] = {0,};
char STAT_PATH[PATH_MAX] = {0,};

void INIT_SSD_CONFIG(void)
Expand All @@ -83,10 +83,16 @@ void INIT_SSD_CONFIG(void)
if(fscanf(pfData, "%s", gFile_Name) == EOF)
printf("ERROR[%s] Cannot read filename\n",__FUNCTION__);

}
else if(strcmp(szCommand, "OSD_PATH") == 0)
{
if(fscanf(pfData, "%s", OSD_PATH) == EOF)
printf("ERROR[%s] Cannot read temp OSD path\n",__FUNCTION__);

}
else if(strcmp(szCommand, "PAGE_SIZE") == 0)
{
if(fscanf(pfData, "%d", &PAGE_SIZE) == EOF)
if(fscanf(pfData, "%d", &eVSSIM_PAGE_SIZE) == EOF)
printf("ERROR[%s] Wrong PAGE_SIZE\n",__FUNCTION__);
}
else if(strcmp(szCommand, "PAGE_NB") == 0)
Expand All @@ -96,7 +102,7 @@ void INIT_SSD_CONFIG(void)
}
else if(strcmp(szCommand, "SECTOR_SIZE") == 0)
{
if(fscanf(pfData, "%d", &SECTOR_SIZE) == EOF)
if(fscanf(pfData, "%d", &eVSSIM_SECTOR_SIZE) == EOF)
printf("ERROR[%s] Wrong SECTOR_SIZE\n",__FUNCTION__);
}
else if(strcmp(szCommand, "FLASH_NB") == 0)
Expand Down Expand Up @@ -207,12 +213,10 @@ void INIT_SSD_CONFIG(void)
}
#endif
else if(strcmp(szCommand, "STORAGE_STRATEGY") == 0)
{
if(fscanf(pfData, "%d", &STORAGE_STRATEGY) == EOF)
printf("ERROR[%s] Wrong STORAGE_STRATEGY\n",__FUNCTION__);


}
{
if(fscanf(pfData, "%d", &STORAGE_STRATEGY) == EOF)
printf("ERROR[%s] Wrong STORAGE_STRATEGY\n",__FUNCTION__);
}
memset(szCommand, 0x00, 1024);
}
fclose(pfData);
Expand All @@ -232,7 +236,7 @@ void INIT_SSD_CONFIG(void)
}

/* SSD Configuration */
SECTORS_PER_PAGE = PAGE_SIZE / SECTOR_SIZE;
SECTORS_PER_PAGE = eVSSIM_PAGE_SIZE / eVSSIM_SECTOR_SIZE;
PAGES_PER_FLASH = PAGE_NB * BLOCK_NB;
SECTOR_NB = (int64_t)SECTORS_PER_PAGE * (int64_t)PAGE_NB * (int64_t)BLOCK_NB * (int64_t)FLASH_NB;

Expand Down
13 changes: 7 additions & 6 deletions eVSSIM/CONFIG/vssim_config_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@
#ifndef _CONFIG_MANAGER_H_
#define _CONFIG_MANAGER_H_

#include "common.h"
#include <limits.h>

/* SSD Configuration */
extern int SECTOR_SIZE;
extern int PAGE_SIZE;
extern int eVSSIM_SECTOR_SIZE;
extern int eVSSIM_PAGE_SIZE;

extern int64_t SECTOR_NB;
extern int PAGE_NB;
Expand Down Expand Up @@ -63,10 +62,12 @@ extern int GC_L2_THRESHOLD_BLOCK_NB;
extern int STAT_TYPE;
extern int STAT_SCOPE;
extern char STAT_PATH[PATH_MAX];
void INIT_SSD_CONFIG(void);
char* GET_FILE_NAME(void);
extern char OSD_PATH[PATH_MAX];

/* Storage strategy (1 = address-based, 2 = object-based */
/* Storage strategy (0 = Sector based, 1 = Object based */
extern int STORAGE_STRATEGY;

void INIT_SSD_CONFIG(void);
char* GET_FILE_NAME(void);

#endif
18 changes: 11 additions & 7 deletions eVSSIM/FTL_SOURCE/COMMON/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
#include <sys/time.h>
#include <stdbool.h>
#include "ftl_type.h"
#include <inttypes.h>

/* FTL */
//#define FTL_DEBUG 1
#define FTL_DEBUG 1

/* VSSIM Function */
#define MONITOR_ON
Expand All @@ -31,20 +32,23 @@
#include "ftl_inverse_mapping_manager.h"
#include "ftl_perf_manager.h"

#include "ftl_sect_strategy.h"
#include "ftl_obj_strategy.h"

#include "ssd_util.h"
#include "ssd_io_manager.h"
#include "ssd_log_manager.h"

#ifdef VSSIMDEBUG
#define LOG_VSSIMDBG(fmt, ...) \
printf("DBG|: " fmt "\n",## __VA_ARGS__)
#else
#define LOG_VSSIMDBG(fmt, ...)
#endif

#ifdef PAGE_MAP
#include "ftl_gc_manager.h"
#include "ftl_mapping_manager.h"
#endif

#define SUCCESS 1
#define FAIL 0
#define SUCCESSFUL 1
#define FAILURE 0

/* Block Type */
#define EMPTY_BLOCK 30
Expand Down
74 changes: 8 additions & 66 deletions eVSSIM/FTL_SOURCE/PAGE_MAP/ftl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
// Hanyang University, Seoul, Korea
// Embedded Software Systems Lab. All right reserved


#include "common.h"
#include "ftl_sect_strategy.h"
#include "ftl_obj_strategy.h"

#include <arpa/inet.h>
#include <sys/socket.h>
Expand All @@ -16,7 +19,6 @@ extern double ssd_util;
int gatherStats = 0;
//Hold statistics information
uint32_t** mapping_stats_table;
storage_strategy_functions* storage_strategy;

void FTL_INIT(void)
{
Expand All @@ -31,7 +33,6 @@ void FTL_INIT(void)
INIT_EMPTY_BLOCK_LIST();
INIT_VICTIM_BLOCK_LIST();
INIT_PERF_CHECKER();
FTL_INIT_STRATEGY();

//Initialize The Statistics gathering component.
FTL_INIT_STATS();
Expand Down Expand Up @@ -59,69 +60,10 @@ void FTL_TERM(void)
printf("[%s] complete\n",__FUNCTION__);
}

void FTL_INIT_STRATEGY(void)
{
storage_strategy = malloc(sizeof(storage_strategy_functions));

if (STORAGE_STRATEGY == STORAGE_STRATEGY_OBJECT)
{
storage_strategy->FTL_READ = _FTL_OBJ_READ;
storage_strategy->FTL_WRITE = _FTL_OBJ_WRITE;
storage_strategy->FTL_COPYBACK = _FTL_OBJ_COPYBACK;
storage_strategy->FTL_CREATE = _FTL_OBJ_CREATE;
storage_strategy->FTL_DELETE = _FTL_OBJ_DELETE;

// object strategy needs initializing, unlike current other strategies
INIT_OBJ_STRATEGY();
}
else // default behaviour, if strategy was not defined or is invalid or whatever
{
storage_strategy->FTL_READ = _FTL_READ;
storage_strategy->FTL_WRITE = _FTL_WRITE;
storage_strategy->FTL_COPYBACK = _FTL_COPYBACK;
storage_strategy->FTL_CREATE = _FTL_CREATE;
storage_strategy->FTL_DELETE = _FTL_DELETE;
}
}

void FTL_TERM_STRATEGY(void)
{
if(STORAGE_STRATEGY == STORAGE_STRATEGY_OBJECT)
TERM_OBJ_STRATEGY();
free(storage_strategy);
}

void FTL_READ(uint64_t id, unsigned int offset, unsigned int length)
{
int ret;

ret = storage_strategy->FTL_READ(id, offset, length);
}

void FTL_WRITE(uint64_t id, unsigned int offset, unsigned int length)
{
int ret;

ret = storage_strategy->FTL_WRITE(id, offset, length);
}

int FTL_COPYBACK(uint32_t source, uint32_t destination)
{
return storage_strategy->FTL_COPYBACK(source, destination);
}

void FTL_CREATE(size_t size)
{
int ret;

ret = storage_strategy->FTL_CREATE(size);
}

void FTL_DELETE(uint64_t id)
{
int ret;

ret = storage_strategy->FTL_DELETE(id);
//As we can't figure out the storage strategy at this point, We can terminate the object strategy anyway... at the worst case where we're actually using the sector strtegy, it won't do anything and return
TERM_OBJ_STRATEGY();
}

void FTL_INIT_STATS(void)
Expand Down Expand Up @@ -201,17 +143,17 @@ int FTL_STATISTICS_GATHERING(uint32_t address , int type){

if (gatherStats == 0)
{
return SUCCESS;
return SUCCESSFUL;
}
if (address > PAGE_MAPPING_ENTRY_NB){
return FAIL;
return FAILURE;
}

//Increase the count of the action that was done.
mapping_stats_table[type][address] = mapping_stats_table[type][address] + 1;


return SUCCESS;
return SUCCESSFUL;
}

uint32_t FTL_STATISTICS_QUERY (uint32_t address, int scope , int type){
Expand Down
20 changes: 0 additions & 20 deletions eVSSIM/FTL_SOURCE/PAGE_MAP/ftl.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,12 @@
#ifndef _FTL_H_
#define _FTL_H_

#include "common.h"
extern uint32_t** mapping_stats_table;
void FTL_INIT(void);
void FTL_TERM(void);

void FTL_INIT_STRATEGY(void);
void FTL_TERM_STRATEGY(void);

void FTL_READ(uint64_t id, unsigned int offset, unsigned int length);
void FTL_WRITE(uint64_t id, unsigned int offset, unsigned int length);
int FTL_COPYBACK(uint32_t source, uint32_t destination);
void FTL_CREATE(size_t size);
void FTL_DELETE(uint64_t id);

void FTL_INIT_STATS(void);
int FTL_STATISTICS_GATHERING(uint32_t page_nb , int type);
uint32_t FTL_STATISTICS_QUERY(uint32_t address, int scope , int type);
Expand All @@ -29,16 +21,4 @@ void FTL_TERM_STATS(void);
void FTL_RECORD_SCOPE_STAT(FILE* fp , int scope);
void *STAT_LISTEN(void *socket);

/* Storage strategy function pointers' struct */
typedef struct {
int (* FTL_READ)(uint64_t, unsigned int, unsigned int);
int (* FTL_WRITE)(uint64_t, unsigned int, unsigned int);
int (* FTL_COPYBACK)(int, int);
int (* FTL_CREATE)(size_t);
int (* FTL_DELETE)(uint64_t);
} storage_strategy_functions;

#define STORAGE_STRATEGY_SECTOR 1
#define STORAGE_STRATEGY_OBJECT 2

#endif
Loading