SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
Andy Rudoff (Intel Data Center Group)
Pawel Skowron (Intel Data Center Group)
April 16th, 2019
SPDK, PMDK & Vtune™ Summit
Agenda(TwoSessions)
 First Half
– Persistent Memory Concepts
– Operating System Essentials
– The PMDK Libraries
 Second Half
– Flushing, Transactions, Allocation
– Language Support
– Comparing High and Low Level Languages
 Q & A (but don’t wait until here to ask!)
2
PersistentMemoryConcepts
3
SPDK, PMDK & Vtune™ Summit 4
TheStorageStack(50,000ftview…)
User
Space
Kernel
Space
Standard
File API
Driver
Application
File System
Application
Standard
Raw Device
Access
Management Library
Management UI
Storage
SPDK, PMDK & Vtune™ Summit 5
A Programmer’s View
(not just C programmers!)
fd = open(“/my/file”, O_RDWR);
…
count = read(fd, buf, bufsize);
…
count = write(fd, buf, bufsize);
…
close(fd);
“Buffer-Based”
SPDK, PMDK & Vtune™ Summit 6
A Programmer’s View (mapped files)
fd = open(“/my/file”, O_RDWR);
…
base = mmap(NULL, filesize, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
close(fd);
…
base[100] = ‘X’;
strcpy(base, “hello there”);
*structp = *base_structp;
…
“Load/Store”
SPDK, PMDK & Vtune™ Summit 7
Memory-MappedFiles
What are memory-mapped files really?
 Direct access to the page cache
 Storage only supports block access (paging)
With load/store access, when does I/O happen?
 Read faults/Write faults
 Flush to persistence
Not that commonly used or understood
 Quite powerful
 Sometimes used without realizing it Good reference: http://nommu.org/memory-
faq.txt
SPDK, PMDK & Vtune™ Summit 8
OSPaging
User
Space
Kernel
Space
Application ApplicationApplication
NVDIMM
NVDIMM
DRAM
… …
load/store
access
page fault
access
SPDK, PMDK & Vtune™ Summit 9
NVDIMM-N
Source: SNIA
SPDK, PMDK & Vtune™ Summit 10
Direct Load/Store Access
128, 256, 512GB
DDR4 Pin Compatible
Native Persistence
CPU
core
L1 Cache
L2 Cache
L3 Cache
Memory
Controller
DRAM
Optane
Controller
…
Firmware
• BIOS
• Operating System
• SNIA NVM programming Model
• Application
SPDK, PMDK & Vtune™ Summit 11
MotivationforthePMProgrammingModel?
0
25
50
75
100
Idle Average Random Read
Latency1
Storage
With
NAND
SSD
Storage with
Intel® Optane™
SSD
Hardware Latency
Software Latency
Idle Avg. is About
10µs
for 4kB
storage
Idle Avg. is About
80µs
for 4kB
NAND SSD latency
dominated by media
latency
Optane SSD latency
balanced between
SSD and System
1 Source–Intel-tested:Averagereadlatencymeasuredatqueuedepth1during4krandomwriteworkload.MeasuredusingFIO3.1.CommonConfiguration-Intel2UServerSystem,OSCentOS7.5,kernel4.17.6-1.el7.x86_64,CPU2xIntel®Xeon®6154Gold@3.0GHz(18cores),RAM256GB
DDR4@2666MHz.Configuration–Intel®Optane™SSDDCP4800X375GBandIntel®SSDDCP46001.6TB. Latency– AveragereadlatencymeasuredatQD1during4KRandomWriteoperationsusingFIO3.1.IntelMicrocode:0x2000043;SystemBIOS:00.01.0013;MEFirmware:
04.00.04.294;BMCFirmware:1.43.91f76955;FRUSDR:1.43.SSDstestedwerecommerciallyavailableattimeoftest.Thebenchmarkresultsmayneedtoberevisedasadditionaltestingis conducted.PerformanceresultsarebasedontestingasofJuly24,2018andmaynotreflectallpublicly
availablesecurityupdates.Seeconfigurationdisclosurefordetails.No productcanbeabsolutelysecure.SoftwareandworkloadsusedinperformancetestsmayhavebeenoptimizedforperformanceonlyonIntelmicroprocessors.Performancetests,suchasSYSmarkandMobileMark,are
measuredusingspecificcomputersystems,components,software,operationsandfunctions.Any changetoanyofthosefactorsmaycausetheresultstovary.Youshouldconsultotherinformationandperformanceteststoassistyouin fullyevaluatingyourcontemplatedpurchases,including
theperformanceofthatproductwhencombinedwithotherproducts.For morecompleteinformationvisitwww.intel.com/benchmarks.
SPDK, PMDK & Vtune™ Summit 12
MotivationforthePMProgrammingModel?
0
25
50
75
100
Idle Average Random Read
Latency1
Storage
With
NAND
SSD
Storage with
Intel® Optane™
SSD
Hardware Latency
Software Latency
Idle Avg. is About
10µs
for 4kB
storage
Idle Avg. is About
80µs
for 4kB
1 Source–Intel-tested:Averagereadlatencymeasuredatqueuedepth1during4krandomwriteworkload.MeasuredusingFIO3.1.CommonConfiguration-Intel2UServerSystem,OSCentOS7.5,kernel4.17.6-1.el7.x86_64,CPU2xIntel®Xeon®6154Gold@3.0GHz(18cores),RAM256GB
DDR4@2666MHz.Configuration–Intel®Optane™SSDDCP4800X375GBandIntel®SSDDCP46001.6TB. Latency– AveragereadlatencymeasuredatQD1during4KRandomWriteoperationsusingFIO3.1.IntelMicrocode:0x2000043;SystemBIOS:00.01.0013;MEFirmware:
04.00.04.294;BMCFirmware:1.43.91f76955;FRUSDR:1.43.SSDstestedwerecommerciallyavailableattimeoftest.Thebenchmarkresultsmayneedtoberevisedasadditionaltestingis conducted.PerformanceresultsarebasedontestingasofJuly24,2018andmaynotreflectallpublicly
availablesecurityupdates.Seeconfigurationdisclosurefordetails.No productcanbeabsolutelysecure.SoftwareandworkloadsusedinperformancetestsmayhavebeenoptimizedforperformanceonlyonIntelmicroprocessors.Performancetests,suchasSYSmarkandMobileMark,are
measuredusingspecificcomputersystems,components,software,operationsandfunctions.Any changetoanyofthosefactorsmaycausetheresultstovary.Youshouldconsultotherinformationandperformanceteststoassistyouin fullyevaluatingyourcontemplatedpurchases,including
theperformanceofthatproductwhencombinedwithotherproducts.For morecompleteinformationvisitwww.intel.com/benchmarks.
Next logical
improvement:
remove the SW stack.
SPDK, PMDK & Vtune™ Summit 13
0
25
50
75
100
Idle Average Random Read
Latency1
Storage With
NAND SSD
Storage with
Intel® Optane™ SSD
Hardware Latency
Software Latency
Memory
Subsystem with
Intel® Optane™
DC Persistent
memory
Storage
Idle Avg. is About
10µs
for 4kB
Memory Subsystem
Idle Avg. is About
~100ns to ~350ns
for 64B2
1 Source: Intel-tested: Average read latency measured at queue depth 1 during 4k random write workload. Measured using FIO 3.1. comparing Intel Reference platform with Optane™ SSD DC P4800X 375GB and Intel® SSD DC P4600 1.6TB compared to
SSDs commercially available as of July 1, 2018. Performance results are based on testing as of July 24, 2018 and may not reflect all publicly available security updates. See configuration disclosure for details. No product can be absolutely secure. For
more complete information about performance and benchmark results, visit www.intel.com/benchmarks.
2 App Direct Mode , NeonCity, LBG B1 chipset , CLX B0 28 Core (QDF QQYZ), Memory Conf 192GB DDR4 (per socket) DDR 2666 MT/s, Optane DCPMM 128GB, BIOS 561.D09, BKC version WW48.5 BKC, Linux OS 4.18.8-100.fc27, Spectre/Meltdown
Patched (1,2,3, 3a)
SPDK, PMDK & Vtune™ Summit
TheValueofPersistentMemory
Data sets addressable with no DRAM footprint
 At least, up to application if data copied to DRAM
Typically DMA (and RDMA) to PM works as expected
 RDMA directly to persistence – no buffer copy required!
The “Warm Cache” effect
 No time spend loading up memory
Byte addressable
Direct user-mode access
 No kernel code in data path
14
SPDK, PMDK & Vtune™ Summit 15
TheSNIANVMProgrammingModel
Persistent Memory
User
Space
Kernel
Space
Standard
File API
NVDIMM Driver
Application
File System
ApplicationApplication
Standard
Raw Device
Access
Storage File Memory
Load/Store
Management Library
Management UI
Standard
File API
Mgmt.
PM-Aware
File System
MMU
Mappings
SPDK, PMDK & Vtune™ Summit 16
TheProgrammingModelBuildsontheStorageAPIs
Persistent Memory
User
Space
Kernel
Space
Standard
File API
NVDIMM Driver
Application
File System
ApplicationApplication
Standard
Raw Device
Access
Storage File Memory
Load/Store
Management Library
Management UI
Standard
File API
Mgmt.
PM-Aware
File System
MMU
Mappings
Use PM
Like an SSD
SPDK, PMDK & Vtune™ Summit 17
TheProgrammingModelBuildsontheStorageAPIs
Persistent Memory
User
Space
Kernel
Space
Standard
File API
NVDIMM Driver
Application
File System
ApplicationApplication
Standard
Raw Device
Access
Storage File Memory
Load/Store
Management Library
Management UI
Standard
File API
Mgmt.
PM-Aware
File System
MMU
Mappings
Use PM
Like an SSD
Use PM
Like an SSD
(no page cache)
“DAX”
SPDK, PMDK & Vtune™ Summit 18
OptimizedFlushisthePrimaryNewAPI
Persistent Memory
User
Space
Kernel
Space
Standard
File API
NVDIMM Driver
Application
File System
ApplicationApplication
Standard
Raw Device
Access
Storage File Memory
Load/Store
Management Library
Management UI
Standard
File API
Mgmt.
PM-Aware
File System
MMU
Mappings
Use PM
Like an SSD
Use PM
Like an SSD
(no page cache)
“DAX”
Optimized flush
SPDK, PMDK & Vtune™ Summit 19
User
Space
Kernel
Space
Application
RAM
• Well-worn interface, around for decades
• Memory is gone when application exits
– Or machine goes down
RAM
RAM RAM
Memory
Management
ptr = malloc(len)
ApplicationMemoryAllocation
SPDK, PMDK & Vtune™ Summit 20
User
Space
Kernel
Space
Application
NVM
• Simple, familiar interface, but then what?
– Persistent, so apps want to “attach” to regions
– Need to manage permissions for regions
– Need to resize, remove, …, backup the data
NVM
NVM NVM
Memory
Management
ptr = pm_malloc(len)
ApplicationNVMAllocation
SPDK, PMDK & Vtune™ Summit 21
It has always been thus:
 open()
 mmap()
 store...
 msync()
pmem just follows this decades-old model
 But the stores are cached in a different spot
visible
persistent
Visibilityversuspersistence
SPDK, PMDK & Vtune™ Summit 22
HowtheHWworks
WPQ
ADR
-or-
WPQ Flush (kernel only)
Core
L1 L1
L2
L3
WPQ
MOV
DIMM
CPUCACHES
CLWB + fence
-or-
CLFLUSHOPT + fence
-or-
CLFLUSH
-or-
NT stores + fence
-or-
WBINVD (kernel only)
Minimum Required
Power fail protected domain:
Memory subsystem
Custom
Power fail protected domain
indicated by ACPI property:
CPU Cache Hierarchy
SPDK, PMDK & Vtune™ Summit 23
AppResponsibilities
DAX mapped file?
(OS provides info)
CPU caches
considered
persistent?
(ACPI provides info)
CLWB?
(CPU_ID provides info)
CLFLUSHOPT?
(CPU_ID provides info)
Program Initialization
Use standard API for flushing
(msync/fsync or FlushFileBuffers)
Use CLFLUSH for flushing
Use CLFLUSHOPT+SFENCE
for flushing
Use CLWB+SFENCE
for flushing
Stores considered persistent
when globally-visible
no yes
yes
yes
yes
no
no
no
SPDK, PMDK & Vtune™ Summit 24
AppResponsibilities
(Recovery)
Dirty Shutdown?
Known Poison Blocks
Program Initialization
Data set is potentially inconsistent.
Recover.
Repair data set Normal Operation
yes no
nono
SPDK, PMDK & Vtune™ Summit 25
Creatingaprogrammingenvironment
NVDIMM
Kernel
Space
Application
Load/Store
Standard
File API
PM-Aware
File System
MMU
Mappings
Language Runtime
Libraries
Tools
Tools for correctness
and performance
Language support
Optimized allocators,
transactions
Result:
Safer, less error-prone
OperatingSystemEssentials
26
SPDK, PMDK & Vtune™ Summit 27
EnablingintheEcosystem
● Linux kernel version 4.19 (ext4, xfs)
● Windows Server 2019 (NTFS)
● VMware vSphere 6.7
● RHEL 7.5
● SLES 15 and SLES 12 SP4
● Ubuntu 18.*
● Java JDK 12
● Kubernetes 1.13
● OpenStack ‘Stein’
Be sure to see Steve Scargall’s talk: Persistent Memory Provisioning/Configuration tools
SPDK, PMDK & Vtune™ Summit 28
ProgrammingwithOptimizedFlush
• Use Standard unless OS says it is safe to use Optimized Flush
• On Windows
• When you successfully memory map a DAX file:
• Optimized Flush is safe
• On Linux
• When you successfully memory map a DAX file with MAP_SYNC:
• Optimized Flush is safe
• MAP_SYNC flag to mmap() is new
ThePMDKLibraries
29
SPDK, PMDK & Vtune™ Summit 30
PMDKLibraries
Support for
volatile
memory usage
Low level support for
local persistent
memory
libpmem
Low level support for
remote access to
persistent memory
librpmem
NVDIMM
User
Space
Kernel
Space
Application
Load/Store
Standard
File API
pmem-Aware
File System
MMU
Mappings
PMDK
Interface to create arrays of
pmem-resident blocks, of
same size, atomically
updated
Interface for persistent memory
allocation, transactions and
general facilities
Interface to create a
persistent memory
resident log file
libpmemblklibpmemlog libpmemobj
Transaction
Support
C++ C
PCJ /
LLPL
Python
Low-level support
PCJ – Persistent
Collection for
Java
memkind
pmemkv
vmemcache
http://pmem.io
https://github.com/pmem/pmdk
Experimental
C++
Persistent
Containers
Language bindings
High Level Interfaces
( in development)
SPDK, PMDK & Vtune™ Summit 31
PMDKLibraries
Support for
volatile
memory usage
Low level support for
local persistent
memory
libpmem
Low level support for
remote access to
persistent memory
librpmem
NVDIMM
User
Space
Kernel
Space
Application
Load/Store
Standard
File API
pmem-Aware
File System
MMU
Mappings
PMDK
Interface to create arrays of
pmem-resident blocks, of
same size, atomically
updated
Interface for persistent memory
allocation, transactions and
general facilities
Interface to create a
persistent memory
resident log file
libpmemblklibpmemlog libpmemobj
Transaction
Support
C++ C
PCJ /
LLPL
Python
Low-level support
PCJ – Persistent
Collection for
Java
memkind
pmemkv
vmemcache
http://pmem.io
Experiment
al C++
Persistent
Containers
Language bindings
See Rob Dickinson’s talk on pmemkv
High Level Interfaces
( in development)
SPDK, PMDK & Vtune™ Summit 32
PMDKLibraries
Support for
volatile
memory usage
Low level support for
local persistent
memory
libpmem
Low level support for
remote access to
persistent memory
librpmem
NVDIMM
User
Space
Kernel
Space
Application
Load/Store
Standard
File API
pmem-Aware
File System
MMU
Mappings
PMDK
Interface to create arrays of
pmem-resident blocks, of
same size, atomically
updated
Interface for persistent memory
allocation, transactions and
general facilities
Interface to create a
persistent memory
resident log file
libpmemblklibpmemlog libpmemobj
Transaction
Support
C++ C
PCJ /
LLPL
Python
Low-level support
PCJ – Persistent
Collection for
Java
memkind
pmemkv
vmemcache
http://pmem.io
Experiment
al C++
Persistent
Containers
Language bindings
See Usha and Piotr’s talk on vmemcache
High Level Interfaces
( in development)
SPDK, PMDK & Vtune™ Summit
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
Differentwaystousepersistentmemory
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
Memory Mode
SPDK, PMDK & Vtune™ Summit 35
MemoryMode
 Not really a part of PMDK…
 … but it’s the easiest way to take advantage of Persistent Memory
 Memory is automatically placed in PMEM, with caching in DRAM
char *memory = malloc(sizeof(struct my_object));
strcpy(memory, “Hello World”);
When To Use
 modifying applications is not feasible
 massive amounts of memory is required (more TB)
 CPU utilization is low in shared environment (more VMs)
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libmemkind
SPDK, PMDK & Vtune™ Summit 37
libmemkind
 Explicitly manage allocations from App Direct, allowing for fine-grained
control of DRAM/PMEM
 The application can decide what type of memory to use for objects
struct memkind *pmem_kind = NULL;
size_t max_size = 1 << 30; /* gigabyte */
/* Create PMEM partition with specific size */
memkind_create_pmem(PMEM_DIR, max_size, &pmem_kind);
/* allocate 512 bytes from 1 GB available */
char *pmem_string = (char *)memkind_malloc(pmem_kind, 512);
/* deallocate the pmem object */
memkind_free(pmem_kind, pmem_string);
When To Use
 application can be modified
 different tiers of objects (hot, warm) can be identified
 persistence is not required
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libvmemcache
SPDK, PMDK & Vtune™ Summit 39
libvmemcache
 Seamless and easy-to-use LRU caching solution for persistent memory
Keys reside in DRAM, values reside in PMEM
 Designed for easy integration with existing systems
VMEMcache *cache = vmemcache_new();
vmemcache_add(cache, "/tmp");
const char *key = "foo";
vmemcache_put(cache, key, strlen(key), "bar", sizeof("bar"));
char buf[128];
ssize_t len = vmemcache_get(cache, key, strlen(key),
buf, sizeof(buf), 0, NULL);
vmemcache_delete(cache);
When To Use
 caching large quantities of data
 low latency of operations is needed
 persistence is not required
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libpmemkv
SPDK, PMDK & Vtune™ Summit 41
libpmemkv
 Local/embedded key-value datastore optimized for persistent memory.
Provides different language bindings and storage engines.
 High-level storage layer optimized for PMEM
const pmemkv = require('pmemkv');
const kv = new KVEngine('vsmap', '{"path":"/dev/shm/"}');
kv.put('key1', 'value1');
assert(kv.count === 1);
assert(kv.get('key1') === 'value1');
kv.all((k) => console.log(` visited: ${k}`));
kv.remove('key1');
kv.stop();
When To Use
 storing large quantities of data
 low latency of operations is needed
 persistence is required
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libpmemobj
SPDK, PMDK & Vtune™ Summit 43
libpmemobj
 Transactional object store, providing memory allocation, transactions, and
general facilities for persistent memory programming.
 Flexible and relatively easy way to leverage PMEM
When To Use
 direct byte-level access to objects is needed
 using custom storage-layer algorithms
 persistence is required
typedef struct foo {
PMEMoid bar; // persistent pointer
int value;
} foo;
int main() {
PMEMobjpool *pop = pmemobj_open (...);
TX_BEGIN(pop) {
TOID(foo) root = POBJ_ROOT(foo);
D_RW(root)->value = 5;
} TX_END;
}
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libpmem
SPDK, PMDK & Vtune™ Summit 45
libpmem
 Low-level library that provides basic primitives needed for persistent
memory programming and optimized memcpy/memmove/memset
 The very basics needed for PMEM programming
When To Use
 modifying application that already uses memory mapped I/O
 other libraries are too high-level
 only need low-level PMEM-optimized primitives (memcpy etc)
void *pmemaddr = pmem_map_file("/mnt/pmem/data", BUF_LEN,
PMEM_FILE_CREATE|PMEM_FILE_EXCL,
0666, &mapped_len, &is_pmem));
const char *data = "foo";
if (is_pmem) {
pmem_memcpy_persist(pmemaddr, data, strlen(data));
} else {
memcpy(pmemaddr, data, strlen(data));
pmem_msync(pmemaddr, strlen(data));
}
close(srcfd);
pmem_unmap(pmemaddr, mapped_len);
SPDK, PMDK & Vtune™ Summit
Differentwaystousepersistentmemory
BARRIER TO ADOPTION
GAIN
PMEM as less
expensive DRAM
Volatile tiered
memory
Volatile object
cache
Persistent
key-value store
High-level
persistent
application
Low-level
persistent
application
libpmem
libpmemobj
libpmemkvlibvmemcache
libmemkind
Memory Mode
SPDK, PMDK & Vtune™ Summit
Persistent Memory
NVDIMMs
User
Space
Kernel
Space
Standard
File API
NVDIMM Driver
Application
File System
ApplicationApplication
Standard
Raw Device
Access
mmap
Load/Store
Management Library
Management UI
Standard
File API
pmem-Aware
File System
MMU
Mappings
Hardware
CPU DDR
Block
PMDK
47
ProgrammingModelTools
pmempool
pmemcheck
daxio
daxctl
Persistence Inspector
VTune Amplifier
Valgrind
VTune Platform Profiler
FIO
MLC
pmembench
PMEMOBJ_LOG_LEVEL
Administration, Benchmark, Debug, Performance
ixpdimm-cli
ndctl
Flushing,Transactions,Allocation
48
SPDK, PMDK & Vtune™ Summit 49
Libpmemexamples
Source: https://github.com/pmem/pmdk/tree/master/src/examples/libpmem
/*
* simple_copy.c -- show how to use pmem_memcpy_persist()
*
* usage: simple_copy src-file dst-file
*
* Reads 4k from src-file and writes it to dst-file.
*/
…
/* create a pmem file and memory map it */
if ((pmemaddr = pmem_map_file(argv[2], BUF_LEN, PMEM_FILE_CREATE|PMEM_FILE_EXCL,
0666, &mapped_len, &is_pmem)) == NULL) {
perror("pmem_map_file");
exit(1);
}
SPDK, PMDK & Vtune™ Summit 50
Usingis_pmem
if (is_pmem) {
pmem_memcpy_persist(pmemaddr, buf, cc);
} else {
memcpy(pmemaddr, buf, cc);
pmem_msync(pmemaddr, cc);
}
SPDK, PMDK & Vtune™ Summit
POSIXLoad/StorePersistence
51
open(…);
mmap(…);
strcpy(pmem, "moose");
msync(pmem, 6, MS_SYNC);
SPDK, PMDK & Vtune™ Summit
Optimizedflush(useonlywhensafe!)
52
open(…);
mmap(…);
strcpy(pmem, "moose");
pmem_persist(pmem, 6);
Application
libpmem
memory-mapped pmem
SPDK, PMDK & Vtune™ Summit 53
Flushesarenotatomicoperations
open(…);
mmap(…);
strcpy(pmem, "Hello, World!");
pmem_persist(pmem, 14); Crash
1. "0000000000..."
2. "Hello, W000000..."
3. "00000000orld!0"
4. "Hello, 00000000"
5. "Hello, World!0"
Result
SPDK, PMDK & Vtune™ Summit 54
libpmemobj
“transactionalobjectstore”
Application
libpmem
Load/Store
memory-mapped pmem
libpmemobj
transactionsatomic
operations
allocatorlists
locks
API API API
SPDK, PMDK & Vtune™ Summit 55
TransactionalAPI
 Need for Transactions
