435
volatile libraries
libmemkind, 65
libvmem, 67
libvmemcache, 66
Persistent memory programming
application’s responsibilities, 59
AMD64 architectures, 247
analyzing process, 257
atomic persistent store, 56
CLFLUSH instruction, 217, 247
code modification, 227
data collection, 254
data() function, 249
data structure, 252, 253, 256
dependency, flush, 244
flag/data variables, 224
FlushFileBuffers on Windows, 59
GUI of Intel Inspector, 225, 226
hardware configuration, 60
Intel inspector, 219, 220, 222, 223
memory overwriting, 240–242
memory variables, 249
nonpersistent stores, 214
out-of-order issue, 249–251
output_file.log, 258, 259
persistent memory, 220, 221
pmemcheck code, 215, 217, 219
reader program, 245, 246
redundant flushing, 242, 243
reordering mechanism, 255
resident data structures, 55
SFENCE instruction, 247, 248
storage-resident data structures, 56
transactions
atomicity, 57
consistency, 58
database system, 233
durability, 58
isolation, 58
func() function, 237
lambda functions, 235
multithreaded applications, 235
my_root data structure, creation, 229
object adding, 231
persistence inspector, 230, 233
pmemcheck code, 229, 232
recovery operation, 235
report, 239
rollback mechanism, 234
threads, 236
Valgrind macros, 216, 217
valid flag approach, 219
Persistent queue implementation, 129
Platform capabilities, 25, 26
Platform support, 13
PMDK, installation
Linux distribution package repository
libraries, PMDK v1.6, 396
naming convention, 396
PMDK on Fedora 22, 399
PMDK on Microsoft Windows, 402
PMDK on RHEL and
CentOS 7.5, 400
PMDK on SLES 12 and
OpenSUSE, 400–401
PMDK on Ubuntu 18.04, 401
searching packages,396–398
prerequisites, 395
pmem::allocator class template, 169–171
pmem_allocator.h header file, 170
pmemcheck utility, 70, 208
.pmeminspdata directory, 222
Persistent memory (PMEM_KIND), 158
Pmemkv architecture
characteristics, 144
creation, 143
Index
volatile libraries
libmemkind, 65
libvmem, 67
libvmemcache, 66
Persistent memory programming
application’s responsibilities, 59
AMD64 architectures, 247
analyzing process, 257
atomic persistent store, 56
CLFLUSH instruction, 217, 247
code modification, 227
data collection, 254
data() function, 249
data structure, 252, 253, 256
dependency, flush, 244
flag/data variables, 224
FlushFileBuffers on Windows, 59
GUI of Intel Inspector, 225, 226
hardware configuration, 60
Intel inspector, 219, 220, 222, 223
memory overwriting, 240–242
memory variables, 249
nonpersistent stores, 214
out-of-order issue, 249–251
output_file.log, 258, 259
persistent memory, 220, 221
pmemcheck code, 215, 217, 219
reader program, 245, 246
redundant flushing, 242, 243
reordering mechanism, 255
resident data structures, 55
SFENCE instruction, 247, 248
storage-resident data structures, 56
transactions
atomicity, 57
consistency, 58
database system, 233
durability, 58
isolation, 58
func() function, 237
lambda functions, 235
multithreaded applications, 235
my_root data structure, creation, 229
object adding, 231
persistence inspector, 230, 233
pmemcheck code, 229, 232
recovery operation, 235
report, 239
rollback mechanism, 234
threads, 236
Valgrind macros, 216, 217
valid flag approach, 219
Persistent queue implementation, 129
Platform capabilities, 25, 26
Platform support, 13
PMDK, installation
Linux distribution package repository
libraries, PMDK v1.6, 396
naming convention, 396
PMDK on Fedora 22, 399
PMDK on Microsoft Windows, 402
PMDK on RHEL and
CentOS 7.5, 400
PMDK on SLES 12 and
OpenSUSE, 400–401
PMDK on Ubuntu 18.04, 401
searching packages,396–398
prerequisites, 395
pmem::allocator class template, 169–171
pmem_allocator.h header file, 170
pmemcheck utility, 70, 208
.pmeminspdata directory, 222
Persistent memory (PMEM_KIND), 158
Pmemkv architecture
characteristics, 144
creation, 143
Index
