<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Armv9 Cortex-A720的L1 System memory簡析

冬至子 ? 來源:Arm精選 ? 作者:baron ? 2023-10-24 15:23 ? 次閱讀

思考

  • L1 System memory 和 L1 Cache 是什么關系?
  • L1 指令 cache 禁用時,指令 cache 就真的不會緩存了嗎?此時還會出現緩存不一致的情況嗎?
  • L1 data cache 禁用時,L1 data cache 就真的不會緩存了嗎?此時還會出現緩存不一致的情況嗎?
  • 在下電的時候,cache 有什么自動的行為?
  • 有沒有 invalidate the entire data cache 的操作?那操作系統中的 invalidate_all_cache 是如何實現的?
  • 什么是 Branch Target Buffer (BTB)?
  • 什么是 Write streaming mode?軟件怎樣可以影響到 Write streaming mode 的行為?
  • 有關 cache 的 refill,如果 L1 MISS,那么 L1 會發生 refill 嗎
  • Armv9 中的原子指令,和 cache 有啥關系?
  • Exclusive 機制和 cache 有啥關系?
  • 數據預取的作用是什么?數據預取有哪些指令?
  • 執行 memset() 函數清空一大塊內存的時候,這些地址數據都會進 cache 嗎?

本節課我們將講述 Armv9 Cortex-A720 的 L1 System memory.

7 L1 instruction memory system

Cortex-A720 的 L1 指令內存系統用于提取指令并預測分支。它包括 L1 指令緩存、L1 指令 Translation Lookaside Buffer(TLB)以及分支預測單元。L1 指令內存系統向解碼器提供指令流。為了提高整體性能并降低功耗,L1 指令內存系統使用動態分支預測和指令緩存。

下圖顯示了 L1 指令內存系統的特性。

image.png

L1 指令 TLB 也位于 L1 instruction memory system 中,它是內存管理單元(MMU)的一部分。

7.1 L1 instruction cache behavior

在 reset 時,除非 core 電源模式初始化為 “Debug Recovery”,否則 L1 指令緩存將自動失效。在 Debug Recovery 模式下,L1 指令緩存不起作用。

L1 instruction cache 的禁用

禁用 L1 instruction cache 對 L1 指令緩存的操作沒有影響。即使在禁用狀態下,指令仍可以緩存在 L1 指令緩存中并從中提取。軟件必須考慮 Non-cacheable accesses 以確保正確的行為。

如果禁用了 L1 instruction cache,那么由指令提取引起的所有內存訪問都將使用 Non-cacheable accesses。這意味著指令提取可能與同一核心或其他核心中的緩存不一致。軟件必須考慮這一點,執行適當的緩存維護操作。

L1 instruction 維護

緩存維護操作可以在任何時候發生,不管 L1 的狀態是禁用還是啟用。

7.2 L1 指令緩存的推測性內存訪問

指令提取是推測性的,流水線中可能存在多個未完成的分支。

代碼流中的分支指令或異??梢詫е铝魉€刷新,丟棄當前已提取的指令。

在指令提取時,具有 device memory 被視為 non-cacheable normal memory。為了防止指令提取,設備內存頁面必須標記為翻譯表描述符屬性位 "Xecute Never"(XN)。設備和代碼地址空間必須在物理內存映射中分離。這種分離防止了在禁用地址轉換時對讀取敏感設備的推測性提取。

如果啟用了 L1 指令緩存并且指令提取在 L1 指令緩存中未命中,那么它們仍然可以在 L1 數據緩存中查找。

然而,無論數據緩存是否啟用,查找都不會導致 L1 數據緩存重新填充 (refill)。該行僅 refill allocated 在 L2 緩存中,前提是 L1 指令緩存已啟用。

7.3 程序流預測

Cortex-A720 核包含程序流預測硬件,也稱為分支預測。分支預測提高了整體性能并增強了功耗效率。

當內存管理單元(MMU)啟用當前異常級別時,程序流預測被啟用。如果禁用程序流預測,那么所有已執行的分支都會產生與清除流水線相關的動作。如果啟用程序流預測,則它會預測是否要執行條件或無條件分支,如下所示:

  • 對于條件分支,它預測是否要執行分支以及分支轉到的地址,即分支目標地址。
  • 對于無條件分支,它僅預測分支目標地址。

