持久内存架构与工程实践

持久内存架构与工程实践
作 者: 李志明 吴国安 李翔
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  李志明 英特尔数据中心集团平台架构师、首席工程师。长期从事服务器系统的硬件架构和设计开发工作,近年来致力于计算和存储技术在数据中心的应用,解决新兴业务挑战。毕业于上海交通大学电子工程系,拥有硕士学位。 吴国安 英特尔持久内存产品工程部经理,在IA架构、性能优化、软件协同硬件开发方面有多年工作经验。目前主要支持客户应用英特尔数据中心级持久内存,进行软件开发和应用适配,提供IA架构上的客户方案技术咨询和支持。在2012年加入英特尔之前,任职意法半导体负责数字电视软件开发和集成的工作。2005年硕士毕业于上海交通大学。 李翔 就职于英特尔数据中心部门,主要从事持久内存的研发与调试,深入参与持久内存初代产品的调试与验证及未来产品的设计与规划,对持久内存的架构与应用有深入的理解。硕士毕业于上海大学信号与信息处理专业,先后就职于华为、思科等科技公司从事产品研发与调试工作。 斯佩峰 英特尔数据中心集团资深软件工程师。长期从事x86服务器的固件开发和软件性能调优,目前专注于持久内存对数据库及存储类应用的优化。 杜凡 资深Linux内核工程师,有十余年的Linux内核开发、性能调优经验。现就职于英特尔,在持久内存方向深耕数年。熟知英特尔持久内存产品,对Linux内核NVDIMM和内存管理子系统有深入理解。深度参与持久内存在不同应用场景的调研与开发,积累了丰富的持久内存在互联网企业中应用经验。曾就职于WindRiver,负责网络协议加密产品的开发, 以及网络协议栈XFRM模块的社区维护工作。 束文辉 英特尔数据中心集团解决方案架构师,专注于大型云计算客户的业务性能特征化与至强平台与非易失性存储的功耗性能调优。具有云计算系统开发经验,熟悉大型IT及数据中心的管理与运维体系,如Web/DB、虚拟化、网络和存储等。毕业于南京大学软件工程系,拥有硕士学位。 徐铖 现就职于英特尔亚太研发有限公司开源技术部门,从事多年大数据技术研究和开发工作,目前主要专注于基于英特尔平台的大数据技术优化。积极的开源项目贡献者,是Apache Hive、Apache ORC和Apache Commons项目的Committer。 胡寅玮 长期从事软件开发和信息技术管理工作。现任英特尔数据中心事业部,云计算软件研发部门经理,致力于服务器产品的软件和固件研发、系统集成及性能优化。

内容简介

《持久内存架构与工程实践》以工程实践为导向,详细阐述了持久内存的整体技术细节。本书对持久内存的硬件和固件架构、编程模型、优化方法等方面进行了深入剖析,并从架构选择、方案实施、性能调优几个方面,对数据库、大数据等场景进行了详细介绍,以帮助读者掌握持久内存应用。《持久内存架构与工程实践》还对持久内存和内存计算的未来发展趋势进行了探讨,抛砖引玉,希望对业界人员在该领域的进一步创新有所帮助。 《持久内存架构与工程实践》适合具有一定基础的计算机和软件行业从业者、研究人员或高校师生阅读,尤其适合在行业内进行云计算的开发工程师学习,也适合相关领域的开发人员和科研人员参考。

图书目录

目录

第1章 持久内存的需求 / 1

1.1 持久内存的产生 / 2

1.1.1 大数据发展对内存的需求 / 2

1.1.2 内存和存储间的性能鸿沟 / 5

1.1.3 持久内存的使用场景 / 7

1.2 非易失性存储介质 / 10

1.2.1 传统非易失性存储介质 / 10

1.2.2 新型非易失性存储介质 / 11

1.2.3 非易失性存储介质主要特性比较 / 14

1.3 持久内存模块 / 15

1.3.1 持久内存的JEDEC标准分类 / 15

1.3.2 Intel傲腾持久内存 / 16

参考文献 / 18

第2章 持久内存的架构 / 19

2.1 内存数据持久化 / 20

2.1.1 数据持久化 / 20

2.1.2 持久化域 / 21

2.1.3 异步内存刷新技术 / 23

2.2 持久内存硬件架构 / 25

2.2.1 持久内存的硬件模块 / 25

2.2.2 持久内存的外部接口 / 27

2.3 持久内存及主机端的固件架构 / 30

2.3.1 接口规范 / 30

2.3.2 持久内存固件 / 34

2.3.3 主机端固件 / 34

2.4 持久内存的安全考虑 / 37

2.4.1 威胁模型 / 37

2.4.2 安全目标 / 38

2.4.3 基于硬件的内存加密 / 40

2.5 持久内存的可靠性、可用性和可维护性 / 40

2.5.1 可靠性、可用性和可维护性定义 / 40

2.5.2 硬件基础 / 41

2.5.3 错误检测和恢复 / 42

2.5.4 单芯片数据纠正和双芯片数据纠正 / 43

2.5.5 巡检 / 43

2.5.6 地址区间检查 / 44

2.5.7 病毒模式 / 45

2.5.8 错误报告和记录 / 45

2.5.9 持久内存故障隔离 / 45

2.5.10 错误注入 / 46

2.6 持久内存的管理 / 47

2.6.1 带内管理和带外管理 / 47

2.6.2 温度管理 / 51

2.7 持久内存的性能 / 53

2.7.1 空闲读取延时 / 53

2.7.2 带宽 / 53

2.7.3 访问粒度 / 53

2.7.4 加载读取延时 / 54

2.7.5 应用性能 / 56

第3章 操作系统实现 / 59