• To enable updates and persist larger & non-contiguous portions of data atomically x86
CPUs guarantee atomicity only for 8 byte stores
 libpmemobj provides ACID transactions for persistent memory
• Atomicity means that a transaction either succeeds or fails completely
• Consistency means that the transaction transforms PMEMobjpool from one consistent state
to another. This means that a pool won’t get corrupted by a transaction.
• Isolation means that transactions can be executed as if the operations were executed
serially on the pool. This is optional, and requires user-provided locks.
• Durability means that once a transaction is committed, it remains committed even in the
case of system failures
SPDK, PMDK & Vtune™ Summit 56
TransactionalAPI
 Inside of a transaction the application can:
• Allocate new objects
• Free existing objects
• Modify existing objects
• Isolate objects
TX_BEGIN_PARAM(pool, TX_PARAM_MUTEX, &root->lock, TX_PARAM_NONE) {
pmemobj_tx_add_range_direct(root, sizeof(*root));
root->objA = pmemobj_tx_alloc(sizeof(struct objectA), type_num);
pmemobj_tx_free(root->objB):
root->objB = OID_NULL;
} TX_END http://pmem.io/pmdk/manpages/linux/master/libpmemobj/pmemobj_tx_begin.3
SPDK, PMDK & Vtune™ Summit
AllocatorDesignDecisions
 Inspired by Hoard allocator
 For faster access, allocator run-time metadata is stored in DRAM
 Operates on Persistent Heap