程序流預測硬件包含以下功能:

  • 存儲以前已執行分支的分支目標地址的分支目標緩沖器 Branch Target Buffer (BTB)
  • 使用以前的分支歷史的分支預測(BP)預測器
  • 返回堆棧,包括嵌套子例程返回地址
  • 靜態分支預測器
  • 間接分支預測器

預測和非預測指令

  • 序流預測硬件預測所有分支指令,包括:
  • 條件分支
  • 無條件分支
  • 返回指令
  • 間接分支

以下指令不會被預測:

  • 異常返回指令(包括 ERET,ERETAA,ERETAB)
  • svc 指令
  • hvc 指令
  • smc 指令

返回棧

返回棧存儲了過程調用指令的返回地址。此地址應與這些指令由 Link 寄存器(X30)寫入的值相等。

以下任何指令都會導致壓棧:

  • BL
  • BLR
  • BLRAA
  • BLRAAZ
  • BLRAB
  • BLRABZ

以下任何指令都會導致出棧:

  • RET
  • RETAA
  • RETAB

8 L1 data memory system

Cortex-A720 的 L1 數據內存系統執行加載和存儲指令。它處理內存一致性請求以及特定指令,如原子操作、緩存維護操作和內存標記指令。L1 數據內存系統包括 L1 數據緩存和 L1 數據 Translation Lookaside Buffer(TLB)。

下表顯示了 L1 數據內存系統的特性。

image.png

L1 數據 TLB 也位于 L1 數據內存系統中,它是內存管理單元(MMU)的一部分。

8.1 L1 數據緩存行為

除非將核心電源模式初始化為 Debug 恢復模式,否則 L1 數據緩存將在重置時自動失效。在 Debug 恢復模式下,不能保證緩存是否正常運行,因此不應啟用。

沒有使整個 data cache 失效的操作 (invalidate the entire data cache)。如果軟件需要這個功能,那么必須通過循環執行的單獨失效操作(通過 set/way 指令)來構建它。DC CISW 指令執行目標 set/way 的清除和失效操作。

禁用 data cache 行為

如果禁用數據緩存行為,則:

  • 由于加載指令而導致的 L2 或 L3 緩存不會分配新的行。
  • 對可緩存內存的所有加載和存儲指令都視為 Non-cacheable。
  • 數據緩存維護操作繼續正常執行。

L1 數據緩存和 L2 緩存不能獨立禁用。當一個核心禁用 L1 數據緩存時,由該核心發出的可緩存內存訪問將不再在 L1 或 L2 緩存中緩存。在多個 core 之間 cache 的維護操作,使用 Modified Exclusive Shared Invalid (MESI) 協議

緩存索引的確定方式意味著物理地址(PA)和組編號之間沒有直接關系。不能使用假設 PA 和組編號之間存在關系的有針對性的操作。要刷新整個緩存,必須根據緩存的 CCSIDR_EL1 描述的組和方式數量執行組和方式維護操作。

8.2 Write streaming mode

Cortex-A720 核心支持 Write streaming mode,有時也稱為讀分配模式,對于 L1 和 L2 緩存都支持。

在讀不命中或寫不命中時,會向 L1 或 L2 緩存分配緩存行。然而,寫入大塊數據可能會使緩存中充滿不必要的數據。這不僅會浪費電力,也會降低性能,因為整個線路會被后續寫入覆蓋(例如使用 memset() 或 memcpy())。在某些情況下,不需要在寫入時分配緩存行。例如,當執行 C 標準庫的 memset() 函數來將大塊內存清零為已知值時。

為了防止不必要的緩存行分配,內存系統會檢測 core 何時寫入了一系列完整的緩存行。如果在可配置數量的連續線路填充上檢測到這種情況,那么它會切換到寫入流模式。

在寫入流模式下,加載操作行為與正常情況相同,仍然可能引起線路填充。
寫入仍然在緩存中查找,但如果未命中,則會寫入 L2 或 L3 緩存,而不會啟動線路填充 L1。

在內存系統切換到寫入流模式之前,CHI 主控器或 AXI 主控器接口可能會觀察到超過指定數量的線路填充。

寫入流模式保持啟用,直到以下情況之一發生:

