《ARM Architecture Reference Manual ARMv8-A》里面有Memory層級框架圖,從中可以看出L1、L2、DRAM、Disk、MMU之間的關系,以及他們在整個存儲系統中扮演的角色。
涉及到的相關文檔有:
- 《ARM Architecture Reference Manual ARMv8-A》:E2 The AArch32 Application Level Memory Model和G3 The AArch32 System Level Memory Model兩個章節,從總體架構上介紹了ARMv8-A Memory系統。
- 《Cortex-A53 TRM》:6 Level 1 Memory System、5 Memory Management Unit、7 Level 2 Memory System三個章節介紹了MMU/L1/L2三個模塊在A53上的實現。
具體到MMU:
- 《MMU-500 TRM》:MMU-500技術參考手冊。
- 《ARM SMMUv2》:System MMU 架構規格 version 2.0。
具體到L2:
- 《L2C-310 TRM》:L2控制器技術參考手冊。
在Linux內核中查看L1/L2/L3緩存:
1 lscpu 2 ... 3 L1d cache: 32K 4 L1i cache: 32K 5 L2 cache: 256K 6 L3 cache: 6144K 7 ...
或者讀取節點:
1 cat /sys/devices/system/cpu/cpu0/cache/indexx/size 2 cat /sys/devices/system/cpu/cpu0/cache/indexx/level
MMU-500組成
- VA:Virtual Address
- PA:Physical Address
- IPA:Intermediate Physical Address
MMU-500是系統級的存儲管理單元,它基於自身寄存器和轉換表中的地址映射和存儲器屬性,將虛擬地址轉換成物理地址。
將這個轉換過程分為兩個階段:
- Stage 1 - 將輸入的VA轉換成PA或者IPA輸出。
- Stage 2 - 將IPA轉換成PA。
- 或者結合Stage 1和Stage 2將輸入的VA->IPA->PA。
MMU-500可以將 轉換表查找結果緩存到TLB中。
MMU-500包含一下主要部件:
- TBU(Translation Buffer Unit) - 包含緩存頁表的TLB,MMU-500給每個Master配置了一個TBU,專屬於Master。
- TCU(Translation Control Unit) - 控制和管理地址轉換,一個MMU-500僅包含一個TCU。
- Interconnect - 多TBU到TCU之間的連接。
Master可能包括GPU、Video engines、DMA Controller、LCD Controller、Network Controller等。
參考
關於CPU Cache -- 程序猿需要知道的那些事 • cenalulu's Tech Blog
閱讀ARM Memory(L1/L2/MMU)筆記_weixin_34174132的博客-CSDN博客
關於TCM
TCM(Tighyly Coupled Memory,緊耦合內存)是一個固定大小的RAM,緊密地耦合至處理器內核,提供與cache相當的性能。
相比於cache的有點是,程序代碼可以精確地控制什么函數或什么代碼放在哪兒。當然TCM永遠不會被踢出主存儲器,他會有一個用戶預設性能,而不是cache那樣是統計特性的提高。
TCM對於以下幾種情況的代碼是非常有用、也是需要的:可預見的實時處理(中斷處理)、時間可預見(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代碼(編解碼功能)。
隨着cache大小的增加以及總線性能的規模,TCM將會變得越來越不重要,但是他提供了一個讓你權衡的機會。
如何使用TCM?
在支持TCM的處理上,包含頭文件#include <asm/tcm.h>。
使用__tcmdata、__tcmconst、__tcmfunc、__tcmlocalfunc修飾符,將變量、函數放到特定的tcm段中。
還可以使用tcm_alloc/tcm_free申請釋放內存。
《對ARM緊致內存TCM的理解》- 關於TCM的介紹,以及和Cache相比的優劣。
《內核中tcm(arm)與sram代碼》- 如何使用TCM。