hardware support for nvm programmingnvm v d d v store data[0] = 0xfood store data[1] = 0xbeef store...

64
Hardware Support for NVM Programming 1

Upload: others

Post on 26-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Hardware Support for NVM Programming

1

Page 2: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Ordering

• Transactions

• Write endurance

Outline

2

Page 3: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Volatile Memory Ordering

• Write-back caching

– Improves performance

– Reorders writes to DRAM

• Reordering to DRAM does not break correctness

• Memory consistency orders stores between CPUs

CPU

Write-back Cache

DRAM

B A

B A

STORE A STORE B

CPU

3

Page 4: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Recovery depends on write ordering

CPU

Write-back Cache

NVM

V D

V D

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1

Crash

D

D

CPU

Persistent Memory (PM) Ordering

4

Page 5: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Persistent Memory (PM) Ordering

• Recovery depends on write ordering

GARBAGE

1

data

valid

NVM

Reordering breaks recovery Recovery incorrectly considers garbage as valid data

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1

Write-back Cache

CPU

CPU

5

Page 6: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Simple Solutions

• Disable caching

• Write-through caching

• Flush entire cache at commit

6

Page 7: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Generalizing PM Ordering

1: STORE data[0] = 0xFOOD 2: STORE data[1] = 0xBEEF 3: STORE valid = 1

7

Page 8: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

1 2

1: PERSIST data[0] 2: PERSIST data[1] 3: PERSIST valid

3 Program order implies unnecessary constraints

Need interface to describe necessary constraints

Generalizing PM Ordering

8

Page 9: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

1

2

3

1: PERSIST data[0] 2: PERSIST data[1] 3: PERSIST valid

Need interface to expose necessary constraints

Expose persist concurrency; sounds like consistency!

Generalizing PM Ordering

9

Page 10: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Memory Persistency: Memory Consistency for NVM

• Framework to reason about persist order while maximizing concurrency

• Memory consistency

– Constrains order of loads and stores between CPUs

• Memory persistency

– Constrains order of writes with respect to failure

[Pelley, ISCA14]

10

Page 11: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Memory Persistency = Consistency + Recovery Observer

• Abstract failure as recovery observer

– Observer sees writes to NVM

• Memory persistency

– Constrains order of writes with respect to observer

CPU CPU

Consistency

Memory Persistency

STORES

PERSISTS

(Observer)

11

Page 12: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Ordering With Respect to Recovery Observer

CPU

Write-back Cache

NVM

V D

V D

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1

D

D

CPU

STORES PERSISTS

Memory Persistency

12

Page 13: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Ordering With Respect to Recovery Observer

CPU

Write-back Cache

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1

CPU

GARBAGE

1

data

valid

NVM

Memory Persistency (view after crash)

13

Page 14: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Persistency Design Space

• Strict persistency: single memory order

• Relaxed persistency: separate volatile and (new) persistent memory orders

Volatile Memory Order Happens Before: Persistent Memory Order

14

Page 15: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Ordering

– Intel x86 ISA extensions [Intel14]

– BPFS epochs barriers [Condit, SOSP09]

– Strand persistency [Pelley, ISCA14]

• Transactions

• Write endurance

Outline

Relax persistency

15

Page 16: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Ordering with Existing Hardware

• Order writes by flushing cachelines via CLFLUSH

• But CLFLUSH:

– Stalls the CPU pipeline and serializes execution

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF CLFLUSH data[0] CLFLUSH data[1] STORE valid = 1

stall (~200ns)

time

data[1]

valid

ST CLFLUSH

ST

data[0] ST CLFLUSH

16

Page 17: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Ordering with Existing Hardware

• Order writes by flushing cachelines via CLFLUSH

• But CLFLUSH:

– Stalls the CPU pipeline and serializes execution

– Invalidates the cacheline

– Only sends data to the memory subsystem – does not commit data to NVM

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF CLFLUSH data[0] CLFLUSH data[1] STORE valid = 1

