00-深入学习cache
序言
帶著問題去學(xué)習(xí),關(guān)于cache的一些思考:
1、L1/L2/L3 cache到底在哪里?L1/L2/L3 cache分別都是多大?
2、L1/L2/L3 cache的組織形式都是怎樣的?n路組相連?
3、你見過VIVT的cache嗎?你為什么要學(xué)習(xí)VIVT的cache? 非常干擾你對cache的理解,還不如不學(xué)呢.
4、那么cache是VIPT還是PIPT? 還是在一個core中既有VIPT,也有PIPT?
5、你要學(xué)習(xí)MESI的原理嗎?你能記得住嗎?你是不懂MESI,還是不懂cache架構(gòu)?
6、MOESI又是啥玩意?現(xiàn)在主流的core是MESI,還是MOESI?
7、MESI僅僅是一個協(xié)議,總得有硬件來執(zhí)行這個協(xié)議,硬件是誰?
8、MESI這個協(xié)議有4個狀態(tài),這4個狀態(tài)記錄在哪里?
9、L1/L2/L3 cache中,或者說core cache/cluster cache中,哪些cache的維護遵守了MESI協(xié)議,哪些沒有遵守?為什么這樣設(shè)計?
10、cache line中的data是多少個字節(jié)? 在分析問題時,你為什么總是按照條件分析,16bytes的cache line是怎樣的,64bytes的cacheline是怎樣的?難道你不知道,現(xiàn)在主流的arm core的cache line全部都是64bytes?
11、cache的TAG是什么玩意,里面都有什么?別說cache TAG是物理地址?
12、cache line中又都有什么? 為什么沒有index?
13、L2 cache到底是在core中,還是在cluster中?
14、假設(shè)一塊內(nèi)存配置成了non-cacheable,為什么就不緩存到cache了?
15、頁表entry的屬性中定義了cache的緩存策略,那如果disable mmu后,那么cpu讀寫內(nèi)存時候的緩存策略是什么?
16、做為一名軟件工程師,對于L1/L2/L3 cache的緩存策略,哪些可以修改?哪些是硬件定死的不可以修改?
而這些的替換策略又都是怎樣的?
17、什么是inclusive cache? 什么是exclusive cache? Strictly和Weakly呢?
18、一些概念的理解,如CCI、SCU、DSU、ACE、CHI ?
19、如何配置一個頁面的cacheable屬性? 如何配置頁表的cacheable屬性?
前言
做為一名底層安全工程師、一名一線支持客戶的FAE,工作的內(nèi)容涉及到TF-A、TEE、TA、Linux Kernel、Linux native程序等眾多模塊,也會涉及到一些硬件模塊driver。在這些不同的硬件或系統(tǒng)軟件之中,有著不同的memory屬性的配置,不同的緩存策略,那么我們在這多硬件多軟件通過share memory通信時,就會遇到各種各樣的問題,其實很多時候,也都是客戶的靈魂一問,為了給客戶一個專業(yè)的感覺,身為FAE也不得不去弄懂底層深層次的原理…
本人不是什么專家,更不是什么的大佬,也就是看了一些arm文檔,加上自己的理解,然后總結(jié)出如下文章,當(dāng)然我在總結(jié)的時候,一切都以官方資料為準(zhǔn),盡量不瞎說不亂說,有些查不到的資料我求證了一些ASIC專家。其實cache同其它模塊(如MMU、異常、gic…)相比,cache應(yīng)該算上最難的,不過好在它的大多數(shù)行為都是硬件幫我們做好了,所以我們軟件就簡單了,但是越是硬件自動的行為,對于我們軟件工程師理解起來就會吃力,因為看不到資料看不到設(shè)計,很多都得靠猜。
最后,希望這系列文章,能夠?qū)Υ蠹矣兴鶐椭:煤脤W(xué)習(xí)、天天向上,卷起來同志們。
說明:
- 本系列所講述的,都是以armv8/armv9架構(gòu)位基準(zhǔn),如有涉及執(zhí)行狀態(tài),則是aarch64. 如有涉及具體core,則是A710和A53
- 大多數(shù)內(nèi)容來自arm官方文檔、少部分咨詢了ASIC同事,再加上部分自己的理解…
總結(jié)
以上是生活随笔為你收集整理的00-深入学习cache的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写一篇酷炫的博文(博文列表中展现字幕
- 下一篇: 05-cache相关的系统寄存器