持久記憶體指令(PMDK)簡介
持久記憶體指令(PMDK )簡介
PMDK函式
libpmem 庫主要特性是提供一種將髒資料刷寫到持久記憶體的方法。常用的函式主要包括 pmem_flush 、pmem_drain 、 pmem_memcpy_nodrain 。由於CPU CACHE 內容向 PM 刷寫的時機和順序不受使用者控制,所以需要特定指令進行強制刷寫。 pmem_flush 的功能為呼叫 CLWB 、 CLFLUSHOPT 或 CLFLUSH 指令強制將 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 指令( MOV 或 MOVNTDQ ),該指令拷貝不經過 CPU CACHE ,所以這個功能不需要 flush 。但是需要在結束的時候建立 sfence 確保所有資料都已經拷貝到 PM 。
優勢
1、write的IO機制
經歷兩次核心態切換,經過一次CPU COPY。
2 、 mmap+memcpy 的IO機制
沒有了核心態到使用者態之間的切換。仍然需要一次CPU COPY 。
3 、 PMDK 的IO機制
都是在使用者態進行操作,同樣需要經過一次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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2718980/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 應用PMDK修改WAL操作使之適配持久化記憶體持久化記憶體
- Java記憶體模型簡介Java記憶體模型
- Java記憶體模型 - 簡介Java記憶體模型
- 持久記憶體程式設計記憶體程式設計
- jvm堆記憶體和GC簡介JVM記憶體GC
- Redis持久化——記憶體快照(RDB)Redis持久化記憶體
- 記憶體檢查指令碼記憶體指令碼
- 關於持久記憶體(PMem)你知道多少?記憶體
- 記憶體回收介紹記憶體
- CUDA記憶體介紹記憶體
- RabbitMQ持久化機制、記憶體磁碟控制(四)MQ持久化記憶體
- 針對持久記憶體的後寫日誌記憶體
- Redis系列:RDB記憶體快照提供持久化能力Redis記憶體持久化
- 持久記憶體-RDMA讓遠端資料不再遠記憶體
- Redis基礎篇(四)持久化:記憶體快照(RDB)Redis持久化記憶體
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- Java虛擬機器系列之Java記憶體結構簡介Java虛擬機記憶體
- io記憶體,io埠,彙編 in out 指令記憶體
- volatile記憶體可見性和指令重排記憶體
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- HTML 指令碼簡介HTML指令碼
- Bash 指令碼簡介指令碼
- 簡單VC記憶體檢測記憶體
- 簡單的記憶體取證記憶體
- 計算機記憶體管理介紹計算機記憶體
- 適用於大型記憶體資料庫的 Amazon EC2 大記憶體 U7i 例項簡介記憶體資料庫
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- MHA常用指令碼簡介指令碼
- Verilog 編譯指令簡介編譯
- JVM中記憶體和GC的介紹JVM記憶體GC
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- 記Java中有關記憶體的簡單認識Java記憶體
- 傲騰持久記憶體如何為資料賦能,加速應用落地?記憶體
- 手機記憶體都有哪些?宏旺半導體分享手機記憶體發展簡史記憶體
- Linux上執行記憶體中的指令碼和程式Linux記憶體指令碼
- iOS彙編教程(六)CPU 指令重排與記憶體屏障iOS記憶體
- PMDK優勢