17

Page 18: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Fixing CLFLUSH: Intel x86 Extensions

• CLFLUSHOPT

• CLWB

• PCOMMIT

18

Page 19: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

CLFLUSHOPT

• Provides unordered version of CLFLUSH

• Supports efficient cache flushing

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF CLFLUSHOPT data[0] CLFLUSHOPT data[1] SFENCE // explicit ordering point STORE valid = 1

Implicit orderings

19

Page 20: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

CLFLUSHOPT

• Provides unordered version of CLFLUSH

• Supports efficient cache flushing

data[1]

valid

ST CLFLUSHOPT

ST

data[0] ST CLFLUSHOPT time

data[1]

valid

ST CLFLUSH

ST

data[0] ST CLFLUSH

time 20

Page 21: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

CLWB

• Write backs modified data of a cacheline

• Does not invalidate the line from the cache

– Marks the line as non-modified

• Note: Following examples use CLWB

21

Page 22: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

PCOMMIT

• Commits data writes queued in the memory subsystem to NVM

STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF CLWB data[0] CLWB data[1] SFENCE // orders subsequent PCOMMIT PCOMMIT // commits data[0], data[1] SFENCE // orders subsequent stores STORE valid = 1

Limitation: PCOMMITs execute serially 22

Page 23: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

R

Z

X

Example: Copy on Write

23

Y

Page 24: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write

R

Z

X

Z’

R’ STORE Y’ STORE Z’ CLWB Y’ CLWB Z’ PCOMMIT STORE R’ CLWB R’

24

Y Y’

Page 25: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write

R

Z

X

Z’

R’ STORE Y’ STORE Z’ CLWB Y’ CLWB Z’ PCOMMIT STORE R’ CLWB R’ PCOMMIT STORE X’ STORE Z’’ CLWB X’ CLWB Z’’ PCOMMIT STORE R’ CLWB R’

25

Y

Z’’

R’’

X’

Y’

Page 26: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write – Timeline

R’ CLWB

Y’ CLWB

PCOMMIT

PCOMMIT

time

Z’

ST

ST

ST stall

PCOMMITs execute serially

26

R’’

X’

Z’’

CLWB

CLWB ST

ST CLWB

CLWB ST

stall PCOMMIT

stall

Page 27: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Ordering

– Intel x86 ISA extensions [Intel14]

– BPFS epochs barriers [SOSP09]

– Strand persistency [ISCA14]

• Transactions

• Write endurance

Outline

Relax persistency

27

Page 28: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

BPFS Epochs Barriers

• Barriers separate execution into epochs: sequence of writes to NVM from the same thread

STORE … STORE … EPOCH_BARRIER STORE … EPOCH_BARRIER STORE …

Epoch

Epoch

Epoch

Writes within same epoch are unordered

A younger write is issued to NVM only after all previous epochs commit

[Condit, SOSP09]

28

Page 29: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write

R

Z

X

Z’

R’ STORE Y’ STORE Z’ EPOCH_BARRIER STORE R’

29

Y Y’

Epoch

Epoch

Page 30: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write

R

Z

X

Z’

R’ STORE Y’ STORE Z’ EPOCH_BARRIER STORE R’ EPOCH_BARRIER STORE X’ STORE Z’’ EPOCH_BARRIER STORE R’

30

Y

Z’’

R’’

X’

Y’

Page 31: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Example: Copy on Write - Failure

R

Z

Y Y’

Z’

R’ STORE Y’ STORE Z’ EPOCH_BARRIER STORE R’ WRITEBACK X’ WRITEBACK Y’ WRITEBACK R’

L1/L2

NVM

R

Y

X X’

Y’

31

Page 32: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

PCOMMIT/CLWB VS Epochs Barriers

time

R’

X’

WRITEBACK

WRITEBACK

X’ WRITEBACK

time

Z’ WRITEBACK

ST

ST

ST

ST

Commits happen asynchronously Decouples ordering

