Professional Documents
Culture Documents
NVMove Byte Based Persistence Tool - Inflow16 Talk
NVMove Byte Based Persistence Tool - Inflow16 Talk
NVMove Byte Based Persistence Tool - Inflow16 Talk
to Byte-based Persistence
NVMOVE
Himanshu Chauhan
with
Irina Calciu, Vijay Chidambaram,
Eric Schkufza, Onur Mutlu, Pratap Subrahmanyam
Fast, but volatile.
Cache
DRAM
Critical Performance Gap
Persistent,
SSD
but slow.
Hard Disk
Fast, but volatile.
Cache
DRAM
Fast, and persistent.
Non-Volatile Memory
Persistent,
SSD
but slow.
Hard Disk
Cache
DRAM
SSD
Hard Disk
Persistent Programs
typedef struct {
} node
3. save to storage
Persistence Today
Persistence with NVM
Changing Persistence Code
Present NVM
/* allocate from volatile memory*/ /* allocate from non-volatile memory*/
node n* = malloc(sizeof(…)) node n* = pmalloc(sizeof(…))
Block Storage
Solution: Static Analysis
Current Focus: C
types = structs
Application
Code
Block Storage
node node *n = malloc(sizeof(node))
/* persist to block-storage*/
char *buf= malloc(…))
int fd = open(…)
sprintf(buf,”…”,node->value)
write system call
write(fd, buf, …)
node node *n = malloc(sizeof(node))
/* persist to block-storage*/
char *buf= malloc(…))
int fd = open(…)
sprintf(buf,”…”,node->value)
write system call
write(fd, buf, …)
node node *n = malloc(sizeof(node))
iter
iter *it = malloc(sizeof(iter))
/* persist to block-storage*/
char *buf= malloc(…))
int fd = open(…)
sprintf(buf,”…”,node->value)
write system call
write(fd, buf, …)
node
/* write to network socket*/
…
write(socket, “404”, …)
/* persist to block-storage*/
write system call …
write(fd, buf, …)
Save to block-storage
Block Storage
node
Block Storage
“rdbLoad” is the
load/recovery function.
Mark every type that can be
created during the recovery.
rdbLoad
external
library
BFS on Call Graph from Load
rdbLoad
external
library
BFS on Call Graph from Load
Application type created/modified
external
library
NVMovE Implementation
• Clang
- Frontend Parsing
Total types
122
NVMOVE identified persistent types 25
True positives (manually identified) 14
False positives
11
False negatives
0
Performance Impact
Redis Persistence
Fraction of
in-memory
throughput
YCSB Benchmark Results
write-heavy (90% update, 10% read)
27K ops/s
in-memory (=1.0)
Fraction of
in-memory Possible Data loss
throughput 111 MB
Performance without False-Positives
Slow
NVM 1.04x
Fast
1.49x
NVM
1.0
Speedup in throughput
First Step:
Identify persistent types in
application source.
Next steps:
*Xu & Swanson, NOVA: A Log-structured File System for Hybrid Volatile/Non-volatile Main
Memories, FAST16.
YCSB Benchmark Results
in-memory (=1.0)
Fraction of
in-memory
throughput
PCM STT AOF AOF RDB PCM STT AOF AOF RDB PCM STT AOF AOF RDB
NVM (disk) (ssd) (disk) (ssd) (disk) (ssd)
read-heavy
YCSB Benchmark Results
in-memory (=1.0)
Fraction of
in-memory
throughput
PCM STT AOF AOF RDB PCM STT AOF AOF RDB PCM STT AOF AOF RDB
NVM (disk) (ssd) NVM (disk) (ssd) (disk) (ssd)
read-heavy balanced
YCSB Benchmark Results
in-memory (=1.0)
Fraction of
in-memory
throughput
PCM STT AOF AOF RDB PCM STT AOF AOF RDB PCM STT AOF AOF RDB
NVM (disk) (ssd) NVM (disk) (ssd) NVM (disk) (ssd)
42 MB 111 MB
26 MB
1.49x
Speedup
in
throughput
1.13x 1.15x 1.09x
1.03x 1.04x
1.0
PCM PCM STT AOF AOF RDB PCM STT AOF AOF RDB
STT
(disk) (ssd) (disk) (disk) (ssd) (disk)
PCM STT PCM STT PCM STT