持久内存编程指南—乱译连载 (10.持久内存的易失性使用)
本章展示了持久性内存的大容量是如何用来保存易失性应用程序数据的。应用程序可以选择从DRAM或持久内存或两者中分配和访问数据。memkind是一个非常灵活和易于使用的库,其语义类似于开发人员经常使用的libc的 malloc/free API。libvmemcache是一个可嵌入的轻量级内存缓存解决方案,它允许应用程序以可伸缩的方式有效地使用持久内存的大容量。libvmemcache是GitHub上的一个开源项目,位于https://github.com/pmem/vmemcache。
持久内存编程指南—乱译连载 (9.pmemkv: 持久内存KV库)
在本章中,我们已经展示了一个熟悉的KV数据库对于更广泛的云软件开发人员受众来说是如何使用持久内存并直接访问数据的简单方法。模块化设计、灵活的引擎API以及与许多最流行的云编程语言的集成使得pmemkv成为云本地软件开发人员的直观选择。作为一个开源的轻量级库,它可以很容易地集成到现有的应用程序中,以便立即开始利用持久内存。
持久内存编程指南—乱译连载 (8. libpmemobj-cpp 版本)
本章介绍libpmemobj-cpp库。它使得创建应用程序不易出错,并且与标准C++ API相似,使得修改现有的易失性程序更容易使用持久内存。我们还列出了这个库的局限性以及在开发过程中必须考虑的问题。
持久内存编程指南—乱译连载 (7. libpmemobj: 本地事务对象存储)
本章描述了libpmemobj库,设计用于简化持久内存编程。通过提供那些支持原子操作、事务和预订/发布特性的API,使得创建保证数据完整性的应用,更不易于出错。
持久内存编程指南—乱译连载 (6. libpmem: 低层次持久内存支持)
本章演示了libpmem提供的API的一个很小集。该库不会为你改变,不会提供电源失效-安全事务,不提供分配器。像libpmemobj库(下章描述)提供了所有这些任务,并内部使用libpmem以简单化flush和copy操作。
持久内存编程指南—乱译连载 (5. PMDK介绍)
本章给出了PMDK中可用的库和工具简要列表,以及简要说明了什么时候使用它们。现在你应该知道使用这些库和工具能干什么了。后面的章节,将介绍如何使用这些库和工具开发软件。
持久内存编程指南—乱译连载 (4. 持久内存编程基础概念)
本章是持久内存编程概念概览。当开发使用持久内存的应用时,必须考虑下面几方面:1) 原子更新;2) FLUSH不是事务的;3) 应用启动时的职责;4) 硬件配置调优。在一个产品级应用中应对好以上挑战,需要更复杂的编程、广泛的测试,以及性能分析。
持久内存编程指南—乱译连载 (3. 操作系统对持久内存的支持)
本章展示了操作系统持久内存接口完整视图。应用可以把持久内存当前快速SSD,直接通过持久内存感知文件系统,或者直通过DAX接映射到应用内存空间。DAX有效利用了操作系统的内存映射文件服务,并利用硬件能力直接映射持久内存到应用地址空间。这避免了在主存和存储之间移动数据。
持久内存编程指南—乱译连载 (2.持久内存架构)
本章定义了持久内存及其特性,概述了CPU缓存的工作方式,并描述了为什么直接访问持久内存的应用程序必须承担冲刷CPU缓存的责任。我们主要关注硬件实现。用户库(如随PMDK提供的用户库)承担体系结构和硬件特定操作的责任,并允许开发人员使用简单的API来实现它们。后面的章节将更详细地描述PMDK库,并展示如何在应用程序中使用它们。
持久内存编程指南—乱译连载 (1.持久内存编程介绍)
本章介绍如何使用libpmemkv这样的高级api进行持久内存编程,从而向应用程序开发人员隐藏持久内存的复杂细节。使用持久内存可以允许比基于块的存储更细粒度的访问和更高的性能。我们建议尽可能使用最高级别、最简单的API,并且只有在必要时才引入低层持久内存编程的复杂性。