• Persistent Memory Pools
 Dynamic growing of the heap at runtime not supported
 Redo log and Undo log for Recovery
57
SPDK, PMDK & Vtune™ Summit 58
AtomicAPIs
 Memory allocation has at least two steps:
1. Selection of the memory block to allocate
2. Assignment of the resulting pointer to some destination pointer
 If the application is interrupted in between these steps
• On DRAM, nothing happens, because all memory allocations vanish
• On PMEM, memory is leaked, because the allocated object is unreachable
root->objA = pmalloc(pool, sizeof(struct objectA));
Step 2
Step 1
SPDK, PMDK & Vtune™ Summit 59
AtomicAPIs
• In libpmemobj atomic API these two steps are merged into one. The object is fail-safe
atomically allocated and assigned to the destination pointer.
• This API also introduces a type numbers and cunstructors
• Type number is an 8 byte embedded metadata field which identifies the object in
the pool. Can be used to recover data if objects become unreachable.
• Constructors are used to initialize objects with data. Once an object is allocated, the
constructor was ran successfully.
pmemobj_alloc(pool, &root->objA, sizeof(struct objectA),
type_num, constr, constr_arg);
http://pmem.io/pmdk/manpages/linux/master/libpmemobj/pmemobj_alloc.3
LanguageSupport
60
SPDK, PMDK & Vtune™ Summit 61
HowtoChooseyourAPI/Language
Start from the highest-level interface that works for you
 Example: libpmemkv
 If that doesn’t meet your needs, try a Java or C++ container
 Only if that doesn’t meet your needs, build your own data structures
– In Java, C++, C (more later)
SPDK, PMDK & Vtune™ Summit 62
From C
 Fully validated, delivered on Linux, early
access on Windows
 Can stick to pure API calls, but macros
add:
– Compile-time type safety
– Transaction syntax, similar to try/catch
From Java
 Persistent Containers for Java
(Experimental)
From C++
 Fully validated, delivered on Linux, early
access on Windows
 Use C++ type system & syntax: much
cleaner, less error-prone
 Experimental persistent STL like
containers ( work in progress )
From Python
 PyNVM (Experimental)
Other work
 pmemcheck, pmreorder, Persistence
Inspector
Builtonlibpmemobj…
SPDK, PMDK & Vtune™ Summit 63
Otherlanguagesupport
libpmemkv (see Rob Dickinson’s talk later today)
 Building up quite a long list of supported languages
 Not just ”call C from language X” – idiomatic support
Research underway for pmem support in other languages
 Don’t be shy about letting us know your needs
– Example: (FORTRAN support for memkind)
ComparingHighandLowLevelLanguages
64
SPDK, PMDK & Vtune™ Summit
CProgrammingwithlibpmemobj
65
SPDK, PMDK & Vtune™ Summit 66
TransactionSyntax
TX_BEGIN(Pop) {
/* the actual transaction code goes here... */
} TX_ONCOMMIT {
/*
* optional − executed only if the above block
* successfully completes
*/
} TX_ONABORT {
/*
* optional − executed if starting the transaction fails
* or if transaction is aborted by an error or a call to
* pmemobj_tx_abort()
*/
} TX_FINALLY {
/*
* optional − if exists, it is executed after
* TX_ONCOMMIT or TX_ONABORT block
*/
} TX_END /* mandatory */
SPDK, PMDK & Vtune™ Summit 67
PropertiesofTransactions
TX_BEGIN_PARAM(Pop, TX_PARAM_MUTEX, &D_RW(ep)->mtx, TX_PARAM_NONE) {
TX_ADD(ep);
D_RW(ep)->count++;
} TX_END
Powerfail
Atomicity
Multi-Thread
Atomicity
Caller must
instrument code
for undo logging
SPDK, PMDK & Vtune™ Summit 68
PersistentMemoryLocks
 Want locks to live near the data they protect (i.e. inside structs)
 Does the state of locks get stored persistently?
– Would have to flush to persistence when used
– Would have to recover locked locks on start-up
– Might be a different program accessing the file
– Would run at pmem speeds
 PMEMmutex