from durability

Commits happen synchronously

32

R’ CLWB

Y’ CLWB

PCOMMIT

PCOMMIT

Z’

ST

ST

ST stall

X’

CLWB

CLWB ST

Page 33: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

BPFS Epochs Barriers: Ordering between threads

• Epochs also capture read-write dependencies between threads

STORE … STORE … EPOCH_BARRIER STORE R EPOCH_BARRIER STORE …

Epoch

Epoch

Epoch LOAD R

Thread 0 Thread 1

Memory Consistency makes this dependency

visible to thread 1

STORE V

Recovery Observer

PERSIST V

PERSIST R

Must make dependency visible to NVM to ensure crash consistency

PERSIST … PERSIST … Missing

persists

33

Page 34: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

CPU0

Epoch Hardware Proposal

EpochID

EpochID P State/Tag/Data

Oldest in-flight EpochID

Oldest in-flight EpochID

CPU1 EpochID

CPUn EpochID

Oldest in-flight EpochID

CPU0

CPU1 …

CPUn

NVM EpochID P State/Tag/Data

EpochID P Stage/Tag/Data

EpochID P State/Tag/Data

Co

ntr

olle

r

• Per-processor epoch ID tags writes

• Cache line stores epoch ID when it is modified

• Cache tracks oldest in-flight epoch per CPU

Cac

he

Lin

es

Cache

34

Page 35: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Epoch HW: Ordering Within a Thread Cascading Writebacks

CPU0 EpochID

STORE Y’ STORE Z’ EPOCH_BARRIER STORE R’ EPOCH_BARRIER STORE X’ EVICT R’ WRITEBACK Y’ WRITEBACK Z’ WRITEBACK R’

Epoch 0.0 Epoch 0.1 Epoch 0.2

Epoch 0.1 is not oldest → evict all earlier epochs

NVM

EpochID P State/Tag/Data

Oldest in-flight EpochID

Oldest in-flight EpochID

Oldest in-flight EpochID

CPU0

CPU1 …

CPUn

EpochID P State/Tag/Data

EpochID P Stage/Tag/Data

EpochID P State/Tag/Data Epoch 0.0 1 Y’

Epoch 0.0 1 Z’

Epoch 0.1 1 R’

Epoch 0.2 1 X’

Epoch 0.0

Cache

35

Page 36: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

CPU0 EpochID

STORE Y’ STORE Z’ EPOCH_BARRIER STORE R’ EPOCH_BARRIER STORE X’ STORE R’ WRITEBACK Y’ WRITEBACK Z’

Epoch 0 Epoch 1 Epoch 0.2

Flush epoch 0.1 (containing Y) and older epochs

Epoch HW: Ordering Within a Thread Overwrites

NVM

EpochID P State/Tag/Data

Oldest in-flight EpochID

Oldest in-flight EpochID

Oldest in-flight EpochID

CPU0

CPU1 …

CPUn

EpochID P State/Tag/Data

EpochID P Stage/Tag/Data

EpochID P State/Tag/Data Epoch 0.0 1 Y’

Epoch 0.1 1 R

Epoch 0.2 1 X

Epoch 0.0

Cache

36

Epoch 0.0 1 Z’

Page 37: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Epoch HW: Ordering Between Threads

CPU0 EpochID

STORE Y’ EPOCH_BARRIER STORE R’ LOAD R’ WRITEBACK Y’ WRITEBACK R’

Epoch 0 Epoch 0.1

Read data tagged by CPU0 → flush all old epochs to capture dependency

CPU1 EpochID Epoch 1.0

NVM

EpochID P State/Tag/Data

Oldest in-flight EpochID

Oldest in-flight EpochID

Oldest in-flight EpochID

CPU0

CPU1 …

CPUn

EpochID P State/Tag/Data

EpochID P Stage/Tag/Data

EpochID P State/Tag/Data Epoch 0.0 1 Y

Epoch 0.1 1 R

Epoch 0.0

Epoch 1.0

Cache

37

Page 38: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Summary

Ordering primitive Persists Commits

CLFLUSH Serial N/A

PCOMMIT/CLWB Parallel Synchronous

Epochs Parallel Asynchronous

38

Page 39: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Outline

• Ordering

– Intel x86 ISA extensions

– BPFS epochs barriers [Condit, SOSP09]

– Strand persistency [Pelley, ISCA14]

• Transactions

• Write endurance

39

Page 40: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

seek (fd, 1024, SEEK_SET); write (fd, data, 128); seek (fd, 2048, SEEK_SET); write (fd, data, 128);

… Non conflicting

writes

Limitation of Epochs

40

Page 41: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Limitation of Epochs

X

B

Y

D

seek (fd, 1024, …); write (fd, data, 128); seek (fd, 2048, …); write (fd, data, 128);

41

Page 42: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Limitation of Epochs

STORE B EPOCH_BARRIER STORE X EPOCH_BARRIER STORE D EPOCH_BARRIER STORE Y

X

B

Y

D

42

Page 43: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Can we expose more persist concurrency?

Limitation of Epochs

1

2

3

4

Epoch order implies

unnecessary constraint

1:PERSIST B 2:PERSIST X 3:PERSIST D 4:PERSIST Y

43

Page 44: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Strand Persistency

• Divide execution into strands

• Each strand is an independent set of persists

– All strands initially unordered

– Conflicting accesses establish persist order

• NewStrand instruction begins each strand

• Barriers continue to order persists within each strand as in epoch persistency

44

Page 45: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Strand Persistency: Example

A

C

B A BARRIER B C

A B BARRIER C

or

Epoch

NEWSTRAND A BARRIER C NEWSTRAND B

Strand

Strands remove unnecessary ordering constraints

45

Page 46: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

NEW_STRAND STORE B EPOCH_BARRIER STORE X NEW_STRAND STORE D EPOCH_BARRIER STORE Y

seek (fd, 1024, …); write (fd, data, 128); seek (fd, 2048, …); write (fd, data, 128);

Strands Expose More Persist Concurrency

46

Page 47: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

1 2

3

4 5

6

1:PERSIST B[0] 2:PERSIST B[1] 3:PERSIST X 4:PERSIST D[0] 5:PERSIST D[1] 6:PERSIST Y

Strands Expose More Persist Concurrency

47

Page 48: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Persistency Spectrum

Strict Relaxed

No caching

PCOMMIT/CLWB

Epoch persistency (BPFS like)

Strand persistency

48

Page 49: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Summary

Ordering primitive Persists Commits

CLFLUSH Serial N/A

PCOMMIT/CLWB Parallel Synchronous

Epochs Parallel Asynchronous

Strands Parallel Asynchronous + Parallel

49

Page 50: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Outline

• Ordering

• Transactions

– Restricted transactional memory [Dulloor, EuroSys14]

– Multiversioned memory hierarchy [Zhao, MICRO13]

• Write endurance

50

Page 51: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Software-based Atomicity is Costly

• Atomicity relies on multiple data copies (versions) for recovery

– Write-ahead logging: write intended updates to a log

– Copy on write: write updates to new locations

• Software cost

– Mem-copying for creating multiple data versions

– Bookkeeping information for maintaining versions

51

Page 52: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Restricted Transactional Memory (RTM)

• Intel’s RTM supports failure-atomic 64-byte cache line writes

Existence proof that PM can leverage hardware TM

XBEGIN STORE A STORE B XEND

Cache

NVM

