![](http://4i-bird.com/wp-content/uploads/2020/12/image-90-400x218.png)
持久内存编程指南—乱译连载 (21.附录B.安装PMDK)
持久内存开发工具包(PMDK)以包和源代码格式在受支持的操作系统上可用。PMDK的一些特性需要额外的包。我们描述Linux和Windows的用法说明。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-85-400x260.png)
持久内存编程指南—乱译连载 (20.附录A.LINUX安装NDCTL和DAXCTL)
ndctl实用程序用于管理Linux内核中的libnvdimm(非易失性内存设备)子系统和管理命名空间namespaces。daxctl实用程序为您创建的任何设备dax命名空间namespaces并提供枚举和设置命令。只有直接使用设备dax命名空间时,才需要daxctl。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-84-400x185.png)
持久内存编程指南—乱译连载 (19.高级主题)
在本章中,我们介绍了一些有关持久性内存的更高级主题,包括大型内存系统上的页面大小注意事项、NUMA感知及其如何影响应用程序性能、如何使用卷管理器创建跨多个NUMA节点的DAX文件系统以及mmap() 的映射同步标志。本书有意省略了其他主题,如BIOS优化,因为它是特定于供应商和产品的。持久内存产品的性能和基准测试留给外部资源,因为在本书中有太多的工具(vdbench、sysbench、fio等),每个工具都有太多的选项。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-76-400x251.png)
持久内存编程指南—乱译连载 (18.远程持久内存)
必须知道,通用远程复制方法和设备远程复制方法都不是理想的方法,因为需要特定于供应商的平台特性才能使用非分配写入,这增加了影响整个PCI根复合体性能的复杂性。相反,使用分配写操作刷新远程写操作需要目标系统的令人不快的中断来拦截RDMA发送请求并刷新发送缓冲区中包含的区域列表。在云环境中唤醒远程节点非常令人不快,因为有来自许多不同连接的成百上千个入站RDMA请求;如果可能,请避免这样做。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-74-400x260.png)
持久内存编程指南—乱译连载 (17.可靠性、可用性和可服务性(RAS))
本章描述了一些可用于持久性内存设备的RAS特性,以及与持久性内存应用程序相关的RAS特性。它应该让您更深入地了解了不可纠正的错误以及应用程序如何响应这些错误,操作系统如何检测运行状况更改以提高应用程序的可用性,以及应用程序如何能够最好地检测脏关机并使用数据丢失计数器。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-66-400x178.png)
持久内存编程指南—乱译连载 (16.PMDK内部:重要算法和数据结构)
本章描述了libpmemobj的体系结构和内部工作原理。我们还讨论了在libpmemobj的设计和实现过程中所做选择的原因。有了这些知识,您可以准确地推理使用此库编写的代码的语义和性能特征。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-59-400x223.png)
持久内存编程指南—乱译连载 (15.性能分析与性能)
持久内存系统的分析和性能优化技术与无持久内存系统的那些技术类似。本章概述了理解性能的一些重要概念。也提供了指导用于刻画已存在无持久内存应用的特征和理解是否适用于持久内存。最后,提出了运行在持久内存平台上应用性能分析和调优的重要度量指标,包含一些例子,如何使用VTune Profiler来收集数据。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-48-400x241.png)
持久内存编程指南—乱译连载 (14.并发性和持久内存)
尽管为持久性内存构建应用程序是一项具有挑战性的任务,但是当需要为持久性内存创建多线程应用程序时,这项任务会更加困难。当多个线程可以更新持久内存中的相同数据时,您需要在多线程环境中处理数据一致性。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-47-400x260.png)
持久内存编程指南—乱译连载 (13.真实应用启用持久内存)
本章介绍了如何使用PMDK中的libpmemobj为流行的开源MariaDB数据库创建持久内存感知存储引擎。在应用程序中使用持久性内存可以在意外系统关闭时提供连续性,并通过将数据存储在靠近CPU的位置(可以以内存总线的速度访问)来提高性能。虽然数据库引擎通常使用内存缓存来提高性能(这需要时间来预热),但持久内存在应用程序启动时提供了立即预热的缓存。
![](http://4i-bird.com/wp-content/uploads/2020/12/image-45-339x260.png)
持久内存编程指南—乱译连载 (12.调试持久内存应用程序)
本章介绍了每种工具并描述了如何使用它们。在开发周期的早期发现问题可以节省以后无数小时调试复杂代码的时间。本章介绍了三种有价值的工具:Persistence Inspector、pmemcheck和pmreorder,持久性内存程序员希望将它们集成到开发和测试周期中以检测问题。我们演示了这些工具在检测许多不同类型的常见编程错误方面的用处。