? 檢測到一個不是完整緩存行的可緩存寫入突發。
? 存在后續加載操作,其目標與未完成的寫入流相同。

當 Cortex-A720 核心切換到寫入流模式后,內存系統會繼續監視總線流量。當它觀察到一系列完整的緩存行寫入時,會向 L2 或 L3 緩存發出信號,以進入寫入流模式。
寫入流閾值定義了在存儲操作停止引起緩存分配之前,連續寫入的緩存行數量。您可以通過寫入寄存器 IMP_CPUECTLR_EL1 來配置每個緩存(L1、L2 和 L3)的寫入流閾值。

8.3 L1 數據內存系統中的原子指令實現

Cortex-A720 核心支持 Arm v8.1-A 架構中添加的原子指令。對可緩存內存的原子指令可以作為近原子操作或遠原子操作執行,默認情況下,Cortex-A720 核心將這些指令作為近原子操作執行。

換句說法,可以根據系統行為對 IMP_CPUECTLR_EL1 進行編程,以便某些原子指令嘗試作為原子操作執行。

當作為遠原子操作執行時,原子操作傳遞給 interconnect 執行操作。如果操作在集群內的任何位置 hit,或者如果互連器不支持原子操作,則 L3 內存系統執行原子操作。如果該行不存在,則將其分配到 L3 緩存中。

Cortex-A720 核心支持對 device 或 non-cacheable 的原子操作,但這也依賴于互連器是否支持原子操作。如果在互連器不支持原子操作的情況下執行此類原子操作指令,則會導致 abort。

8.4 內部獨占監視器

Cortex-A720 核心包括一個內部獨占監視器,具有 2 狀態(open 狀態和 exclusive 狀態)的狀態機,用于管理 Load-Exclusive 和 Store-Exclusive 訪問以及 Clear-Exclusive(CLREX)指令。

您可以使用這些指令構建信號量,確保不同進程在核心上運行時進行同步,以及確保使用相同的一致內存位置的不同核心之間進行同步。Load-Exclusive 指令標記了一小塊內存以進行獨占訪問。CTR_EL0 定義了標記塊的大小為 16 個字,即一個緩存行。

Load-Exclusive 或 Store-Exclusive 指令是以 LDX、LDAX、STX 或 STLX 開頭的指令。

8.5 數據預取

數據預取可以通過在需要數據之前獲取數據來提高執行性能。

預加載指令

對于不能有效處理數據預取器的情況,Cortex-A720 核心支持 AArch64 預取內存指令 PRFM。
這些指令向內存系統發出信號,指定地址處的內存訪問可能會很快發生。當內存訪問發生時,內存系統采取措施以減少內存訪問的延遲。

PRFM 指令在緩存中執行查找。如果未命中并且內存訪問是對可緩存地址的,則開始線路填充。但是,PRFM 指令在開始線路填充時執行結束,并且不會等到線路填充完成。

硬件數據預取器

加載 / 存儲單元包括硬件預取器引擎,負責生成針對 L1、L2 和 L3 緩存的預取。具體來說,L1 內存子系統中的預取引擎針對 L1 和 L2 緩存。L2 內存子系統中的預取引擎針對 L2 和 L3 緩存。加載端預取器使用虛擬地址(VA)和程序計數器(PC)。存儲端預取器僅使用虛擬地址(VA)。CPUECTLR 寄存器允許對預取器行為的某些方面進行控制。

數據緩存清零

在 Cortex-A720 核心中,Data Cache Zero by Virtual Address(DC ZVA)指令將對齊到 64 字節的內存塊(64 字節對齊)設置為零。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 緩沖器
    +關注

    關注

    6

    文章

    1767

    瀏覽量

    44985
  • ARM芯片
    +關注

    關注

    1

    文章

    125

    瀏覽量

    21290
  • MMU
    MMU
    +關注

    關注

    0

    文章

    91

    瀏覽量

    18007
  • Cortex-A7
    +關注

    關注

    0

    文章

    34

    瀏覽量

    16356
  • cache技術
    +關注

    關注

    0

    文章

    41

    瀏覽量

    1001
