436
direct access, 144, 145
JavaScript bindings, 151, 152
phonebook example, 147–151
pmemkv_config structure, 145
pmemkv_config.h, 146
programming languages, 144
pmemkv_config structure, 145
pmem::kv::db class, 149, 150
pmemkv_errormsg() function, 145
pmem_map_file function, 52
pmem_memcpy_persist()
function, 77
pmemobj pool, 197
pmemobj_close() function, 268
pmem::obj:: condition_variable
class, 283
pmemobj_create() function, 84, 266
pmemobj_direct() function, 87
pmemobj_errormsg() function, 106
pmem::obj::mutex class, 283
pmemobj_open() function, 267
pmem::obj::persistent_ptr
class, 113, 125
pmem::obj::pool_base, 130
pmemobj_root() function, 87
pmemobj_set_funcs()
function, 106
pmem::obj::shared_mutex class, 283
pmem::obj::timed_mutex class, 283
pmem::obj::v class, 284
pmem_persist function, 53
pmempool utility, 70, 83
pmreorder utility, 71
pop() method, 130
Power-fail protected domains, 16
ADR and eADR, 18
challenge, 18
SFENCE operation, 18
SNIA NVM programming model, 17
Profiling and performance optimization
techniques
computer bound vs memory
bound, 295
default memory page size, 311
DRAM-only system, 302
guided data placement, 307
Intel MLC, 304
I/O bound, 297
memory access optimization, 308
memory access pattern, 296
memory-capacity constraints, 308
memory latency vs memory
capacity, 296
NUMA
addressable memory capacity, 306
bandwidth requirements, 307
BIOS options, 307
data allocation vs access, 309
QPI/UPI, 305
thread migration, 310
tuning hardware, 306
persistent memory technologies
use cases, memory-capacity
bound, 298
use cases, VTune
Profiler, 301, 302
use cases, WSS, 300, 301
read vs. write performance, 296
read–write ratio, 305
working set size and memory
footprint, 305
workload characteristics, 303
pull requests, 142
push() method, 129
put() method, 150
Pmemkv architecture (cont.)
Index
direct access, 144, 145
JavaScript bindings, 151, 152
phonebook example, 147–151
pmemkv_config structure, 145
pmemkv_config.h, 146
programming languages, 144
pmemkv_config structure, 145
pmem::kv::db class, 149, 150
pmemkv_errormsg() function, 145
pmem_map_file function, 52
pmem_memcpy_persist()
function, 77
pmemobj pool, 197
pmemobj_close() function, 268
pmem::obj:: condition_variable
class, 283
pmemobj_create() function, 84, 266
pmemobj_direct() function, 87
pmemobj_errormsg() function, 106
pmem::obj::mutex class, 283
pmemobj_open() function, 267
pmem::obj::persistent_ptr
class, 113, 125
pmem::obj::pool_base, 130
pmemobj_root() function, 87
pmemobj_set_funcs()
function, 106
pmem::obj::shared_mutex class, 283
pmem::obj::timed_mutex class, 283
pmem::obj::v
pmem_persist function, 53
pmempool utility, 70, 83
pmreorder utility, 71
pop() method, 130
Power-fail protected domains, 16
ADR and eADR, 18
challenge, 18
SFENCE operation, 18
SNIA NVM programming model, 17
Profiling and performance optimization
techniques
computer bound vs memory
bound, 295
default memory page size, 311
DRAM-only system, 302
guided data placement, 307
Intel MLC, 304
I/O bound, 297
memory access optimization, 308
memory access pattern, 296
memory-capacity constraints, 308
memory latency vs memory
capacity, 296
NUMA
addressable memory capacity, 306
bandwidth requirements, 307
BIOS options, 307
data allocation vs access, 309
QPI/UPI, 305
thread migration, 310
tuning hardware, 306
persistent memory technologies
use cases, memory-capacity
bound, 298
use cases, VTune
Profiler, 301, 302
use cases, WSS, 300, 301
read vs. write performance, 296
read–write ratio, 305
working set size and memory
footprint, 305
workload characteristics, 303
pull requests, 142
push() method, 129
put() method, 150
Pmemkv architecture (cont.)
Index
