当前位置:主页 > 书籍配套资源 > 内存编程配套资源
《持久内存编程》源代码

《持久内存编程》源代码

  • 更新:2022-01-05
  • 大小:4.7 MB
  • 类别:内存编程
  • 作者:史蒂夫·斯卡格尔(Steve、Scargall)
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

这本书描述了持久内存编程的技术,以及它为什么在行业中受欢迎。它涵盖了操作系统和硬件的要求,以及如何使用模拟或真实持久内存硬件创建开发环境。这本书解释了基本概念,并介绍了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
  • 第10章持久内存编程的易失性用途 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
  • 第11章设计适用于持久内存的数据结构 127
  • 11.1连续数据结构和碎片化 127
  • 11.1.1内部和外部碎片化 127
  • 11.1.2原子性和一致性 128
  • 11.1.3选择性持久化 131
  • 11.1.4示例数据结构 131
  • 11.2总结 140
  • 第12章调试持久内存应用程序 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
  • 第13章实际应用程序中实现持久性 180
  • 13.1数据库示例 180
  • 13.2不同的持久内存实现方式 181
  • 13.3开发持久内存感知型MariaDB*存储引擎 181
  • 13.3.1了解存储层 182
  • 13.3.2创建存储引擎类 183
  • 13.4总结 191
  • 第14章并发和持久内存 192
  • 14.1事务与多线程 192
  • 14.2持久内存上的互斥体 196
  • 14.3原子操作与持久内存 198
  • 14.4持久内存的并发数据结构 198
  • 14.4.1并发有序映射 199
  • 14.4.2并发散列映射 202
  • 14.5总结 202
  • 第15章分析与性能 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
  • 15.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
  • 第16章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
  • 第17章可靠性、可用性与可维护性 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
  • 第18章远程持久内存 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
  • 第19章高级主题 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

资源下载

资源下载地址1:https://pan.baidu.com/s/1HB_f4KMLXQ47xO9Ksb-oJA

相关资源

网友留言