收藏 人收藏

    評論

    相關推薦

    Arm下一代指令架構“Armv9”已經問世

    Arm的下一代CPU指令集架構(ISA:指令集架構) Armv9開始推出。該公司正在逐步擴展當前的ISA Armv8,而擴展的高潮最終將成為Armv9的搭建橋梁。至于Armv9,一位C
    的頭像 發表于 11-13 11:55 ?4.4w次閱讀

    Armv9核心A710、A715和A510微架構解讀

    在介紹Armv9系列前,我們先看一下ARM的Cortex-X定制CPU計劃。Cortex-X方案先于Armv9發布,在Arm發布A78時,同時也發布了
    發表于 06-12 09:27 ?2w次閱讀
    <b class='flag-5'>Armv9</b>核心A710、A715和A510微架構解讀

    Armv9引入的MTE已成內存安全的新防線

    電子發燒友網報道(文/周凱揚)隨著Arm近日公開TCS23方案,可以看出Arm在移動SoC的計算核心上,已經全面走向了Armv9.2架構,無論是大核Cortex-X4、中核Cortex-A720還是
    的頭像 發表于 06-01 00:11 ?1485次閱讀

    一文搞懂Armv9的RME環境

    1、armv9的RME簡介Arm 機密計算架構引入了 Realm Management Extension (RME) ,它支持稱為Realm的新型可證明隔離環境。該環境建立在 TrustZone
    發表于 07-27 16:41

    如何在gem5里支持armv9 Transactional Memory (TME)擴展

    MESI_Three_Level. MESI是指一個cache line可以所處的狀態: Modifed,exclusive, Shared 或Invalid。 這個協議利用私有的 L1數據和指令cache
    發表于 08-01 14:45

    Armv8.1-M PAC和BTI擴展

    1、Armv8.1-M PAC和 BTI 擴展Armv8-M通過Trustzone for Armv
    發表于 08-05 14:56

    Armv9 system register class空間編碼

      1. 前言  Armv9 system register的編碼空間由一組參數標識:{op0, op1, CRn, CRm, op2},它們形成了一個編碼層次結構,其中:  op0:
    發表于 03-17 15:08

    ARMv8 architecture里的Memory aborts

    translation regime.  External abort: Any memory system fault other than a Debug exception, an Alignment fault
    發表于 03-21 14:28

    Arm?Cortex-A720 Core技術參考手冊

    。 Cortex-A720核心在DSU-120 DynamIQ中實現? 簇它連接到DynamIQ? 共享單元-120,其表現為具有L3高速緩存和窺探控制的完全互連。 這種連接配置也用于具有不同類型內核的系統中,其中Cortex-A720
    發表于 08-02 08:55

    Arm?Cortex-A720核心加密擴展技術參考手冊

    Cortex-A720內核支持可選的Arm?加密擴展。 Arm?加密擴展將A64指令添加到高級SIMD中: ?加速高級加密標準(AES)加密和解密 ?實現SHA (Secure Hash Algorithm)功能 ?執行多項式乘法長(PMULL)指令
    發表于 08-02 07:43

    Cortex-A9處理器技術參考手冊

    Cortex-A9處理器是一款高性能、低功耗的ARM宏單元,具有L1緩存子系統,可提供完整的虛擬內存功能。Cortex-A9處理器實現ARMv7-A架構,在Jazelle?狀態下運行3
    發表于 08-02 16:29

    ARM Cortex-A77軟件優化指南

    )指令以及Armv8.4-A擴展中引入的點積指令。 Cortex-A77內核具有1級(L1)內存系統和專用的集成2級(L2)高速緩存。 它還
    發表于 08-24 07:30

    Arm Cortex?-A77核心軟件優化指南

    )指令以及Armv8.4-A擴展中引入的點積指令。 Cortex-A77內核具有1級(L1)內存系統和專用的集成2級(L2)高速緩存。 它還
    發表于 08-29 07:51

    ARMv9架構能否解決中國“缺芯”之急?

    近日,ARM正式宣布推出ARMv9架構。據ARM官方稱,這是10年來最重要的創新,是未來3000億ARM芯片的基礎。
    發表于 05-02 17:06 ?2283次閱讀

    Arm微架構之Armv9時代

    在介紹Armv9系列前,我們先看一下ARM的Cortex-X定制CPU計劃。Cortex-X方案先于Armv9發布,在Arm發布A78時,同時也發布了
    的頭像 發表于 02-06 14:43 ?8318次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>