– Runs at DRAM speeds
– Automatically initialized on pool open
SPDK, PMDK & Vtune™ Summit
C++Programmingwithlibpmemobj
69
SPDK, PMDK & Vtune™ Summit 70
C++QueueExample:Declarations
/* entry in the queue */
struct pmem_entry {
persistent_ptr<pmem_entry> next;
p<uint64_t> value;
};
persistent_ptr<T>
Pointer is really a position-independent
Object ID in pmem.
Gets rid of need to use C macros like
D_RW()
p<T>
Field is pmem-resident and needs to be
maintained persistently.
Gets rid of need to use C macros like
TX_ADD()
SPDK, PMDK & Vtune™ Summit 71
C++QueueExample:Transaction
void push(pool_base &pop, uint64_t value) {
transaction::exec_tx(pop, [&] {
auto n = make_persistent<pmem_entry>();
n->value = value;
n->next = nullptr;
if (head == nullptr) {
head = tail = n;
} else {
tail->next = n;
tail = n;
}
});
}
Transactional
(including allocations &
frees)
Q&A
72
SPDK, PMDK & Vtune™ Summit 73
LinkstoMoreinformation
Find the PMDK (Persistent Memory Development Kit) at http://pmem.io/pmdk/
Getting Started
 Intel IDZ persistent memory- https://software.intel.com/en-us/persistent-memory
 Entry into overall architecture - http://pmem.io/2014/08/27/crawl-walk-run.html
 Emulate persistent memory - http://pmem.io/2016/02/22/pm-emulation.html
Linux Resources
 Linux Community Pmem Wiki - https://nvdimm.wiki.kernel.org/
 Pmem enabling in SUSE Linux Enterprise 12 SP2 - https://www.suse.com/communities/blog/nvdimm-enabling-
suse-linux-enterprise-12-service-pack-2/
Windows Resources
 Using Byte-Addressable Storage in Windows Server 2016 -https://channel9.msdn.com/Events/Build/2016/P470
 Accelerating SQL Server 2016 using Pmem - https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016-
and-Windows-Server-2016-SCM--FAST
Other Resources
 SNIA Persistent Memory Summit 2018 - https://www.snia.org/pm-summit
 Intel manageability tools for Pmem - https://01.org/ixpdimm-sw/
SPDK, PMDK & VtuneTM Summit Agenda

Mais conteúdo relacionado

Mais procurados

Persistent Memory Programming with Java*
Persistent Memory Programming with Java*Persistent Memory Programming with Java*
Persistent Memory Programming with Java*Intel® Software
 
Ceph - High Performance Without High Costs
Ceph - High Performance Without High CostsCeph - High Performance Without High Costs
Ceph - High Performance Without High CostsJonathan Long
 
Unit 3 file management
Unit 3 file managementUnit 3 file management
Unit 3 file managementKalai Selvi
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerYongseok Oh
 
Impact of Intel Optane Technology on HPC
Impact of Intel Optane Technology on HPCImpact of Intel Optane Technology on HPC
Impact of Intel Optane Technology on HPCMemVerge
 
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13Gosuke Miyashita
 
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...Patrick McGarry
 
[若渴計畫] Challenges and Solutions of Window Remote Shellcode
[若渴計畫] Challenges and Solutions of Window Remote Shellcode[若渴計畫] Challenges and Solutions of Window Remote Shellcode
[若渴計畫] Challenges and Solutions of Window Remote ShellcodeAj MaChInE
 
Cephfs jewel mds performance benchmark
Cephfs jewel mds performance benchmarkCephfs jewel mds performance benchmark
Cephfs jewel mds performance benchmarkXiaoxi Chen
 
Build an High-Performance and High-Durable Block Storage Service Based on Ceph
Build an High-Performance and High-Durable Block Storage Service Based on CephBuild an High-Performance and High-Durable Block Storage Service Based on Ceph
Build an High-Performance and High-Durable Block Storage Service Based on CephRongze Zhu
 
