Transcript
Page 1: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

PERSISTENT MEMORY

NVMFAST

BYTE ADDRNONVOLATILE

Page 2: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

PERSISTENT MEMORYCPU

PERSISTENTM

EMO

RY

Provides an opportunity to manipulate persistent data directly

Ld/St

NVMFAST

BYTE ADDRNONVOLATILE

Page 3: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

WHAT HAPPENS WHEN WE RUN AN APPLICATION?

void hashtable_update (hashtable_t* ht, void *key, void *data){ list_t* chain = get_chain (ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) list_find (chain,

&updatePair); pair->second = data;}

Page 4: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

RUN THE CODE…

Persistent Memory System

System crash can result in permanent data corruption in NVM

void hashtable_update(hashtable_t* ht, void *key, void *data){ list_t* chain = get_chain(ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) list_find(chain,

&updatePair); pair->second = data;}

Page 5: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

CURRENT SOLUTION

void TMhashtable_update (TMARCGDECL hashtable_t* ht, void *key, void*data){ list_t* chain = get_chain (ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) TMLIST_FIND (chain,

&updatePair); pair->second = data;}

Page 6: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

CURRENT SOLUTION

void TMhashtable_update (TMARCGDECL hashtable_t* ht, void *key, void*data){ list_t* chain = get_chain (ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) TMLIST_FIND (chain,

&updatePair); pair->second = data;}

Manual declaration of persistent components

Needs a new implementation

Third party code can be inconsistent

ProhibitedOperation

Page 7: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

CURRENT SOLUTION

void TMhashtable_update (TMARCGDECL hashtable_t* ht, void *key, void*data){ list_t* chain = get_chain (ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) TMLIST_FIND (chain,

&updatePair); pair->second = data;}

Manual declaration of persistent components

Needs a new implementation

Third party code can be inconsistent

ProhibitedOperation

Burden on the programmers

Page 8: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

Our Solution:ThyNVM

Page 9: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

NO MODIFICATION IN THE CODEvoid hashtable_update (hashtable_t* ht, void *key, void *data){ list_t* chain = get_chain (ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) list_find (chain,

&updatePair); pair->second = data;}

Page 10: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

RUN THE EXACT SAME CODE…

Persistent Memory System

Software transparent memory crash consistency

void hashtable_update(hashtable_t* ht, void *key, void *data){ list_t* chain = get_chain(ht, key); pair_t* pair; pair_t updatePair; updatePair.first = key; pair = (pair_t*) list_find(chain,

&updatePair); pair->second = data;}

Page 11: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

ThyNVMA new hardware-based

checkpointing mechanism

• Checkpoints at multiple granularities to minimize both latency and metadata

• Overlaps checkpointing and execution

• Adapts to DRAM and NVM characteristics

Performs within 4.9% of an idealized DRAM with zero cost consistency

Page 12: PERSISTENT MEMORY NVM FAST BYTE ADDR NONVOLATILE

ThyNVMEnabling Software-Transparent

Crash Consistency in Persistent MemoryJinglei Ren, Jishen Zhao, Samira Khan,

Jongmoo Choi, Yongwei Wu, and Onur Mutlu

WEDNESDAY 10:20 am


Top Related