DRAM utilization on OpenSSD

Post Reply
Posts: 1
Joined: Fri May 26, 2017 8:21 pm

DRAM utilization on OpenSSD

Post by yunho.oh » Tue Jul 04, 2017 1:35 am


I'm trying to develop a new system architecture with Cosmos Plus Board.
My plan is to add a simple array on DRAM space on OpenSSD and use the data in that array.

Here is a part of my implementation.
To minimize the change of original memory map, defined in GreedyFTL, I simply added the following code which indicates the pointer of my new array.

As far as I understand, this is the last pointer which is defined by default. I tried to maintain all pointers defined in memory_map.h as initially defined.
Line 98: #define WAY_PRIORITY_TABLE_ADDR (RETRY_LIMIT_TABLE_ADDR + sizeof(struct retryLimitArray))
I added Memory Address for My custom Table (MY_TABLE) as follows
#define MY_ADDR (WAY_PRIORITY_TABLE_ADDR + sizeof(struct wayPriorityArray))

Then, I allocated my table as following
in page_map.h
typedef struct _MYARRAY_ENTRY
unsigned int dword[9]; //36 bytes
struct MYArray
//total # of entries in this array is same with the number of entries in PageMap array.

in InitFtlMapTable() function in init_ftl.c
MYTable = (struct MYArray*)(MY_ADDR);

After implementing this, I tried to run GreedyFTL and see the message
"Press 'X' to re-make the bad block table".
The problem is that there is no further progress though I pressed X or N.

Is there any restriction to allocate the customized data on DRAM side? Am I contaminating any default data set by original GreedyFTL?

Jaewook Kwak
Posts: 6
Joined: Wed Apr 05, 2017 5:01 am

Re: DRAM utilization on OpenSSD

Post by Jaewook Kwak » Tue Jul 04, 2017 5:12 am

You can use the reserved region of DRAM.

<DRAM address map of Greedy FTL 2.7.0.c & 2.7.1.c>
Total DRAM range: 0x0010_0000 ~ 0x3FFF_FFFF
 - for memory segments : 0x0010_0000 ~ 0x001F_FFFF
   * code, data, stack, heap
 - Reserved: 0x0020_0000 ~ 0x00FF_FFFF
   * can be used
 - for NVMe admin process : 0x0100_0000 ~ 0x010F_FFFF
 - Reserved: 0x0110_0000 ~ 0x0FFF_FFFF
   * can be used
 - for data buffer : 0x1000_0000 ~ 0x122F_FFFF (data path of Cosmos+: host PC ↔ data buffer ↔ NAND flash)
   * SPARE_ADDR is used to read/write spare data of flash page
   * GC buffer is used for garbage collection process and other FTL management process
   * Uncached & nonbuffered region (Paging table setting in main.c)
 - for NAND command completion process: 0x12300_0000 ~ 0x124F_FFFF
   * Uncached & nonbuffered region (Paging table setting in main.c)
 - for FTL process and scheduling : 0x1250_0000 ~ end address (Metadata for data buffer, MAP tables, Request queues, etc)
   * End address depends on configurations (channel, way, block, etc)
 - Reserved: end address ~ 0x3FFF_FFFF
   * can be used

The start address of your table was properly located.
But, Your table may be too large to place on the reserved region.
Please check whether the end address of your table exceeds 0x3FFF_FFFF.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest