/
NVMOVE NVMOVE

NVMOVE - PowerPoint Presentation

lois-ondreau
lois-ondreau . @lois-ondreau
Follow
368 views
Uploaded On 2017-05-28

NVMOVE - PPT Presentation

NVM OVE Helping Programmers Move to Bytebased Persistence Himanshu Chauhan with Irina Calciu Vijay Chidambaram Eric Schkufza Onur Mutlu Pratap Subrahmanyam Fast but volatile ID: 553420

50800 solidfill 400000 12700 solidfill 50800 12700 400000 lim miter typeface lato light val node rpr srgbclr aof write

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "NVMOVE" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

NVMOVE

NVM

OVE: Helping Programmers Move to Byte-based Persistence

Himanshu Chauhan

with

Irina Calciu

,

Vijay Chidambaram

,

Eric

Schkufza, Onur Mutlu, Pratap Subrahmanyam Slide2

Fast, but volatile.

Persistent, but slow.

Cache

DRAM

SSD

Hard Disk

Critical Performance GapSlide3

Fast, but volatile.

Persistent, but slow.

Cache

DRAM

SSD

Hard Disk

Non-Volatile Memory

Fast, and persistent.Slide4

Cache

DRAM

SSD

Hard DiskSlide5

Persistent Programs

1

. allocate from memory

2. data read/write +

program logic

3. save to

storage

typedef

struct {

} nodeSlide6

Persistence TodaySlide7

Persistence with NVMSlide8

Changing

Persisten

ce Code/* allocate from volatile memory*/

n

ode n

* = malloc

(sizeof(…))

node

->value = val

//volatile

update …

/* allocate from non-volatile memory*/

node n* =

pmalloc

(

sizeof

(…))

node

->

value = val

//persistent

update

/* flush cache and commit*/

__cache_flush + __commit

Present

NVM

/* persist to block-storage*/

char

*buf=

malloc(sizeof(

));

int

fd = open("data.db",O_WRITE);

sprintf(buf

,"

",

node->id,

node

->value);

write(fd, buf, sizeof(buf)); Slide9

Porting to NVM: Tedious

Identify

data structures that should be on NVM Update them in a

consistent manner

Redis

: simple key-value store (~50K LOC)

-

Industrial effort to port Redis

is on-going after two years

- Open-source effort to port

Redis has minimum functionalitySlide10

Changing

Persisten

ce Code/* allocate from volatile memory*/

n

ode n

* = malloc

(sizeof(…))

node

->value = val

//volatile

update …

/* allocate from non-volatile memory*/

node n* =

pmalloc

(

sizeof

(…))

node

->

value = val

//persistent

update

/* flush cache and commit*/

__cache_flush + __commit

Present

NVM

/* persist to block-storage*/

char

*buf=

malloc(sizeof(

));

int

fd = open("data.db",O_WRITE);

sprintf(buf

,"

",

node->id,

node

->value);

write(fd, buf, sizeof(buf)); Slide11

Goal

:

Port existing applications to NVM with minimal programmer involvement.Slide12
Slide13

By Kiko Alario Salom [CC BY 2.0 (http://creativecommons.org/licenses/by/2.0)], via Wikimedia CommonsSlide14

First Step:

Identify persistent types inapplication source.Slide15

Persistent Types in Source

User defined source types (

structs in C)that are persisted to block-storage.

Block Storage

Application CodeSlide16

Solution

: Static

AnalysisSlide17

Current Focus: C

types =

structsSlide18

Block Storage

Application Code

write system callSlide19

write system call

/* persist to block-storage*/

char

*buf= malloc(…))

int

fd = open(…)

sprintf(buf

,”…”,

node

->

value)

write(fd, buf, …)

n

ode

*

n

=

malloc

(

sizeof

(

node

))

iter *it = malloc(sizeof(iter))

nodeSlide20

write system call

/* persist to block-storage*/

char

*buf= malloc(…))

int

fd = open(…)

sprintf(buf

,”…”,

node

->

value)

write(fd, buf, …)

n

ode

*

n

=

malloc

(

sizeof

(

node

))

iter *it = malloc(sizeof(iter))

nodeSlide21

iter

write system call

/* persist to block-storage*/

char

*buf= malloc(…))

int

fd = open(…)

sprintf(buf

,”…”,

node

->

value)