3.1 Linux持久内存内核驱动实现 / 60

3.1.1 操作系统驱动及实现 / 60

3.1.2 固件接口表 / 61

3.1.3 驱动框架 / 61

3.1.4 块设备接口实现 / 63

3.1.5 字符设备接口实现 / 66

3.1.6 NUMA节点接口实现 / 67

3.1.7 持久内存的RAS适配 / 70

3.2 Linux持久内存虚拟化实现 / 71

3.2.1 持久内存虚拟化实现 / 71

3.2.2 使用配置方法 / 77

3.2.3 性能优化指导 / 80

3.3 Windows持久内存驱动实现 / 82

3.3.1 持久内存支持概述 / 82

3.3.2 持久内存驱动框架解析 / 82

3.4 持久内存管理工具 / 83

3.4.1 持久内存的配置目标和命名空间 / 83

3.4.2 IPMCTL / 90

3.4.3 NDCTL / 94

3.4.4 Windows管理工具 / 97

第4章 持久内存的编程和开发库 / 98

4.1 持久内存SNIA编程模型 / 99

4.1.1 通用持久内存设备驱动 / 100

4.1.2 传统文件系统 / 100

4.1.3 持久内存感知文件系统 / 100

4.1.4 管理工具和管理界面 / 101

4.2 持久内存访问方式 / 101

4.2.1 持久内存访问方式 / 102

4.2.2 传统块访问方式 / 104

4.2.3 底层数据存取方式 / 105

4.3 持久内存编程的挑战 / 106

4.3.1 数据持久化 / 107

4.3.2 断电一致性 / 107

4.3.3 数据原子性 / 108

4.3.4 持久内存分配 / 109

4.3.5 位置独立性 / 109

4.4 PMDK编程库 / 110

4.4.1 libmemkind库 / 110

4.4.2 libpmem库 / 113

4.4.3 libpmemobj库 / 120

4.4.4 libpmeblk 和libpmemlog / 143

4.4.5 libpmemobj-cpp库介绍 / 143

4.5 持久内存和PMDK的应用 / 152

4.5.1 PMDK库的应用场景 / 152

4.5.2 pmemkv键值存储框架的介绍 / 153

4.5.3 PMDK在Redis持久化的应用 / 156

参考文献 / 162

第5章 持久内存性能优化 / 163

5.1 与持久内存相关的配置选项和性能特点 / 164

5.1.1 持久内存的常见配置选项与使用模式介绍 / 164

5.1.2 内存模式下的性能特点与适用业务的特征 / 164

5.1.3 AD模式下的性能特点与适用业务的特征 / 167

5.2 持久内存的相关性能评测与基础性能表现 / 170

5.2.1 不同持久内存配置与模式下的基础性能表现 / 170

5.2.2 内存模式下的典型业务场景 / 171

5.2.3 AD模式下的典型业务场景 / 172

5.3 常用性能优化方式与方法 / 173

5.3.1 平台配置优化 / 173

5.3.2 微架构选项优化 / 176

5.3.3 软件编程与数据管理策略的优化 / 181

5.4 性能监控与调优工具 / 183

5.4.1 Memory Latency Checker / 183

5.4.2 Performance Counter Monitor / 186

5.4.3 VTune Amplifier / 188

第6章 持久内存在数据库的应用 / 192

6.1 Redis概况 / 193

6.2 使用持久内存扩展Redis内存容量 / 194

6.2.1 使用持久内存扩展内存容量 / 195

6.2.2 使用NUMA节点扩展内存容量 / 196

6.2.3 使用AD模式扩展内存容量 / 198

6.3 使用持久内存的持久化特性提升Redis性能 / 200

6.3.1 使用AD模式实现RDB / 202

6.3.2 使用AD模式实现AOF / 204

6.4 RocksDB概述及性能特性 / 206

6.5 RocksDB的LSM索引树 / 208

6.6 利用持久内存优化RocksDB性能 / 211

6.6.1 RocksDB的性能瓶颈 / 217

6.6.2 持久内存优化RocksDB的方式和性能结果 / 219

第7章 持久内存在大数据的应用 / 234

7.1 持久内存在大数据分析和人工智能中的应用概述 / 235

7.2 持久内存在大数据计算方面的加速方案 / 235

7.2.1 持久内存在Spark SQL数据分析场景的应用 / 235

7.2.2 持久内存在MLlib机器学习场景的应用 / 241

7.2.3 Spark PMoF:基于持久内存和RDMA网络的高性能Spark Shuffle方案 / 247

7.3 持久内存在大数据存储中的应用 / 255

7.3.1 持久内存在HDFS缓存中的应用 / 255

7.3.2 持久内存在Alluxio缓存中的应用 / 260

7.4 持久内存在Analytics Zoo中的应用 / 264

7.4.1 Analytics Zoo简介 / 264

7.4.2 持久内存在Analytics Zoo中的具体应用 / 264

第8章 持久内存在其他领域的应用 / 267

8.1 持久内存的应用方式及可解决的问题 / 268

8.1.1 持久内存的应用方式 / 268

8.1.2 持久内存能够解决的问题 / 269

8.2 持久内存在推荐系统中的应用 / 270

8.2.1 推荐系统的主要组成 / 271

8.2.2 推荐系统的持久内存应用方法 / 272

8.2.3 推荐系统应用案例 / 272

8.3 持久内存在缓存系统的应用 / 277

8.3.1 缓存系统的分类和特点 / 277

8.3.2 缓存系统应用案例 / 280

8.4 持久内存在高性能计算中的应用 / 284

8.5 持久内存在虚拟云主机中的应用 / 285

8.6 持久内存的应用展望 / 286