NVDIMM原理與應用之二:X86 Cache 管理的幾種模式
X86 Cache 管理的幾種模式
為了應對不同的應行場景,X86體系結構提供了多種維護cache一致性的模式和硬體機制。這些應用模式包括write back/write combing/write through/uncache,而和此相關的硬體包括store buffer, write combing buffer, MMTR,CR暫存器等。準確理解上面四種cache模式的差異,瞭解實現過程中的涉及到的不同硬體的模組,能夠幫助工程師加深對系統結構的認識,從而能夠針對 具體的應用,比如NVDIMM/NTB/SSD等,選擇最合適的 等裝置的cache模式。
1. store buffer
為了提高效能,允許記憶體寫操作在真正執行完之前指令能夠返回,X86處理器能夠把對記憶體的寫操作都臨時儲存到一個store buffer裡面去。這個store buffer經常和指令執行部件關聯在一起,它能夠暫存對記憶體的讀寫,這樣處理器就不用等真正的讀寫返回了。此外處理器還能自動保證序的正確性。當出現下面的情況下,硬體自動把store buffer裡面的東西drain to memory:
-
中斷;
-
記憶體屏障;
-
LOCK操作;
-
MFENCE/SFENCE;
-
IO操作
-
順序指令
2.catch line
當處理器接受到從記憶體讀的運算元剛好是可以cache的時候,處理器會從記憶體中讀出長為cache line的資料到物理的cache line上去。
3.write combing/write through/write back/write protect的區別
3.1 write combiling:
讀寫沒有cache,只是先寫到了writing combing buffer,硬體不會自己維護memory一致性,對一致性有要求的軟體必須留意到寫往可WC的記憶體會出現延遲,並且如果對一致性有要求必須清空write combing buffer。注意write combing buffer 不同於L1/L2/L3 cache和store buffer,它只在WC模式下才會用到。它會在下面的情況下被硬體清空:
-
SFENCE/MFENCE指令
-
CPUID指令;
-
讀寫uncache的記憶體區域;
-
中斷;
-
執行LOCK指令
在write combiling模式下,猜測讀是允許的, 寫操作可能會延遲,因為它可能會被合併到writing bffer裡面去,直到後面的序列化指令例如(SFENCE,MFENCE,CPUID, read/write uncached memory,an interrupt, or LOCK instruction)出現。這種write combining 模式適合視訊記憶體空間。
3.2 write though
讀寫可合併;寫命中時:既到cache,又到記憶體,然後返回;寫回記憶體時,invalid的cache沒有catch fill,valid的cache有catch fill或者被invalid;
3.3 write back
讀寫可合併;寫命中時:先到cache, 在需要釋放它的cache line(比如cache full)時再寫回記憶體;寫不命中時,到記憶體,然後進行cache fill。
3.4 Write protect
寫擴大到系統匯流排,並導致匯流排上的所有處理器相應的cache line都被invalid.
3.5 uncached
如果用unreached模式,只需要disable cache就可以,下面的步驟可以disablecache:
-
設定CR0上的CD為1, NW flag = 0;
-
disable MTRRs 且設定預設的記憶體型別是uncached(或者用MTRR設定所有的記憶體區域是uncache的)。
注意MTRR和OS 頁表/頁目錄表之間的優先順序及關係:
BIOS設定了好全域性的MTRR表格之後,核心還是可以通過頁表和頁目錄表進行修改。
為了維護cache一致性,需要用wbinvd命令,寫回並無效所有的L1/L2/L3 Cache。
4. WBINVD和CFLUSH的區別
WBINVD:寫回所有內部cache的有改動的cache line,然後無效L1/L2/L3級cache的內容
CFLUSH:把指定cache line裡面的資料flush到記憶體,然後釋放相應的cache line,這條指令提供了使用者顯示地釋放cache空間的介面,特別當使用者確定當前cache裡面的內容暫時不會再訪問到的時候可以用CFLUSH來釋放cache line給其他資料用。
本文轉自儲存之廚51CTO部落格,原文連結:http://blog.51cto.com/xiamachao/1746123 ,如需轉載請自行聯絡原作者
相關文章
- 微軟BI 之SSIS 系列 - Lookup 元件的使用與它的幾種快取模式 - Full Cache, Partial Cache, NO Cache...微軟元件快取模式
- 設計模式應用之Observer模式(2)設計模式Server
- 設計模式應用之Observer模式(1)設計模式Server
- 設計模式應用之Template method模式設計模式
- ESB的幾種模式模式
- CTI的典型應用之二 (轉)
- 建立物件的幾種模式物件模式
- Iterator模式的幾種用法模式
- 單例模式的幾種實現與在Android原始碼中的應用單例模式Android原始碼
- ERP原理 | 業財一體化的幾種架構模式架構模式
- Oracle Buffer Cache原理總結(二)Oracle
- 淺談常用影片加密原理及加密的幾種應用形式加密
- oracle物理DG管理-redo資料傳輸,應用與三種模式Oracle模式
- PPT應用之經驗與技巧
- 常見的幾種設計模式設計模式
- Docker幾種網路模式Docker模式
- 清除浮動的幾種方式及其原理
- hook的幾種方式及原理學習Hook
- 使用快取(Cache)的幾種方式,回顧一下~~~快取
- karma的基礎應用之與fis結合
- Buffer cache 的調整與優化(二)優化
- Guava Cache 原理分析與最佳實踐Guava
- 【11gR2新特性】result cache 的三種模式模式
- 分散式中幾種服務註冊與發現元件的原理與比較分散式元件
- spring注入bean的幾種策略模式SpringBean模式
- Thrift server端的幾種工作模式分析Server模式
- laravel模板中生成URL的幾種模式Laravel模式
- java幾種代理模式的實現方式Java模式
- Guava 原始碼分析(Cache 原理【二階段】)Guava原始碼
- LVS基礎-四種模式原理與實現模式
- Vim常見模式有幾種?模式
- 6.2.初識Flutter應用之路由管理Flutter路由
- Buffer Cache 原理
- 實現單例模式的 9 種方法,你知道幾種?單例模式
- Go 語言中常見的幾種反模式Go模式
- 幾種常用設計模式的簡單示例設計模式
- 模式識別的幾種基本演算法模式演算法
- iOS元件化常用的幾種構建模式iOS元件化模式