[若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures [若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures Aj MaChInE
 
Red Hat Storage 2014 - Product(s) Overview
Red Hat Storage 2014 - Product(s) OverviewRed Hat Storage 2014 - Product(s) Overview
Red Hat Storage 2014 - Product(s) OverviewMarcel Hergaarden
 
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLESQuick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLESJan Kalcic
 
Linux Stammtisch Munich: Ceph - Overview, Experiences and Outlook
Linux Stammtisch Munich: Ceph - Overview, Experiences and OutlookLinux Stammtisch Munich: Ceph - Overview, Experiences and Outlook
Linux Stammtisch Munich: Ceph - Overview, Experiences and OutlookDanny Al-Gaaf
 
JetStor portfolio update final_2020-2021
JetStor portfolio update final_2020-2021JetStor portfolio update final_2020-2021
JetStor portfolio update final_2020-2021Gene Leyzarovich
 

Mais procurados (17)

Persistent Memory Programming with Java*
Persistent Memory Programming with Java*Persistent Memory Programming with Java*
Persistent Memory Programming with Java*
 
Ceph - High Performance Without High Costs
Ceph - High Performance Without High CostsCeph - High Performance Without High Costs
Ceph - High Performance Without High Costs
 
Unit 3 file management
Unit 3 file managementUnit 3 file management
Unit 3 file management
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS Scheduler
 
Impact of Intel Optane Technology on HPC
Impact of Intel Optane Technology on HPCImpact of Intel Optane Technology on HPC
Impact of Intel Optane Technology on HPC
 
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
 
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...
Using Recently Published Ceph Reference Architectures to Select Your Ceph Con...
 
[若渴計畫] Challenges and Solutions of Window Remote Shellcode
[若渴計畫] Challenges and Solutions of Window Remote Shellcode[若渴計畫] Challenges and Solutions of Window Remote Shellcode
[若渴計畫] Challenges and Solutions of Window Remote Shellcode
 
Cephfs jewel mds performance benchmark
Cephfs jewel mds performance benchmarkCephfs jewel mds performance benchmark
Cephfs jewel mds performance benchmark
 
Build an High-Performance and High-Durable Block Storage Service Based on Ceph
Build an High-Performance and High-Durable Block Storage Service Based on CephBuild an High-Performance and High-Durable Block Storage Service Based on Ceph
Build an High-Performance and High-Durable Block Storage Service Based on Ceph
 
optimizing_ceph_flash
optimizing_ceph_flashoptimizing_ceph_flash
optimizing_ceph_flash
 
[若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures [若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures
 
Bluestore
BluestoreBluestore
Bluestore
 
Red Hat Storage 2014 - Product(s) Overview
Red Hat Storage 2014 - Product(s) OverviewRed Hat Storage 2014 - Product(s) Overview
Red Hat Storage 2014 - Product(s) Overview
 
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLESQuick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLES
 
Linux Stammtisch Munich: Ceph - Overview, Experiences and Outlook
Linux Stammtisch Munich: Ceph - Overview, Experiences and OutlookLinux Stammtisch Munich: Ceph - Overview, Experiences and Outlook
Linux Stammtisch Munich: Ceph - Overview, Experiences and Outlook
 
JetStor portfolio update final_2020-2021
JetStor portfolio update final_2020-2021JetStor portfolio update final_2020-2021
JetStor portfolio update final_2020-2021
 

Semelhante a SPDK, PMDK & VtuneTM Summit Agenda

Ceph Day Beijing - SPDK in Ceph
Ceph Day Beijing - SPDK in CephCeph Day Beijing - SPDK in Ceph
Ceph Day Beijing - SPDK in CephCeph Community
 
Ceph Day Beijing - SPDK for Ceph
Ceph Day Beijing - SPDK for CephCeph Day Beijing - SPDK for Ceph
Ceph Day Beijing - SPDK for CephDanielle Womboldt
 
Persistent Memory Programming: The Current State of the Ecosystem
Persistent Memory Programming: The Current State of the EcosystemPersistent Memory Programming: The Current State of the Ecosystem
Persistent Memory Programming: The Current State of the Ecosysteminside-BigData.com
 
Ceph Day Taipei - Accelerate Ceph via SPDK
Ceph Day Taipei - Accelerate Ceph via SPDK Ceph Day Taipei - Accelerate Ceph via SPDK
Ceph Day Taipei - Accelerate Ceph via SPDK Ceph Community
 
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...Odinot Stanislas
 
Experience In Building Scalable Web Sites Through Infrastructure's View
Experience In Building Scalable Web Sites Through Infrastructure's ViewExperience In Building Scalable Web Sites Through Infrastructure's View
Experience In Building Scalable Web Sites Through Infrastructure's ViewPhuwadon D
 
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage TierIMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage TierIn-Memory Computing Summit
 
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...Odinot Stanislas
 
Java File I/O Performance Analysis - Part I - JCConf 2018
Java File I/O Performance Analysis - Part I - JCConf 2018Java File I/O Performance Analysis - Part I - JCConf 2018
Java File I/O Performance Analysis - Part I - JCConf 2018Michael Fong
 
The Forefront of the Development for NVDIMM on Linux Kernel
The Forefront of the Development for NVDIMM on Linux KernelThe Forefront of the Development for NVDIMM on Linux Kernel
The Forefront of the Development for NVDIMM on Linux KernelYasunori Goto
 
OSDC 2017 | Open POWER for the data center by Werner Fischer
OSDC 2017 | Open POWER for the data center by Werner FischerOSDC 2017 | Open POWER for the data center by Werner Fischer
OSDC 2017 | Open POWER for the data center by Werner FischerNETWAYS
 
OSDC 2017 - Werner Fischer - Open power for the data center
OSDC 2017 - Werner Fischer - Open power for the data centerOSDC 2017 - Werner Fischer - Open power for the data center
OSDC 2017 - Werner Fischer - Open power for the data centerNETWAYS
 
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner Fischer
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner FischerOSDC 2017 | Linux Performance Profiling and Monitoring by Werner Fischer
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner FischerNETWAYS
 
C++ Programming and the Persistent Memory Developers Kit
C++ Programming and the Persistent Memory Developers KitC++ Programming and the Persistent Memory Developers Kit
C++ Programming and the Persistent Memory Developers KitIntel® Software
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화OpenStack Korea Community
 
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster Ceph Community
 
Ceph Day Tokyo - Delivering cost effective, high performance Ceph cluster
Ceph Day Tokyo - Delivering cost effective, high performance Ceph clusterCeph Day Tokyo - Delivering cost effective, high performance Ceph cluster
Ceph Day Tokyo - Delivering cost effective, high performance Ceph clusterCeph Community
 
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance Barriers
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance BarriersCeph Day Berlin: Ceph on All Flash Storage - Breaking Performance Barriers
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance BarriersCeph Community
 
SUSE Enterprise Storage
SUSE Enterprise StorageSUSE Enterprise Storage
SUSE Enterprise StorageSUSE
 

Semelhante a SPDK, PMDK & VtuneTM Summit Agenda (20)

Ceph Day Beijing - SPDK in Ceph
Ceph Day Beijing - SPDK in CephCeph Day Beijing - SPDK in Ceph
Ceph Day Beijing - SPDK in Ceph
 
Ceph Day Beijing - SPDK for Ceph
Ceph Day Beijing - SPDK for CephCeph Day Beijing - SPDK for Ceph
Ceph Day Beijing - SPDK for Ceph
 
Persistent Memory Programming: The Current State of the Ecosystem
Persistent Memory Programming: The Current State of the EcosystemPersistent Memory Programming: The Current State of the Ecosystem
Persistent Memory Programming: The Current State of the Ecosystem
 
Ceph Day Taipei - Accelerate Ceph via SPDK
Ceph Day Taipei - Accelerate Ceph via SPDK Ceph Day Taipei - Accelerate Ceph via SPDK
Ceph Day Taipei - Accelerate Ceph via SPDK
 
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
 
Experience In Building Scalable Web Sites Through Infrastructure's View
Experience In Building Scalable Web Sites Through Infrastructure's ViewExperience In Building Scalable Web Sites Through Infrastructure's View
Experience In Building Scalable Web Sites Through Infrastructure's View
 
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage TierIMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
 
Ceph
CephCeph
Ceph
 
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
 
Java File I/O Performance Analysis - Part I - JCConf 2018
Java File I/O Performance Analysis - Part I - JCConf 2018Java File I/O Performance Analysis - Part I - JCConf 2018
Java File I/O Performance Analysis - Part I - JCConf 2018
 
The Forefront of the Development for NVDIMM on Linux Kernel
The Forefront of the Development for NVDIMM on Linux KernelThe Forefront of the Development for NVDIMM on Linux Kernel
The Forefront of the Development for NVDIMM on Linux Kernel
 
OSDC 2017 | Open POWER for the data center by Werner Fischer
OSDC 2017 | Open POWER for the data center by Werner FischerOSDC 2017 | Open POWER for the data center by Werner Fischer
OSDC 2017 | Open POWER for the data center by Werner Fischer
 
OSDC 2017 - Werner Fischer - Open power for the data center
OSDC 2017 - Werner Fischer - Open power for the data centerOSDC 2017 - Werner Fischer - Open power for the data center
OSDC 2017 - Werner Fischer - Open power for the data center
 
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner Fischer
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner FischerOSDC 2017 | Linux Performance Profiling and Monitoring by Werner Fischer
OSDC 2017 | Linux Performance Profiling and Monitoring by Werner Fischer
 
C++ Programming and the Persistent Memory Developers Kit
C++ Programming and the Persistent Memory Developers KitC++ Programming and the Persistent Memory Developers Kit
C++ Programming and the Persistent Memory Developers Kit
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
 
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster
Ceph Day Taipei - Delivering cost-effective, high performance, Ceph cluster
 
Ceph Day Tokyo - Delivering cost effective, high performance Ceph cluster
Ceph Day Tokyo - Delivering cost effective, high performance Ceph clusterCeph Day Tokyo - Delivering cost effective, high performance Ceph cluster
Ceph Day Tokyo - Delivering cost effective, high performance Ceph cluster
 
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance Barriers
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance BarriersCeph Day Berlin: Ceph on All Flash Storage - Breaking Performance Barriers
Ceph Day Berlin: Ceph on All Flash Storage - Breaking Performance Barriers
 
SUSE Enterprise Storage
SUSE Enterprise StorageSUSE Enterprise Storage
SUSE Enterprise Storage
 

Mais de Intel® Software

AI for All: Biology is eating the world & AI is eating Biology
AI for All: Biology is eating the world & AI is eating Biology AI for All: Biology is eating the world & AI is eating Biology
AI for All: Biology is eating the world & AI is eating Biology Intel® Software
 
Python Data Science and Machine Learning at Scale with Intel and Anaconda
Python Data Science and Machine Learning at Scale with Intel and AnacondaPython Data Science and Machine Learning at Scale with Intel and Anaconda
Python Data Science and Machine Learning at Scale with Intel and AnacondaIntel® Software
 
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSci
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSciStreamline End-to-End AI Pipelines with Intel, Databricks, and OmniSci
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSciIntel® Software
 
AI for good: Scaling AI in science, healthcare, and more.
AI for good: Scaling AI in science, healthcare, and more.AI for good: Scaling AI in science, healthcare, and more.
AI for good: Scaling AI in science, healthcare, and more.Intel® Software
 
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...Intel® Software
 
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...Intel® Software
 
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...Intel® Software
 
AWS & Intel Webinar Series - Accelerating AI Research
AWS & Intel Webinar Series - Accelerating AI ResearchAWS & Intel Webinar Series - Accelerating AI Research
AWS & Intel Webinar Series - Accelerating AI ResearchIntel® Software
 
Intel AIDC Houston Summit - Overview Slides
Intel AIDC Houston Summit - Overview SlidesIntel AIDC Houston Summit - Overview Slides
Intel AIDC Houston Summit - Overview SlidesIntel® Software
 
AIDC NY: BODO AI Presentation - 09.19.2019
AIDC NY: BODO AI Presentation - 09.19.2019AIDC NY: BODO AI Presentation - 09.19.2019
AIDC NY: BODO AI Presentation - 09.19.2019Intel® Software
 
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019Intel® Software
 
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...Intel® Software
 
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...Intel® Software
 
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...Intel® Software
 
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...Intel® Software
 
AIDC India - Intel Movidius / Open Vino Slides
AIDC India - Intel Movidius / Open Vino SlidesAIDC India - Intel Movidius / Open Vino Slides
AIDC India - Intel Movidius / Open Vino SlidesIntel® Software
 
AIDC India - AI Vision Slides
AIDC India - AI Vision SlidesAIDC India - AI Vision Slides
AIDC India - AI Vision SlidesIntel® Software
 
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...Intel® Software
 

Mais de Intel® Software (20)

AI for All: Biology is eating the world & AI is eating Biology
AI for All: Biology is eating the world & AI is eating Biology AI for All: Biology is eating the world & AI is eating Biology
AI for All: Biology is eating the world & AI is eating Biology
 
Python Data Science and Machine Learning at Scale with Intel and Anaconda
Python Data Science and Machine Learning at Scale with Intel and AnacondaPython Data Science and Machine Learning at Scale with Intel and Anaconda
Python Data Science and Machine Learning at Scale with Intel and Anaconda
 
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSci
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSciStreamline End-to-End AI Pipelines with Intel, Databricks, and OmniSci
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSci
 
AI for good: Scaling AI in science, healthcare, and more.
AI for good: Scaling AI in science, healthcare, and more.AI for good: Scaling AI in science, healthcare, and more.
AI for good: Scaling AI in science, healthcare, and more.
 
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...
 
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...
 
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...
 
AWS & Intel Webinar Series - Accelerating AI Research
AWS & Intel Webinar Series - Accelerating AI ResearchAWS & Intel Webinar Series - Accelerating AI Research
AWS & Intel Webinar Series - Accelerating AI Research
 
Intel Developer Program
Intel Developer ProgramIntel Developer Program
Intel Developer Program
 
Intel AIDC Houston Summit - Overview Slides
Intel AIDC Houston Summit - Overview SlidesIntel AIDC Houston Summit - Overview Slides
Intel AIDC Houston Summit - Overview Slides
 
AIDC NY: BODO AI Presentation - 09.19.2019
AIDC NY: BODO AI Presentation - 09.19.2019AIDC NY: BODO AI Presentation - 09.19.2019
AIDC NY: BODO AI Presentation - 09.19.2019
 
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019
AIDC NY: Applications of Intel AI by QuEST Global - 09.19.2019
 
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...
 
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...
 
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...
Bring Intelligent Motion Using Reinforcement Learning Engines | SIGGRAPH 2019...
 
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...
 
AIDC India - AI on IA
AIDC India  - AI on IAAIDC India  - AI on IA
AIDC India - AI on IA
 
AIDC India - Intel Movidius / Open Vino Slides
AIDC India - Intel Movidius / Open Vino SlidesAIDC India - Intel Movidius / Open Vino Slides
AIDC India - Intel Movidius / Open Vino Slides
 
AIDC India - AI Vision Slides
AIDC India - AI Vision SlidesAIDC India - AI Vision Slides
AIDC India - AI Vision Slides
 
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...
Enhance and Accelerate Your AI and Machine Learning Solution | SIGGRAPH 2019 ...
 

Último

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Último (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

SPDK, PMDK & VtuneTM Summit Agenda

  • 1. Andy Rudoff (Intel Data Center Group) Pawel Skowron (Intel Data Center Group) April 16th, 2019
  • 2. SPDK, PMDK & Vtune™ Summit Agenda(TwoSessions)  First Half – Persistent Memory Concepts – Operating System Essentials – The PMDK Libraries  Second Half – Flushing, Transactions, Allocation – Language Support – Comparing High and Low Level Languages  Q & A (but don’t wait until here to ask!) 2
  • 4. SPDK, PMDK & Vtune™ Summit 4 TheStorageStack(50,000ftview…) User Space Kernel Space Standard File API Driver Application File System Application Standard Raw Device Access Management Library Management UI Storage
  • 5. SPDK, PMDK & Vtune™ Summit 5 A Programmer’s View (not just C programmers!) fd = open(“/my/file”, O_RDWR); … count = read(fd, buf, bufsize); … count = write(fd, buf, bufsize); … close(fd); “Buffer-Based”
  • 6. SPDK, PMDK & Vtune™ Summit 6 A Programmer’s View (mapped files) fd = open(“/my/file”, O_RDWR); … base = mmap(NULL, filesize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); close(fd); … base[100] = ‘X’; strcpy(base, “hello there”); *structp = *base_structp; … “Load/Store”
  • 7. SPDK, PMDK & Vtune™ Summit 7 Memory-MappedFiles What are memory-mapped files really?  Direct access to the page cache  Storage only supports block access (paging) With load/store access, when does I/O happen?  Read faults/Write faults  Flush to persistence Not that commonly used or understood  Quite powerful  Sometimes used without realizing it Good reference: http://nommu.org/memory- faq.txt
  • 8. SPDK, PMDK & Vtune™ Summit 8 OSPaging User Space Kernel Space Application ApplicationApplication NVDIMM NVDIMM DRAM … … load/store access page fault access
  • 9. SPDK, PMDK & Vtune™ Summit 9 NVDIMM-N Source: SNIA
  • 10. SPDK, PMDK & Vtune™ Summit 10 Direct Load/Store Access 128, 256, 512GB DDR4 Pin Compatible Native Persistence CPU core L1 Cache L2 Cache L3 Cache Memory Controller DRAM Optane Controller … Firmware • BIOS • Operating System • SNIA NVM programming Model • Application
  • 11. SPDK, PMDK & Vtune™ Summit 11 MotivationforthePMProgrammingModel? 0 25 50 75 100 Idle Average Random Read Latency1 Storage With NAND SSD Storage with Intel® Optane™ SSD Hardware Latency Software Latency Idle Avg. is About 10µs for 4kB storage Idle Avg. is About 80µs for 4kB NAND SSD latency dominated by media latency Optane SSD latency balanced between SSD and System 1 Source–Intel-tested:Averagereadlatencymeasuredatqueuedepth1during4krandomwriteworkload.MeasuredusingFIO3.1.CommonConfiguration-Intel2UServerSystem,OSCentOS7.5,kernel4.17.6-1.el7.x86_64,CPU2xIntel®Xeon®6154Gold@3.0GHz(18cores),RAM256GB DDR4@2666MHz.Configuration–Intel®Optane™SSDDCP4800X375GBandIntel®SSDDCP46001.6TB. Latency– AveragereadlatencymeasuredatQD1during4KRandomWriteoperationsusingFIO3.1.IntelMicrocode:0x2000043;SystemBIOS:00.01.0013;MEFirmware: 04.00.04.294;BMCFirmware:1.43.91f76955;FRUSDR:1.43.SSDstestedwerecommerciallyavailableattimeoftest.Thebenchmarkresultsmayneedtoberevisedasadditionaltestingis conducted.PerformanceresultsarebasedontestingasofJuly24,2018andmaynotreflectallpublicly availablesecurityupdates.Seeconfigurationdisclosurefordetails.No productcanbeabsolutelysecure.SoftwareandworkloadsusedinperformancetestsmayhavebeenoptimizedforperformanceonlyonIntelmicroprocessors.Performancetests,suchasSYSmarkandMobileMark,are measuredusingspecificcomputersystems,components,software,operationsandfunctions.Any changetoanyofthosefactorsmaycausetheresultstovary.Youshouldconsultotherinformationandperformanceteststoassistyouin fullyevaluatingyourcontemplatedpurchases,including theperformanceofthatproductwhencombinedwithotherproducts.For morecompleteinformationvisitwww.intel.com/benchmarks.
  • 12. SPDK, PMDK & Vtune™ Summit 12 MotivationforthePMProgrammingModel? 0 25 50 75 100 Idle Average Random Read Latency1 Storage With NAND SSD Storage with Intel® Optane™ SSD Hardware Latency Software Latency Idle Avg. is About 10µs for 4kB storage Idle Avg. is About 80µs for 4kB 1 Source–Intel-tested:Averagereadlatencymeasuredatqueuedepth1during4krandomwriteworkload.MeasuredusingFIO3.1.CommonConfiguration-Intel2UServerSystem,OSCentOS7.5,kernel4.17.6-1.el7.x86_64,CPU2xIntel®Xeon®6154Gold@3.0GHz(18cores),RAM256GB DDR4@2666MHz.Configuration–Intel®Optane™SSDDCP4800X375GBandIntel®SSDDCP46001.6TB. Latency– AveragereadlatencymeasuredatQD1during4KRandomWriteoperationsusingFIO3.1.IntelMicrocode:0x2000043;SystemBIOS:00.01.0013;MEFirmware: 04.00.04.294;BMCFirmware:1.43.91f76955;FRUSDR:1.43.SSDstestedwerecommerciallyavailableattimeoftest.Thebenchmarkresultsmayneedtoberevisedasadditionaltestingis conducted.PerformanceresultsarebasedontestingasofJuly24,2018andmaynotreflectallpublicly availablesecurityupdates.Seeconfigurationdisclosurefordetails.No productcanbeabsolutelysecure.SoftwareandworkloadsusedinperformancetestsmayhavebeenoptimizedforperformanceonlyonIntelmicroprocessors.Performancetests,suchasSYSmarkandMobileMark,are measuredusingspecificcomputersystems,components,software,operationsandfunctions.Any changetoanyofthosefactorsmaycausetheresultstovary.Youshouldconsultotherinformationandperformanceteststoassistyouin fullyevaluatingyourcontemplatedpurchases,including theperformanceofthatproductwhencombinedwithotherproducts.For morecompleteinformationvisitwww.intel.com/benchmarks. Next logical improvement: remove the SW stack.
  • 13. SPDK, PMDK & Vtune™ Summit 13 0 25 50 75 100 Idle Average Random Read Latency1 Storage With NAND SSD Storage with Intel® Optane™ SSD Hardware Latency Software Latency Memory Subsystem with Intel® Optane™ DC Persistent memory Storage Idle Avg. is About 10µs for 4kB Memory Subsystem Idle Avg. is About ~100ns to ~350ns for 64B2 1 Source: Intel-tested: Average read latency measured at queue depth 1 during 4k random write workload. Measured using FIO 3.1. comparing Intel Reference platform with Optane™ SSD DC P4800X 375GB and Intel® SSD DC P4600 1.6TB compared to SSDs commercially available as of July 1, 2018. Performance results are based on testing as of July 24, 2018 and may not reflect all publicly available security updates. See configuration disclosure for details. No product can be absolutely secure. For more complete information about performance and benchmark results, visit www.intel.com/benchmarks. 2 App Direct Mode , NeonCity, LBG B1 chipset , CLX B0 28 Core (QDF QQYZ), Memory Conf 192GB DDR4 (per socket) DDR 2666 MT/s, Optane DCPMM 128GB, BIOS 561.D09, BKC version WW48.5 BKC, Linux OS 4.18.8-100.fc27, Spectre/Meltdown Patched (1,2,3, 3a)
  • 14. SPDK, PMDK & Vtune™ Summit TheValueofPersistentMemory Data sets addressable with no DRAM footprint  At least, up to application if data copied to DRAM Typically DMA (and RDMA) to PM works as expected  RDMA directly to persistence – no buffer copy required! The “Warm Cache” effect  No time spend loading up memory Byte addressable Direct user-mode access  No kernel code in data path 14
  • 15. SPDK, PMDK & Vtune™ Summit 15 TheSNIANVMProgrammingModel Persistent Memory User Space Kernel Space Standard File API NVDIMM Driver Application File System ApplicationApplication Standard Raw Device Access Storage File Memory Load/Store Management Library Management UI Standard File API Mgmt. PM-Aware File System MMU Mappings
  • 16. SPDK, PMDK & Vtune™ Summit 16 TheProgrammingModelBuildsontheStorageAPIs Persistent Memory User Space Kernel Space Standard File API NVDIMM Driver Application File System ApplicationApplication Standard Raw Device Access Storage File Memory Load/Store Management Library Management UI Standard File API Mgmt. PM-Aware File System MMU Mappings Use PM Like an SSD
  • 17. SPDK, PMDK & Vtune™ Summit 17 TheProgrammingModelBuildsontheStorageAPIs Persistent Memory User Space Kernel Space Standard File API NVDIMM Driver Application File System ApplicationApplication Standard Raw Device Access Storage File Memory Load/Store Management Library Management UI Standard File API Mgmt. PM-Aware File System MMU Mappings Use PM Like an SSD Use PM Like an SSD (no page cache) “DAX”
  • 18. SPDK, PMDK & Vtune™ Summit 18 OptimizedFlushisthePrimaryNewAPI Persistent Memory User Space Kernel Space Standard File API NVDIMM Driver Application File System ApplicationApplication Standard Raw Device Access Storage File Memory Load/Store Management Library Management UI Standard File API Mgmt. PM-Aware File System MMU Mappings Use PM Like an SSD Use PM Like an SSD (no page cache) “DAX” Optimized flush
  • 19. SPDK, PMDK & Vtune™ Summit 19 User Space Kernel Space Application RAM • Well-worn interface, around for decades • Memory is gone when application exits – Or machine goes down RAM RAM RAM Memory Management ptr = malloc(len) ApplicationMemoryAllocation
  • 20. SPDK, PMDK & Vtune™ Summit 20 User Space Kernel Space Application NVM • Simple, familiar interface, but then what? – Persistent, so apps want to “attach” to regions – Need to manage permissions for regions – Need to resize, remove, …, backup the data NVM NVM NVM Memory Management ptr = pm_malloc(len) ApplicationNVMAllocation
  • 21. SPDK, PMDK & Vtune™ Summit 21 It has always been thus:  open()  mmap()  store...  msync() pmem just follows this decades-old model  But the stores are cached in a different spot visible persistent Visibilityversuspersistence
  • 22. SPDK, PMDK & Vtune™ Summit 22 HowtheHWworks WPQ ADR -or- WPQ Flush (kernel only) Core L1 L1 L2 L3 WPQ MOV DIMM CPUCACHES CLWB + fence -or- CLFLUSHOPT + fence -or- CLFLUSH -or- NT stores + fence -or- WBINVD (kernel only) Minimum Required Power fail protected domain: Memory subsystem Custom Power fail protected domain indicated by ACPI property: CPU Cache Hierarchy
  • 23. SPDK, PMDK & Vtune™ Summit 23 AppResponsibilities DAX mapped file? (OS provides info) CPU caches considered persistent? (ACPI provides info) CLWB? (CPU_ID provides info) CLFLUSHOPT? (CPU_ID provides info) Program Initialization Use standard API for flushing (msync/fsync or FlushFileBuffers) Use CLFLUSH for flushing Use CLFLUSHOPT+SFENCE for flushing Use CLWB+SFENCE for flushing Stores considered persistent when globally-visible no yes yes yes yes no no no
  • 24. SPDK, PMDK & Vtune™ Summit 24 AppResponsibilities (Recovery) Dirty Shutdown? Known Poison Blocks Program Initialization Data set is potentially inconsistent. Recover. Repair data set Normal Operation yes no nono
  • 25. SPDK, PMDK & Vtune™ Summit 25 Creatingaprogrammingenvironment NVDIMM Kernel Space Application Load/Store Standard File API PM-Aware File System MMU Mappings Language Runtime Libraries Tools Tools for correctness and performance Language support Optimized allocators, transactions Result: Safer, less error-prone
  • 27. SPDK, PMDK & Vtune™ Summit 27 EnablingintheEcosystem ● Linux kernel version 4.19 (ext4, xfs) ● Windows Server 2019 (NTFS) ● VMware vSphere 6.7 ● RHEL 7.5 ● SLES 15 and SLES 12 SP4 ● Ubuntu 18.* ● Java JDK 12 ● Kubernetes 1.13 ● OpenStack ‘Stein’ Be sure to see Steve Scargall’s talk: Persistent Memory Provisioning/Configuration tools
  • 28. SPDK, PMDK & Vtune™ Summit 28 ProgrammingwithOptimizedFlush • Use Standard unless OS says it is safe to use Optimized Flush • On Windows • When you successfully memory map a DAX file: • Optimized Flush is safe • On Linux • When you successfully memory map a DAX file with MAP_SYNC: • Optimized Flush is safe • MAP_SYNC flag to mmap() is new
  • 30. SPDK, PMDK & Vtune™ Summit 30 PMDKLibraries Support for volatile memory usage Low level support for local persistent memory libpmem Low level support for remote access to persistent memory librpmem NVDIMM User Space Kernel Space Application Load/Store Standard File API pmem-Aware File System MMU Mappings PMDK Interface to create arrays of pmem-resident blocks, of same size, atomically updated Interface for persistent memory allocation, transactions and general facilities Interface to create a persistent memory resident log file libpmemblklibpmemlog libpmemobj Transaction Support C++ C PCJ / LLPL Python Low-level support PCJ – Persistent Collection for Java memkind pmemkv vmemcache http://pmem.io https://github.com/pmem/pmdk Experimental C++ Persistent Containers Language bindings High Level Interfaces ( in development)
  • 31. SPDK, PMDK & Vtune™ Summit 31 PMDKLibraries Support for volatile memory usage Low level support for local persistent memory libpmem Low level support for remote access to persistent memory librpmem NVDIMM User Space Kernel Space Application Load/Store Standard File API pmem-Aware File System MMU Mappings PMDK Interface to create arrays of pmem-resident blocks, of same size, atomically updated Interface for persistent memory allocation, transactions and general facilities Interface to create a persistent memory resident log file libpmemblklibpmemlog libpmemobj Transaction Support C++ C PCJ / LLPL Python Low-level support PCJ – Persistent Collection for Java memkind pmemkv vmemcache http://pmem.io Experiment al C++ Persistent Containers Language bindings See Rob Dickinson’s talk on pmemkv High Level Interfaces ( in development)
  • 32. SPDK, PMDK & Vtune™ Summit 32 PMDKLibraries Support for volatile memory usage Low level support for local persistent memory libpmem Low level support for remote access to persistent memory librpmem NVDIMM User Space Kernel Space Application Load/Store Standard File API pmem-Aware File System MMU Mappings PMDK Interface to create arrays of pmem-resident blocks, of same size, atomically updated Interface for persistent memory allocation, transactions and general facilities Interface to create a persistent memory resident log file libpmemblklibpmemlog libpmemobj Transaction Support C++ C PCJ / LLPL Python Low-level support PCJ – Persistent Collection for Java memkind pmemkv vmemcache http://pmem.io Experiment al C++ Persistent Containers Language bindings See Usha and Piotr’s talk on vmemcache High Level Interfaces ( in development)
  • 33. SPDK, PMDK & Vtune™ Summit BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application Differentwaystousepersistentmemory
  • 34. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application Memory Mode
  • 35. SPDK, PMDK & Vtune™ Summit 35 MemoryMode  Not really a part of PMDK…  … but it’s the easiest way to take advantage of Persistent Memory  Memory is automatically placed in PMEM, with caching in DRAM char *memory = malloc(sizeof(struct my_object)); strcpy(memory, “Hello World”); When To Use  modifying applications is not feasible  massive amounts of memory is required (more TB)  CPU utilization is low in shared environment (more VMs)
  • 36. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libmemkind
  • 37. SPDK, PMDK & Vtune™ Summit 37 libmemkind  Explicitly manage allocations from App Direct, allowing for fine-grained control of DRAM/PMEM  The application can decide what type of memory to use for objects struct memkind *pmem_kind = NULL; size_t max_size = 1 << 30; /* gigabyte */ /* Create PMEM partition with specific size */ memkind_create_pmem(PMEM_DIR, max_size, &pmem_kind); /* allocate 512 bytes from 1 GB available */ char *pmem_string = (char *)memkind_malloc(pmem_kind, 512); /* deallocate the pmem object */ memkind_free(pmem_kind, pmem_string); When To Use  application can be modified  different tiers of objects (hot, warm) can be identified  persistence is not required
  • 38. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libvmemcache
  • 39. SPDK, PMDK & Vtune™ Summit 39 libvmemcache  Seamless and easy-to-use LRU caching solution for persistent memory Keys reside in DRAM, values reside in PMEM  Designed for easy integration with existing systems VMEMcache *cache = vmemcache_new(); vmemcache_add(cache, "/tmp"); const char *key = "foo"; vmemcache_put(cache, key, strlen(key), "bar", sizeof("bar")); char buf[128]; ssize_t len = vmemcache_get(cache, key, strlen(key), buf, sizeof(buf), 0, NULL); vmemcache_delete(cache); When To Use  caching large quantities of data  low latency of operations is needed  persistence is not required
  • 40. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libpmemkv
  • 41. SPDK, PMDK & Vtune™ Summit 41 libpmemkv  Local/embedded key-value datastore optimized for persistent memory. Provides different language bindings and storage engines.  High-level storage layer optimized for PMEM const pmemkv = require('pmemkv'); const kv = new KVEngine('vsmap', '{"path":"/dev/shm/"}'); kv.put('key1', 'value1'); assert(kv.count === 1); assert(kv.get('key1') === 'value1'); kv.all((k) => console.log(` visited: ${k}`)); kv.remove('key1'); kv.stop(); When To Use  storing large quantities of data  low latency of operations is needed  persistence is required
  • 42. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libpmemobj
  • 43. SPDK, PMDK & Vtune™ Summit 43 libpmemobj  Transactional object store, providing memory allocation, transactions, and general facilities for persistent memory programming.  Flexible and relatively easy way to leverage PMEM When To Use  direct byte-level access to objects is needed  using custom storage-layer algorithms  persistence is required typedef struct foo { PMEMoid bar; // persistent pointer int value; } foo; int main() { PMEMobjpool *pop = pmemobj_open (...); TX_BEGIN(pop) { TOID(foo) root = POBJ_ROOT(foo); D_RW(root)->value = 5; } TX_END; }
  • 44. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libpmem
  • 45. SPDK, PMDK & Vtune™ Summit 45 libpmem  Low-level library that provides basic primitives needed for persistent memory programming and optimized memcpy/memmove/memset  The very basics needed for PMEM programming When To Use  modifying application that already uses memory mapped I/O  other libraries are too high-level  only need low-level PMEM-optimized primitives (memcpy etc) void *pmemaddr = pmem_map_file("/mnt/pmem/data", BUF_LEN, PMEM_FILE_CREATE|PMEM_FILE_EXCL, 0666, &mapped_len, &is_pmem)); const char *data = "foo"; if (is_pmem) { pmem_memcpy_persist(pmemaddr, data, strlen(data)); } else { memcpy(pmemaddr, data, strlen(data)); pmem_msync(pmemaddr, strlen(data)); } close(srcfd); pmem_unmap(pmemaddr, mapped_len);
  • 46. SPDK, PMDK & Vtune™ Summit Differentwaystousepersistentmemory BARRIER TO ADOPTION GAIN PMEM as less expensive DRAM Volatile tiered memory Volatile object cache Persistent key-value store High-level persistent application Low-level persistent application libpmem libpmemobj libpmemkvlibvmemcache libmemkind Memory Mode
  • 47. SPDK, PMDK & Vtune™ Summit Persistent Memory NVDIMMs User Space Kernel Space Standard File API NVDIMM Driver Application File System ApplicationApplication Standard Raw Device Access mmap Load/Store Management Library Management UI Standard File API pmem-Aware File System MMU Mappings Hardware CPU DDR Block PMDK 47 ProgrammingModelTools pmempool pmemcheck daxio daxctl Persistence Inspector VTune Amplifier Valgrind VTune Platform Profiler FIO MLC pmembench PMEMOBJ_LOG_LEVEL Administration, Benchmark, Debug, Performance ixpdimm-cli ndctl
  • 49. SPDK, PMDK & Vtune™ Summit 49 Libpmemexamples Source: https://github.com/pmem/pmdk/tree/master/src/examples/libpmem /* * simple_copy.c -- show how to use pmem_memcpy_persist() * * usage: simple_copy src-file dst-file * * Reads 4k from src-file and writes it to dst-file. */ … /* create a pmem file and memory map it */ if ((pmemaddr = pmem_map_file(argv[2], BUF_LEN, PMEM_FILE_CREATE|PMEM_FILE_EXCL, 0666, &mapped_len, &is_pmem)) == NULL) { perror("pmem_map_file"); exit(1); }
  • 50. SPDK, PMDK & Vtune™ Summit 50 Usingis_pmem if (is_pmem) { pmem_memcpy_persist(pmemaddr, buf, cc); } else { memcpy(pmemaddr, buf, cc); pmem_msync(pmemaddr, cc); }
  • 51. SPDK, PMDK & Vtune™ Summit POSIXLoad/StorePersistence 51 open(…); mmap(…); strcpy(pmem, "moose"); msync(pmem, 6, MS_SYNC);
  • 52. SPDK, PMDK & Vtune™ Summit Optimizedflush(useonlywhensafe!) 52 open(…); mmap(…); strcpy(pmem, "moose"); pmem_persist(pmem, 6); Application libpmem memory-mapped pmem
  • 53. SPDK, PMDK & Vtune™ Summit 53 Flushesarenotatomicoperations open(…); mmap(…); strcpy(pmem, "Hello, World!"); pmem_persist(pmem, 14); Crash 1. "0000000000..." 2. "Hello, W000000..." 3. "00000000orld!0" 4. "Hello, 00000000" 5. "Hello, World!0" Result
  • 54. SPDK, PMDK & Vtune™ Summit 54 libpmemobj “transactionalobjectstore” Application libpmem Load/Store memory-mapped pmem libpmemobj transactionsatomic operations allocatorlists locks API API API
  • 55. SPDK, PMDK & Vtune™ Summit 55 TransactionalAPI  Need for Transactions • To enable updates and persist larger & non-contiguous portions of data atomically x86 CPUs guarantee atomicity only for 8 byte stores  libpmemobj provides ACID transactions for persistent memory • Atomicity means that a transaction either succeeds or fails completely • Consistency means that the transaction transforms PMEMobjpool from one consistent state to another. This means that a pool won’t get corrupted by a transaction. • Isolation means that transactions can be executed as if the operations were executed serially on the pool. This is optional, and requires user-provided locks. • Durability means that once a transaction is committed, it remains committed even in the case of system failures
  • 56. SPDK, PMDK & Vtune™ Summit 56 TransactionalAPI  Inside of a transaction the application can: • Allocate new objects • Free existing objects • Modify existing objects • Isolate objects TX_BEGIN_PARAM(pool, TX_PARAM_MUTEX, &root->lock, TX_PARAM_NONE) { pmemobj_tx_add_range_direct(root, sizeof(*root)); root->objA = pmemobj_tx_alloc(sizeof(struct objectA), type_num); pmemobj_tx_free(root->objB): root->objB = OID_NULL; } TX_END http://pmem.io/pmdk/manpages/linux/master/libpmemobj/pmemobj_tx_begin.3
  • 57. SPDK, PMDK & Vtune™ Summit AllocatorDesignDecisions  Inspired by Hoard allocator  For faster access, allocator run-time metadata is stored in DRAM  Operates on Persistent Heap • Persistent Memory Pools  Dynamic growing of the heap at runtime not supported  Redo log and Undo log for Recovery 57
  • 58. SPDK, PMDK & Vtune™ Summit 58 AtomicAPIs  Memory allocation has at least two steps: 1. Selection of the memory block to allocate 2. Assignment of the resulting pointer to some destination pointer  If the application is interrupted in between these steps • On DRAM, nothing happens, because all memory allocations vanish • On PMEM, memory is leaked, because the allocated object is unreachable root->objA = pmalloc(pool, sizeof(struct objectA)); Step 2 Step 1
  • 59. SPDK, PMDK & Vtune™ Summit 59 AtomicAPIs • In libpmemobj atomic API these two steps are merged into one. The object is fail-safe atomically allocated and assigned to the destination pointer. • This API also introduces a type numbers and cunstructors • Type number is an 8 byte embedded metadata field which identifies the object in the pool. Can be used to recover data if objects become unreachable. • Constructors are used to initialize objects with data. Once an object is allocated, the constructor was ran successfully. pmemobj_alloc(pool, &root->objA, sizeof(struct objectA), type_num, constr, constr_arg); http://pmem.io/pmdk/manpages/linux/master/libpmemobj/pmemobj_alloc.3
  • 61. SPDK, PMDK & Vtune™ Summit 61 HowtoChooseyourAPI/Language Start from the highest-level interface that works for you  Example: libpmemkv  If that doesn’t meet your needs, try a Java or C++ container  Only if that doesn’t meet your needs, build your own data structures – In Java, C++, C (more later)
  • 62. SPDK, PMDK & Vtune™ Summit 62 From C  Fully validated, delivered on Linux, early access on Windows  Can stick to pure API calls, but macros add: – Compile-time type safety – Transaction syntax, similar to try/catch From Java  Persistent Containers for Java (Experimental) From C++  Fully validated, delivered on Linux, early access on Windows  Use C++ type system & syntax: much cleaner, less error-prone  Experimental persistent STL like containers ( work in progress ) From Python  PyNVM (Experimental) Other work  pmemcheck, pmreorder, Persistence Inspector Builtonlibpmemobj…
  • 63. SPDK, PMDK & Vtune™ Summit 63 Otherlanguagesupport libpmemkv (see Rob Dickinson’s talk later today)  Building up quite a long list of supported languages  Not just ”call C from language X” – idiomatic support Research underway for pmem support in other languages  Don’t be shy about letting us know your needs – Example: (FORTRAN support for memkind)
  • 65. SPDK, PMDK & Vtune™ Summit CProgrammingwithlibpmemobj 65
  • 66. SPDK, PMDK & Vtune™ Summit 66 TransactionSyntax TX_BEGIN(Pop) { /* the actual transaction code goes here... */ } TX_ONCOMMIT { /* * optional − executed only if the above block * successfully completes */ } TX_ONABORT { /* * optional − executed if starting the transaction fails * or if transaction is aborted by an error or a call to * pmemobj_tx_abort() */ } TX_FINALLY { /* * optional − if exists, it is executed after * TX_ONCOMMIT or TX_ONABORT block */ } TX_END /* mandatory */
  • 67. SPDK, PMDK & Vtune™ Summit 67 PropertiesofTransactions TX_BEGIN_PARAM(Pop, TX_PARAM_MUTEX, &D_RW(ep)->mtx, TX_PARAM_NONE) { TX_ADD(ep); D_RW(ep)->count++; } TX_END Powerfail Atomicity Multi-Thread Atomicity Caller must instrument code for undo logging
  • 68. SPDK, PMDK & Vtune™ Summit 68 PersistentMemoryLocks  Want locks to live near the data they protect (i.e. inside structs)  Does the state of locks get stored persistently? – Would have to flush to persistence when used – Would have to recover locked locks on start-up – Might be a different program accessing the file – Would run at pmem speeds  PMEMmutex – Runs at DRAM speeds – Automatically initialized on pool open
  • 69. SPDK, PMDK & Vtune™ Summit C++Programmingwithlibpmemobj 69
  • 70. SPDK, PMDK & Vtune™ Summit 70 C++QueueExample:Declarations /* entry in the queue */ struct pmem_entry { persistent_ptr<pmem_entry> next; p<uint64_t> value; }; persistent_ptr<T> Pointer is really a position-independent Object ID in pmem. Gets rid of need to use C macros like D_RW() p<T> Field is pmem-resident and needs to be maintained persistently. Gets rid of need to use C macros like TX_ADD()
  • 71. SPDK, PMDK & Vtune™ Summit 71 C++QueueExample:Transaction void push(pool_base &pop, uint64_t value) { transaction::exec_tx(pop, [&] { auto n = make_persistent<pmem_entry>(); n->value = value; n->next = nullptr; if (head == nullptr) { head = tail = n; } else { tail->next = n; tail = n; } }); } Transactional (including allocations & frees)
  • 73. SPDK, PMDK & Vtune™ Summit 73 LinkstoMoreinformation Find the PMDK (Persistent Memory Development Kit) at http://pmem.io/pmdk/ Getting Started  Intel IDZ persistent memory- https://software.intel.com/en-us/persistent-memory  Entry into overall architecture - http://pmem.io/2014/08/27/crawl-walk-run.html  Emulate persistent memory - http://pmem.io/2016/02/22/pm-emulation.html Linux Resources  Linux Community Pmem Wiki - https://nvdimm.wiki.kernel.org/  Pmem enabling in SUSE Linux Enterprise 12 SP2 - https://www.suse.com/communities/blog/nvdimm-enabling- suse-linux-enterprise-12-service-pack-2/ Windows Resources  Using Byte-Addressable Storage in Windows Server 2016 -https://channel9.msdn.com/Events/Build/2016/P470  Accelerating SQL Server 2016 using Pmem - https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-2016- and-Windows-Server-2016-SCM--FAST Other Resources  SNIA Persistent Memory Summit 2018 - https://www.snia.org/pm-summit  Intel manageability tools for Pmem - https://01.org/ixpdimm-sw/