今天來做個文件的總結吧!
這篇文件 Cache and TLB Flushing Under Linux
描述的是各式的 flushing API、以及各個 API 所使用的時機和情境,並提供各個架構實作這些 API 的語意;舉例來說:
flush_tlb_all
: 在 riscv 底下的實作是 sfence.vma
一個由 ISA 定義的 s mode 指令,用來提供類似 memory barrier 的語意,並且在 ISA 規格中也提到 The SFENCE.VMA is used to flush any local hardware caches related to address translation
(privileged spec draft 1.12)。flush_cache_mm
:在 riscv 中,cache 相關的操作是由 platform 自行定義的,所以這部分也會交由 platform 自己訂、自己實作,像是 csky
就把它實作為自己平台上的 dcache
相關操作。這篇文件分為 4 個部分,分別描述了 TLB
、cache
、cache aliasing 處理
、IO 處理
相關的 flushing API,藉由這樣的分類分項,這幾天也重新複習了 TLB、cache 相關的計算機結構基礎知識,雖然說還沒能將整篇文件的內容理解透徹,但是藉由這樣的複習,倒也回答了一些自己的疑惑。(( 還有很多懸而未決的疑問就是了XD
TLB
: MMU(Memory Management Unit) 中的一個硬體元件,用來 cache 分頁表中的資訊,以達到快速的 VA->PA 轉換。
cache
: 快取是用來 cache 主記憶體上的資料,主要也是用來提升資料存取的效能。
[ tag | index | block or line offset | byte offset ]
以上是目前複習並且有整理到的內容,尚未釐清的部分,主要是文件中描述的情境,以及一些記憶體管理子系統(mm subsystem) 所用到的資料結構和 API,例如:
struct mm_struct
、struct vm_area_struct
vmalloc
、vmap
kernel offset mapping
、COW page
Cache and TLB Flushing Under Linux
文件的閱讀,就先到這裡告一個段落!