write(fd, buf, …)

n

ode

*

n

=

malloc

(

sizeof

(

node

))

iter *it = malloc(sizeof(iter))

nodeSlide22

write system call

/* persist to block-storage*/

write(fd, buf, …)

node

/* write to error stream*/

write(stderr, “All is lost.”, …)

/* write to network socket*/

write(socket, “404”, …)

Storage

Network

PipeSlide23

Block Storage

Save to block-storage

nodeSlide24

Block Storage

Save to block-storage

Load/recover

nodeSlide25

rdbLoad

” is the load/recovery function

. Slide26

Mark every

type

that can be created during the recovery. *if defined in application source.Slide27

rdbLoad

e

xternal

library

Call

Graph from LoadSlide28

rdbLoad

e

xternal

library

BFS on Call Graph from LoadSlide29

e

xternal

library

BFS on Call Graph from Load

Application type created/modifiedSlide30

NVMov

E

ImplementationClang

-

Frontend Parsing

Parse

AST and Generate Call Graph- Find all statements that create/modify types in graph

Currently

supports C applicationsSlide31

EvaluationSlide32

In-memory data structure store

strings, hashes, lists, sets, indexes

Persistence— data-snapshots(RDB),

— command-logging (AOF)

~50K lines-of-codeSlide33

Identification Accuracy

122 types (structs) in Redis Source Slide34

Identification AccuracySlide35

Identification AccuracySlide36

Identification Accuracy

Total types 122

NVM

OVE

identified persistent types 25

True positives (manually identified) 14

False positives 11

False negatives 0

Slide37

Performance ImpactSlide38

Redis Persistence

Snapshot (RDB)

Logging (AOF)

Data snapshot per second

Not fully durable

Append each

update

command

to a fileSlow

Both performed by forked background process.Slide39

NVM Emulation

Emulate allocation of

NVMovE identified types on NVM heap

- Slow and Fast NVM

- Inject delays for load/store of all NVM allocated types. - Worst-case performance estimate.

Compare emulated NVM throughput against logging, and snapshot based persistence.Slide40

YCSB Benchmark Results

Fraction of

in-memory throughput

write-h

eavy

(90% update, 10% read)

in-memory (=1.0)

27K ops/s:

No persistenceSlide41

YCSB Benchmark Results

Fraction of

in-memory throughput

write-h

eavy

(90% update, 10% read)

in-memory (=1.0)

Possible

Data loss

111

MB

27K ops/sSlide42

Performance without False-Positives

Speedup

in throughput

1.04x

1.49x

Slow NVM

Fast NVM

1.0Slide43

First Step:

Identify persistent types inapplication source.Slide44

Next

step

s:

Improve

identification accuracy.

Evaluate on other applications. Slide45

Backup Slide46

Identification Accuracy

Iterators over persistent types.Slide47

Identification Accuracy

Different byte-alignments of the

same type.Slide48

Throughputs (ops/sec)

readheavy

balance

writeheavy

PCM

28399

25,302

9759

STTRam

41213

38,048

12155

AoF (disk)

15634

6,457

2868

AoF (SSD)

27946

17,612

6605

RDB

46355

47,609

26605

Memory

50163

48,360

27156Slide49

NVM Emulation

Slide50

YCSB Benchmark Results

Fraction of

in-memory throughput

in-memory (=1.0)

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

read-heavy

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

NVMSlide51

YCSB Benchmark Results

Fraction of

in-memory throughput

in-memory (=1.0)

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

read-heavy

balanced

NVM

NVMSlide52

YCSB Benchmark Results

Fraction of

in-memory throughput

in-memory (=1.0)

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

PCM

STT

AOF

(disk)

AOF

(ssd)

RDB

read-heavy

balanced

write-heavy

NVM

NVM

NVMSlide53

RDB Data Loss

read-heavy

balanced

write-heavy

26 MB

111 MB

42 MBSlide54

Performance without False-Positives

Speedup

in throughput

PCM

STT

PCM

STT

AOF

(disk)

AOF(ssd)

PCMSTT

AOF

(disk)

AOF(ssd)

read-heavy

balanced

write-heavy

RDB

(disk)

RDB

(disk)

1.0

1.13x

1.04x

1.03x

1.15x

1.49x

1.09x

PCM

PCM

PCM

STT

STT

STT

Related Contents


Next Show more