日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

01-简述cache的基本概念和使用场景

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 01-简述cache的基本概念和使用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引流關鍵詞:緩存,高速緩存,cache, CCI,CMN,CCI-550,CCI-500,DSU,SCU,L1,L2,L3,system cache, Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、內存管理、頁表…

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈

目錄

        • 1、為什么要用cache?
        • 2、為什么要學習cache呢?
          • 2.1、 不同的Master硬件共享數據時
            • 2.1.1、軟件中維護內存一致性 – flush cache
            • 2.1.2、軟件中維護內存一致性 – invalid cache
          • 2.2、 不同的緩存策略的系統共享數據時
            • 2.2.1、軟件中維護內存一致性 – flush cache
            • 2.2.2、軟件中維護內存一致性 – invalid cache
        • 3、怎么去刷cache呢? (軟件維護cache的一致性)
          • 3.1、cache一致性指令介紹
          • 3.2、cache一致性指令的使用示例
          • 3.3、 操作系統中軟件維護cache一致性的API


1、為什么要用cache?

ARM 架構剛開始開發時,處理器的時鐘速度和內存的訪問速度大致相似。今天的處理器內核要復雜得多,并且時鐘頻率可以快幾個數量級。然而,外部總線和存儲設備的頻率并沒有達到同樣的程度。可以實現可以與內核以相同速度運行的小片上 SRAM塊,但與標準 DRAM 塊相比,這種 RAM 非常昂貴,標準 DRAM 塊的容量可能高出數千倍。在許多基于 ARM 處理器的系統中,訪問外部存儲器需要數十甚至數百個內核周期。

高速緩存是位于核心和主內存之間的小而快速的內存塊。它在主內存中保存項目的副本。對高速緩沖存儲器的訪問比對主存儲器的訪問快得多。每當內核讀取或寫入特定地址時,它首先會在緩存中查找。如果它在高速緩存中找到地址,它就使用高速緩存中的數據,而不是執行對主存儲器的訪問。通過減少緩慢的外部存儲器訪問時間的影響,這顯著提高了系統的潛在性能。通過避免驅動外部信號的需要,它還降低了系統的功耗

2、為什么要學習cache呢?

cache和我們軟件工程師有啥關系?其實在很多時候,硬件都會自動去維護cache和內存直接的一致性,這和我們軟件工程師都沒有太大的關系,所以很多時候我們也無需去理解cache的原理。但是實就是事實,不管你有沒有理解,你都是一直在使用的。做為一名底層的軟件開發者,有些時候,你也不得不去主動刷新cache,即軟件中維護內存一致性 。
那么一般什么時候需要主動刷cache呢(軟件中維護內存一致性) ? 以下便舉了幾個最常見的示例。

2.1、 不同的Master硬件共享數據時

例如一個core和一個crypto engine硬件,在共享數據的時候。需要軟件主動去invalid或flush cache的操作。

2.1.1、軟件中維護內存一致性 – flush cache

2.1.2、軟件中維護內存一致性 – invalid cache

2.2、 不同的緩存策略的系統共享數據時

例如在一個TEE + linux的系統中,且兩個系統有著不同的緩存策略。如linux kernel中是outer cacheable,TEE中是non-cacheable

2.2.1、軟件中維護內存一致性 – flush cache

2.2.2、軟件中維護內存一致性 – invalid cache

3、怎么去刷cache呢? (軟件維護cache的一致性)

ARM提供了操作cache的指令, 軟件維護操作cache的指令有三類:

  • Invalidation:其實就是修改valid bit,讓cache無效。
  • Cleaning: 清除cache中的data和TAG,這其實就是我們所說的flush cache,這里會將cache數據回寫到內存,并清除dirty標志
  • Zero:將cache中的數據清0.

那么一般什么時候需要軟件維護cache一致性呢?
(1)、當有其它的Master改變的external memory,如DMA操作
(2)、MMU的enable或disable的整個區間的內存訪問,
(3)、當不同緩存策略的系統使用同一塊內存通信時,如REE enable了mmu,TEE disable了mmu.

針對第(2)點,cache怎么和mmu扯上關系了呢?那是因為: mmu的開啟和關閉,影響了內存的permissions, cache policies

3.1、cache一致性指令介紹

查閱armv8/armv9的aarch64體系中,定義了如下的緩存一致性操作指令

指令太多,不太好記,然后我們總結如下:

按照指令,分為:

  • IC : 操作instruction cache
  • DC : 操作data cache

按照操作,分為以下三類:

  • Invalidation:其實就是修改valid bit,讓cache無效。
  • Cleaning: 清除cache中的data和TAG,這其實就是我們所說的flush cache,這里會將cache數據回寫到內存,并清除dirty標志
  • Zero:將cache中的數據清0.

Points的定義:
其描述的是操作cache的范圍

  • Point of Coherency (PoC) : instruction、data、TLB訪問一致性的點
  • Point of Unification (PoU) :agents訪問內存一致性的點
  • Point of Persistence (PoP) : 和FEAT_DPB、FEAT_DPB2 feature相關
  • Point of Deep Persistence (PoDP) :訪問memory一致性的點
3.2、cache一致性指令的使用示例

3.3、 操作系統中軟件維護cache一致性的API

在操作系統中,我們只需要調用相關的API即可,也無需牢記以上的維護cache一致性的命令。

比如在Linux Kernel 操作Cache的API如下所示:

linux/arch/arm64/mm/cache.S linux/arch/arm64/include/asm/cacheflush.hvoid __flush_icache_range(unsigned long start, unsigned long end); int invalidate_icache_range(unsigned long start, unsigned long end); void __flush_dcache_area(void *addr, size_t len); void __inval_dcache_area(void *addr, size_t len); void __clean_dcache_area_poc(void *addr, size_t len); void __clean_dcache_area_pop(void *addr, size_t len); void __clean_dcache_area_pou(void *addr, size_t len); long __flush_cache_user_range(unsigned long start, unsigned long end); void sync_icache_aliases(void *kaddr, unsigned long len); void flush_icache_range(unsigned long start, unsigned long end) void __flush_icache_all(void)

總結

以上是生活随笔為你收集整理的01-简述cache的基本概念和使用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。