《持久内存编程》([美]史蒂夫·斯卡格尔(Steve Scargall))-图书推荐

内容提要

本书讲述了持久内存编程这项技术,以及它为什么受行业欢迎。其中涵盖了操作系统和硬件需求,以及如何使用模拟或真实的持久内存硬件创建开发环境。本书解释了基本概念,并介绍了C、C++、JavaScript和其他语言的持久内存编程API,讨论了持久内存上的RMDA,阐述了其安全特性。本书还包括可以在读者自己的系统上运行的源代码和示例。

目录

译者序
前言
致谢
作者简介
贡献者简介
技术评审者简介
译者简介
第1章持久内存编程简介 1
1.1**示例程序 2
1.1.1有何区别 4
1.1.2性能差异 5
1.1.3程序复杂性 5
1.1.4libpmemkv如何运行 5
1.2后文提要 6
1.3总结 7
第2章持久内存架构 8
2.1持久内存的特性 8
2.2持久内存的平台支持 9
2.3缓存层级 10
2.4电源故障保护域 11
2.5刷新、排序和屏障操作的需求 13
2.6数据可见性 16
2.7用于持久内存的英特尔机器指令 16
2.8检测平台功能 17
2.9应用程序启动与恢复 18
2.10后文提要 20
2.11总结 20
第3章持久内存的操作系统支持 21
3.1内存和存储的操作系统支持 21
3.2持久内存用作块存储 22
3.3持久内存感知型文件系统 23
3.4内存映射文件 24
3.5持久内存直接访问 30
3.6总结 37
第4章持久内存编程的基本概念 38
4.1有何区别 38
4.2原子*新 39
4.3事务 39
4.3.1原子性 39
4.3.2一致性 40
4.3.3隔离性 40
4.3.4持久性 40
4.4刷新不具有事务性 41
4.5启动时职责 41
4.6针对硬件配置进行调优 41
4.7总结 42
第5章持久内存开发套件简介 43
5.1背景 43
5.2选择正确的语义 44
5.3易失性库 44
5.3.1libmemkind 44
5.3.2libvmemcache 45
5.3.3libvmem 46
5.4持久性库 46
5.4.1libpmem 46
5.4.2libpmemobj 46
5.4.3libpmemobj-cpp 47
5.4.4libpmemkv 47
5.4.5libpmemlog 47
5.4.6libpmemblk 48
5.5工具和命令程序 48
5.5.1pmempool 48
5.5.2pmemcheck 48
5.5.3pmreorder 49
5.6总结 49
第6章libpmem:底层持久内存支持 50
6.1使用库 51
6.2映射文件 51
6.3复制到持久内存 52
6.4分解刷新步骤 53
6.5总结 54
第7章libpmemobj:原生事务性对象存储 55
7.1什么是libpmemobj 55
7.2为什么不使用malloc() 55
7.3组合操作 56
7.4内存池 56
7.4.1创建内存池 56
7.4.2池对象指针和根对象 59
7.4.3打开内存池并从内存池中读取数据 60
7.5内存池集 61
7.5.1串联池集 61
7.5.2副本池集 62
7.6管理内存池和池集 62
7.7类型化对象标识符 63
7.8分配内存 63
7.9持久保存数据 63
7.9.1原子操作 64
7.9.2保留/发布API 66
7.9.3事务API 68
7.9.4可选标记 71
7.9.5持久保存数据总结 71
7.10libpmemobj的API可提供保障 71
7.11管理库操作 72
7.12调试与错误处理 72
7.13总结 74
第8章libpmemobj-cpp:自适应语言C++和持久内存 75
8.1简介 75
8.2元编程 75
8.2.1持久指针 76
8.2.2事务 76
8.2.3创建快照 77
8.2.4分配 79
8.3C++标准限制 80
8.3.1对象的生命周期 80
8.3.2平凡类型 81
8.3.3对象布局 82
8.3.4指针 83
8.3.5限制总结 85
8.4简化持久性 85
8.5生态系统 91
8.5.1持久容器 91
8.5.2持久容器示例 91
8.6总结 94
第9章pmemkv:持久内存键值存储 95
9.1pmemkv架构 97
9.2电话簿示例 99
9.3让持久内存*靠近云 102
9.4总结 103
**0章持久内存编程的易失性用途 104
10.1简介 104
10.2背景 105
10.2.1内存分配 105
10.2.2工作原理 105
10.2.3支持的内存“类型” 105
10.3memkind API 107
10.3.1类型管理API 107
10.3.2堆管理API 111
10.3.3类型配置管理 112
10.3.4*多memkind代码示例 113
10.4面向PMEM类型的C++分配器 113
10.4.1pmem::allocator方法 114
10.4.2嵌套容器 114
10.5C++示例 114
10.5.1使用pmem::allocator 115
10.5.2创建字符串向量 115
10.6使用持久内存扩展易失性内存 116
10.7libvmemcache:面向大容量持久内存的高效易失性键值缓存 120
10.7.1libvmemcache概述 120
10.7.2libvmemcache设计 122
10.7.3使用libvmemcache 124
10.8总结 126
**1章设计适用于持久内存的数据结构 127
11.1连续数据结构和碎片化 127
11.1.1内部和外部碎片化 127
11.1.2原子性和一致性 128
11.1.3选择性持久化 131
11.1.4示例数据结构 131
11.2总结 140
**2章调试持久内存应用程序 141
12.1用于Valgrind的pmemcheck 142
12.1.1栈溢出示例 142
12.1.2内存泄漏示例 143
12.2Intel Inspector?—?Persistence Inspector 144
12.2.1栈溢出示例 144
12.2.2内存泄漏示例 145
12.3常见的持久内存编程问题 146
12.3.1非持久存储 146
12.3.2数据存储未添加到事务 157
12.3.3将一个内存对象添加至两个不同的事务 160
12.3.4内存覆写 165
12.3.5非必要刷新 166
12.3.6乱序写入 170
12.4总结 179
**3章实际应用程序中实现持久性 180
13.1数据库示例 180
13.2不同的持久内存实现方式 181
13.3开发持久内存感知型MariaDB*存储引擎 181
13.3.1了解存储层 182
13.3.2创建存储引擎类 183
13.4总结 191
**4章并发和持久内存 192
14.1事务与多线程 192
14.2持久内存上的互斥体 196
14.3原子操作与持久内存 198
14.4持久内存的并发数据结构 198
14.4.1并发有序映射 199
14.4.2并发散列映射 202
14.5总结 202
**5章分析与性能 204
15.1简介 204
15.2性能分析概念 204
15.2.1计算受限与内存受限 204
15.2.2内存延时与内存容量 205
15.2.3读取与写入性能 205
15.2.4内存访问模式 205
15.2.5I/O存储受限的工作负载 205
15.3确定工作负载是否适合持久内存 206
15.3.1易失性用例 206
5.3.2需要持久性的用例 208
15.4使用持久内存的工作负载性能分析 209
15.4.1确定工作负载特性 210
15.4.2内存带宽与延时 210
15.4.3持久内存读写比率 211
15.4.4工作集大小与内存占用空间大小 211
15.4.5非一致内存架构行为 211
15.4.6优化面向持久内存的软件 212
15.5总结 215
**6章PMDK内部组件:重要算法和数据结构 216
16.1持久内存池:高层架构概览 216
16.2内存映射的不确定性:持久内存对象标识符 218
16.3持久化线程本地存储:使用通道 220
16.4确保电源故障原子性:重做日志和撤销日志 220
16.4.1事务重做日志 221
16.4.2事务撤销日志 221
16.4.3libpmemobj统一日志 222
16.5持久分配:事务持久分配器的接口 223
16.6持久内存堆管理:持久内存分配器设计 223
16.7ACID事务:高效的底层持久事务 226
16.8延迟重新初始化变量:将易失性状态存储在持久内存上 227
16.9总结 228
**7章可靠性、可用性与可维护性 229
17.1处理不可纠正错误 229
17.1.1已使用的不可纠正错误处理 230
17.1.2未使用的不可纠正错误处理 231
17.1.3清除不可纠正错误 234
17.2设备状态 234
17.2.1ACPI定义的设备状态函数(_NCH,_NBS) 236
17.2.2特定供应商的设备状态(_DSM) 236
17.2.3ACPI NFIT状态事件通知 236
17.3不安全/异常关机 237
17.4总结 238
**8章远程持久内存 239
18.1RDMA网络协议 240
18.2初始远程持久内存架构的目标 242
18.3确保远程持久性 242
18.3.1通用远程复制方法 243
18.3.2设备远程复制方法 244
18.4一般软件架构 246
18.5librpmem架构及其在复制中的使用 246
18.5.1使用内存池集配置远程复制 249
18.5.2性能注意事项 249
18.5.3远程复制错误处理 250
18.5.4向复制世界“问好” 251
18.6总结 254
**9章**主题 256
19.1非一致性内存访问 256
19.1.1NUMACTL Linux程序 257
19.1.2NDCTL Linux程序 258
19.1.3英特尔内存延迟检查器程序 259
19.1.4NUMASTAT程序 260
19.1.5英特尔VTune Profiler —Platform Profiler 261
19.1.6IPMCTL程序 261
19.1.7BIOS调优选项 261
19.1.8自动NUMA平衡 261
19.2使用具有持久内存的卷管理器 263
19.3mmap()的MAP_SYNC标记 264
19.4总结 265
附录A如何在Linux上安装NDCTL和DAXCTL 266
附录B如何安装持久内存开发套件 271
附录C如何在Linux和Windows上安装IPMCTL 277
附录D面向持久内存的Java 282
附录E远程持久内存复制的未来 289
术语表 292

卖贝商城 推荐:《持久内存编程》([美]史蒂夫·斯卡格尔(Steve Scargall))