持久内存指令(PMDK)简介

简介: 持久内存指令(PMDK)简介

持久内存指令(PMDK)简介


PMDK函数


libpmem库主要特性是提供一种将脏数据刷写到持久内存的方法。常用的函数主要包括pmem_flushpmem_drainpmem_memcpy_nodrain。由于CPU CACHE内容向PM刷写的时机和顺序不受用户控制,所以需要特定指令进行强制刷写。pmem_flush的功能为调用CLWBCLFLUSHOPTCLFLUSH指令强制将CPU CACHE中内容(以cache line为单位)刷写到PM;指令发起后,由于CPU是多核,cache中内容到PM的顺序也不一样,所以还需要pmem_drain即调用SFENCE指令,确保CLWBs全部执行完成。如果pmem_flush调用的指令是CLFLUSH,则该指令中包含sfence,所以理论上不再需要调用pmem_drain,实际上如果是这个指令的话,pmem_drain什么也不做。

 上述讲述了CPU cache内容向PM刷写的函数。下面讲述内存拷贝,即从内存向PM拷贝数据。该功能由pmem_memcpy_nodrain完成,调用MOVNT指令(MOVMOVNTDQ),该指令拷贝不经过CPU CACHE,所以这个功能不需要flush。但是需要在结束的时候建立sfence确保所有数据都已经拷贝到PM


优势


1、write的IO机制

 

经历两次内核态切换,经过一次CPU COPY。


2mmap+memcpyIO机制


 

没有了内核态到用户态之间的切换。仍然需要一次CPU COPY


3PMDKIO机制


 

都是在用户态进行操作,同样需要经过一次CPU COPY,不过通过MOVNT指令,不经过CPU CACHE。另外通过单指令多数据进行copy。理论上比memcpy快。


附录


内存屏障作用、指令顺序:

https://blog.lovezhy.cc/2020/03/14/%E6%90%9E%E6%87%82%E5%86%85%E5%AD%98%E5%B1%8F%E9%9A%9C-%E6%8C%87%E4%BB%A4%E4%B8%8EJMM/

https://blog.csdn.net/maokelong95/article/details/80727952

 

目录
相关文章
|
编译器 C++
理解内存序,指令重排与内存模型
理解内存序,指令重排与内存模型
239 0
|
C语言
动态内存管理(malloc、free、calloc、realloc函数简介)
动态内存管理(malloc、free、calloc、realloc函数简介)
209 0
|
8月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
395 29
JVM简介—1.Java内存区域
|
8月前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
8月前
|
存储 编解码 安全
阿里云高性能企业级甄选Intel第八代计算型c8i、通用型g8i和内存型r8i实例简介
计算型c8i、通用型g8i和内存型r8i实例是阿里云推出的高性能企业级甄选Intel第八代云服务器实例,采用CIPU+飞天技术架构,搭载最新的Intel 第五代至强可扩展处理器(代号EMR),性能进一步大幅提升,同时拥有AMX加持的AI能力增强,并在全球范围率先支持TDX机密虚拟机能力,实现了AI增强和全面安全防护的两大特色优势。本文将为您介绍这三个实例规格的性能、适用场景及最新活动价格以及选择指南,以供选择参考。
351 18
|
10月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
752 20
|
存储 Java Linux
【高并发内存池】第一篇 项目简介及定长内存池
【高并发内存池】第一篇 项目简介及定长内存池
333 0
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
231 1
|
存储 人工智能 搜索推荐
【LangChain系列】第六篇:内存管理简介及实践
【5月更文挑战第20天】【LangChain系列】第六篇:内存管理简介及实践
577 0
【LangChain系列】第六篇:内存管理简介及实践

热门文章

最新文章

下一篇
oss云网关配置