`

B A

RTM prevents A from leaving cache before commit (for isolation)

, B

A, B can be now written back to NVM atomically

52

Page 53: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Multiversioning: Leveraging Caching for In-place Updates

• How does a write-back cache work? – A processor writes a value

– Old values remain in lower levels

– Until the new value gets evicted

Memory

Cache

A

A’ New Ver

Old Ver

53

Page 54: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Multiversioning: Leveraging Caching for In-place Updates

• How does a write-back cache work? – A processor writes a value

– Old values remain in lower levels

– Until the new value gets evicted

• Insight: multiversioned system by nature – Allow in-place updates to

directly overwrite original data

– No need for logging or copy-on-write

NVM

NV-LLC

A B C

A’ B’ Ver N

Ver N-1

C’

A Multiversioned Persistent Memory

Hierarchy

54

Page 55: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Preserving Write Ordering: Out-of-order Writes + In-order Commits • Out-of-order writes to NV-LLC

– NV-LLC remembers the committing state of each cache line

• In-order commits of transactions – Example: TA before TB

– TB will not commit until A2’ arrives in NV-LLC

• Committing a transaction – Flush higher-level caches (very fast)

– Change cache line states in NV-LLC NVM

NV-LLC

Higher-Level Caches

TA = {A1, A2, A3} TB = {B1, B2}

Flush

Out-of-order A’3, B’2, A’1, B’1, A’2

55

Page 56: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

A Hardware Memory Barrier

• Why

– Prevents early eviction of uncommitted transactions

– Avoids violating atomicity

• How

– Extend replacement policy with transaction-commit info to keep uncommitted transactions in NV-LLC

– Handle NV-LLC overflows using OS supported CoW

NVM

NV-LLC

A B C

A’ B’ C’

TA = {A1, A2, A3}

A’1 Crash

A

56

Page 57: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Outline

• Ordering

• Transactions

• Write endurance

– Start-gap wear leveling [Qureshi, MICRO09]

– Dynamically replicated memory [Ipek, ASPLOS10]

Note: Mechanisms target NVM-based main memory

57

Page 58: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Table-based wear leveling is too costly for NVM

– Storage overheads and indirection latency

• Instead, use algebraic mapping between logical and physical addresses

– Periodically remap a line to its neighbor

Start-Gap Wear Leveling

58

Page 59: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

• Table-based wear leveling is too costly for NVM

– Storage overheads and indirection latency

• Instead, use algebraic mapping between logical and physical addresses

– Periodically remap a line to its neighbor

B

Start-Gap Wear Leveling

C

D

START

GAP

A

Memory lines

Gap line

59

Page 60: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

D

• Table-based wear leveling is too costly for NVM

– Storage overheads and indirection latency

• Instead, use algebraic mapping between logical and physical addresses

– Periodically remap a line to its neighbor

A

A B

Start-Gap Wear Leveling

C

D

START

GAP

Wear-leveling: Move gap every 100 memory writes

C

B

A

GAP GAP GAP GAP D

START Move start every one gap rotation

NVMAddr = (Start+Addr); if (PhysAddr >= Gap) NVMAddr++ 60

Page 61: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Dynamically Replicated Memory

• Reuse faulty pages with non-overlapping faults

• Record pairings in a new level of indirection

FAULT

FAULT

FAULT FAULT

FAULT

FAULT

Compatible pages Incompatible pages

Virtual Address Space

PhysicalAddress Space

Real Address Space

Recorded in Real Table

Recorded in Page Tables 61

Page 62: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Summary

• Ordering support

– Reduces unnecessary ordering constraints

– Exposes persist concurrency

• Transaction support

– Removes versioning software overheads

• Endurance support further increases lifetime

Questions?

62

Page 63: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Backup Slides

63

Page 64: Hardware Support for NVM ProgrammingNVM V D D V STORE data[0] = 0xFOOD STORE data[1] = 0xBEEF STORE valid = 1 Crash D D CPU Persistent Memory (PM) Ordering 4 . Persistent Memory (PM)

Randomized Start Gap

• Start gap may move spatially-close hot lines to other hot lines

• Randomize address space to spread hot regions uniformly

Line Addr Static

Randomizer Start-Gap Mapping

Physical Address Randomized Address NVM Address

Hot lines

NVM

X Y

64