1.前言
關於存儲系統體系架構,可以概述如下:
存儲系統體系結構的形式 |
VMSA |
存儲屬性 |
![]() |
2. 存儲系統體系結構
2.1. 地址空間
指令地址空間溢出 |
指令地址計算((address_of_current_instruction) + (size_of_executed_instruction))超過0xFFFF FFFF FFFF FFFF,PC變成不可知 |
2.2 Cache支持
- Caches的一般行為
(1)Cache中已解鎖的項不會一直駐留在cache;
(2)Cache中鎖定的項會保證會一直在cache中;
(3)任何時候具有cacheable屬性的內存在當前異常級別或更高異常級別都可以分配到cache;
(4)不具有cacheable屬性的內存不會分配到cache;
(5)一個cache項的釋放會寫回內存;
- Cache identification
Cache維護指令
|
(1) 影響整個cache,如IC IALLU; (2) 對某個地址的操作,如IC IVAU; (3) 對set/way的操作,如DC ISW |
Cache identification registers
|
(1) Cache type寄存器(CTR_EL0) 定義了最小的指令cache line長度; 定義了最小的數據cache line長度; L1 Cache索引和tag策略 (2) single cache level ID寄存器(CLIDR_EL1) 實現了哪幾級cache; 待續 (3) single cache size selection寄存器 待續 (4) cache size identification寄存器 是否支持寫透、回寫、讀分配和寫分配; 映射方式、sets/ways等 |
- Cacheablity,cache分配,cache瞬態
Cacheablity |
cacheablity只適用於normal memory,內存位置可定義為內部cache(如各PE內部的L1)或外部cache(各PE共享的L2);所有的device memory都作為non-cacheablity; cacheablity屬性包含non-cacheablity;寫透;寫回。 |
Cache allocate hints |
待續 |
Cache transient hints |
待續 |
- Enable/disable內存的caching訪問
- Reset的cache行為
(1)reset到自定義狀態的所有cache可能是未知的;
(2)cacheablity控制域強制所有內存作為non-cacheablity
(3)在cache被使能前,cache初始化時必須被invalidate
(4)如(2)所述,reset所有的內存都被作為non-cacheablity,如果仍然允許cahce hit,則需:(1)提供確保cache正確初始化的機制;(2)清楚記錄cache初始化;
(5)ARM建議任何時候需要無效cache時都要基於ARMV8 cache維護指令???
- Non-cacheable訪問和指令cache
- 關於ARMV8的cache維護
術語 |
Level:cache的級別; |
Set:由多個連續的cache line組成一個組(set); Way: 每個set中沖突的備選表項的數目; |
|
(1)Clean:為確保更新到cache中的內容flush到內存; (2)Invalidate:確保內存中的修改,能夠重新加載到cache; (3)Clean and invalidate:clean指令后跟一個invalidate指令,針對的是同一訪問地址; |
|
(1)PoU(Point of Unification):對所有的PE可以觀察到一致拷貝的點; (2)PoC(Point of Coherence):對系統中所有的agent可以觀察到一致拷貝的點; |
|
(1)LoC(Level of Coherence):定義了 整個系統 clean或invalidate PoC時所要clean或invalidate的最后一級cache級別號,如:PoU為Level4,則LoC為3,執行clean和invalidate后會清空L1,L2, L3; (2)LoUU(Level of Unification, uniprocessor):定義了 PE clean或invalidate PoU時所要clean或invalidate的最后一級cache級別號; (3)LoUIS(Level of Unification, Inner Shareable):定義了 內部共享域 clean或invalidate PoU時所要clean或invalidate的最后一級cache級別號; |
|
ARMV8 cache層級抽象 |
操作VA的cache維護指令 |
操作set/way的cache維護指令 |
- Cache維護指令
指令cache維護指令 |
|
數據cache維護指令 |
|
EL0 cache維護指令的使能配置 |
|
Cache維護指令的行為 |
沒有限制cache維護指令的行為,每個cache位置都可能被清空或無效 |
操作VA到PoU的影響 |
會影響共享域內的其它PE |
所有set/way維護指令的影響 |
只影響到運行指令的PE |
虛擬化和安全性維護指令的影響 |
每個安全狀態有自己的物理地址空間,cache與物理地址關聯 |
邊界條件 |
維護指令會強制所有的內存訪問為non-cache??? |
數據和指令cache維護指令的執行順序和完成 |
|
運行cache維護指令 |
|
- Data cache zero指令
- cache lockdown
一個cache lock 可保證cache 中的內容一直被保留
- System level caches
不是體系結構定義的cache,不受體系結構定義的維護指令管理,主要包括三類: |
|
- 分支預測
ARMV8沒有定義任何分之預測指令,如果體系結構中分支預測指令對所有agent是可見的,則cache維護指令也要與之適配 |
2.3 External abort
External abort |
存儲系統中MMU和debug邏輯檢測到的錯誤除外的其它錯誤,主要位於SOC外部 |
取指abort |
|
Data read/write abort |
|
External abort分類 |
|
奇偶校驗錯誤/ECC錯誤報告 |
|
3. 參考文檔
[1] DDI0487A_k_armv8_arm_iss10775.pdf