持久内存指令(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

 

目录
相关文章
|
3月前
|
编译器 C++
理解内存序,指令重排与内存模型
理解内存序,指令重排与内存模型
44 0
|
4月前
|
存储 Java Linux
【高并发内存池】第一篇 项目简介及定长内存池
【高并发内存池】第一篇 项目简介及定长内存池
76 0
|
3月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
124 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
8月前
|
缓存 安全 Java
volatile底层的实现原理:volatile关键字的作用、内存模型、JMM规范和CPU指令
volatile底层的实现原理:volatile关键字的作用、内存模型、JMM规范和CPU指令
122 0
|
9月前
|
存储 安全
4.3 x64dbg 搜索内存可利用指令
发现漏洞的第一步则是需要寻找到可利用的反汇编指令片段,在某些时候远程缓冲区溢出需要通过类似于`jmp esp`等特定的反汇编指令实现跳转功能,并以此来执行布置好的`ShellCode`恶意代码片段,`LyScript`插件则可以很好的完成对当前进程内存中特定函数的检索工作。在远程缓冲区溢出攻击中,攻击者也可以利用汇编指令`jmp esp`来实现对攻击代码的执行。该指令允许攻击者跳转到堆栈中的任意位置,并从那里执行恶意代码。
118 0
|
11月前
|
存储 缓存 索引
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
64 0
|
11月前
|
前端开发 rax
实验一:查看CPU和内存,用机器指令和汇编指令编程
实验一:查看CPU和内存,用机器指令和汇编指令编程
155 0
|
存储 缓存 数据库
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
92 0
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
|
安全 Java 编译器
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序
|
存储 缓存 Java
关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
289 0