美文网首页
持久内存(3):PMDK开发库介绍

持久内存(3):PMDK开发库介绍

作者: 朝朝Mumu | 来源:发表于2021-06-03 22:36 被阅读0次

编写基于持久内存的软件听上去是一件非常复杂的事情,是的没错,研发或者测试过持久内存代码的人都可以证明这一点。因此社区开源了持久内存开发套件(PMDK)。看上去和我们所熟悉的JDK、SDK是一类东西。PMDK就是这样一个库,适用于所有的持久内存(厂商中立),简化开发并解决一些常见挑战。

PMDK 的全称是 Persistent Memory Development Kit,它包含了 Intel 开发的一系列旨在 方便非易失性内存的应用开发的函数库和工具。实际上,PMDK 的 github仓库中包含了 libpmem、libvmem、libpmemblk、libpmemlog、libpmemobj、libpmempool、libvmmalloc 等很多函数库。

PMDK 包含了一系列的的函数库和工具,它们分别对应不同的应用场景。从易用性和收益两个维度分别来 看,随着函数库使用难度的增加,采用它所获得的性能也有对应的提升。


PMDK lib

持久内存开发套件 (PMDK), 前身为NVML,是持续丰富的开发库和工具的集合。这些库在 Linux 和 Windows 上进行调整和验证后,以这些操作系统的 DAX 功能(直接访问)为基础,允许应用程序访问持久内存作为内存映射文件,如SNIA NVM 编程模型所述。

nvm编程模型

重要原则

只要满足应用的需求,就尽可能使用最高的抽象级别。
PMem可以更快的速度执行小型数据写入!
可通过直接访问(DAX I/O)和标准文件系统 I/O路径访问pmem。

  • 持久内存可以透明地被访问,PMDK关注内存式访问,应用管理字节可寻址的数据结构。
  • pmdk关注持久性的用例,因而必须保证pmem中的数据结构不会受到系统崩溃和断电的影响。
  • 对于fsdax而言,文件系统用于查找持久内存文件和进行权限检查,随后它就会离开应用的数据路径。
  • 因为pmem性能可能比DRAM慢,因此应用程序应决定将哪些数据保存在DRAM、PMem和硬盘中。
  • 工作数据集的大小在DRAM和PMem的容量范围内有利于显著提升性能,无需分页或网络传输。
  • 持久内存可字节寻址,按需更新,不会产生读取-修改-写入的开销。

库简介

  • libmemkind
    libmemkind库是易失性的库,是构建在jemalloc之上的用户可拓展堆管理器,支持控制内存特性以及在不同类型的内存之间堆堆进行分区。

  • libvmemcache
    libvmemcache是一种可嵌入式的轻量级内存缓存解决方案,可以通过高效、可拓展的内存映射,充分利用大容量存储,例如支持DAX的持久内存。这是一个单独的开源项目。

  • libvmem
    libvmem是libmemkind的前身,目前不再使用了。

  • libpmem
    libpmem是一种低级别C库,可针对操作系统呈现的原语提供基本抽象功能。它可以自动检测平台中的功能。

  • libpmemobj
    libpmemobj库提供事务对象存储,为持续内存编程提供内存分配、事务和常规功能。初识持久内存的开发人员可能希望从此库开始旅程,这个库很重要。

  • libpmemobj-cpp
    这个库也称为libpmemobj++,是一种C++ header-only 库,可以使用C++元编程特性,提供更简单更不易出错的接口。

  • libpmemkv
    libpmemkv是为持久内存而优化设计的通用嵌入式本地键值存储。它易于使用,且附带许多不同的语言集成,包括C++和javascript。该库还有面向不同存储引擎的可插拔后端插件。

  • libpmemlog
    libpmemlog能够实现持久内存仅可追加的日志文件(append-only log file),且支持断电保护操作。

  • libpmemblk
    仅用于需要简单固定数据块数组。

工具和命令行

  • pmempool
    用于管理和离线分析持久内存池的工具。具备很多功能,可用在应用程序的整个生命周期。
  • pmemcheck
    适用于使用libpmemobj、libpmem或者libpmemobj-cpp开发应用程序的情况,可以帮助我们查找持久应用程序中的常见漏洞。建议将pmemcheck测试加入PMDK的持续集成系统中去。
  • pmreorder
    可帮助检测持久应用程序的数据结构一致性问题。

相关文章

  • 持久内存(3):PMDK开发库介绍

    编写基于持久内存的软件听上去是一件非常复杂的事情,是的没错,研发或者测试过持久内存代码的人都可以证明这一点。因此社...

  • NVM代码总结

    Optane非易失性内存代码实测: 使用PMDK中的obj封装好的库进行:

  • Introducing PMDK into PostgreSQL

    将PMDK引入PostgreSQL 持久性内存(PMEM)具有快速、非易失和可字节访问的特性,能够通过load/s...

  • Redis RDB持久化和AOF持久化

    RDB持久化 Redis是内存数据库,数据库状态都在内存里边,需要RDB持久化功能将内存中的数据库状态保存到磁盘里...

  • redis持久化rdb及aof

    介绍 ​ 持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢...

  • 3. Spring Boot SQL Databases

    说明 嵌入式数据库使用内存中的嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序...

  • Redis中的持久化

    之前有简单介绍过Redis的基本介绍,这里详细说下Redis的持久化机制 引言 Redis是内存数据库,数据全部在...

  • Redis介绍、安装及基本操作

    Redis概述 1.1、Redis介绍 redis是一款基于内存的缓存系统或者数据库。支持持久化。 redis支持...

  • Redis持久化

    Redis持久化 一、持久化简介 因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法...

  • redis笔记(四)redis持久化

    redis持久化 Redis持久化机制:redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中...

网友评论

      本文标题:持久内存(3):PMDK开发库介绍

      本文链接:https://www.haomeiwen.com/subject/aahteltx.html