arm64 cache 機制分析

背景

說明:

  1. Kernel 版本:4.14

  2. ARM64 處理器,Contex-A53,雙核

  3. 使用工具:Source Insight 3.5, Visio

1. 概述

先來看一下經典的存儲器層次結構圖:

以 ARMv8 的 CPU 架構爲例:

接下來讓我們對 cache 一探究竟。

2. cache

2.1 cache 結構

先看一下 cache 的內部結構圖:

2.2 cache 映射

2.2.1 direct mapped

直接映射的方式如下:

2.2.2 set associative

組相連的映射方式如下:

2.2.3 fully associative

全相連的映射方式如下:

2.3 cache 策略

2.4 cache 分類

先來看看 cache 中的重名 (aliasing) 問題和同名 (homonyms) 問題:

2.4.1 VIVT(Virtually-Indexed Virtually-Tagged)

2.4.2 PIPT(Physically-Indexed Physically-Tagged)

2.4.3 VIPT(Virtually-Indexed Physically-Tagged)

3. mesi

先來看問題的引入:

MESI 協議的名字來源於 cache line 的四個狀態:

狀態說明如下:

  1. M 和 E 狀態,數據都是本地獨有的,不同點在於 M 狀態的數據是髒的,而 E 狀態的數據是乾淨的,M 狀態的 cache line 寫回內存後,狀態變成了 S;

  2. S 狀態的 cache line,數據和其他 cache 共享,只有乾淨的數據才能被多個 cache 共享;

MESI 協議在總線上的操作分爲兩大類:CPU 請求和總線請求,如下圖:

MESI 協議中涉及到各個狀態的轉換:

1. 本地 CPU 操作,狀態轉換如下圖:

2. 總線監聽到其他 CPU 的操作請求,狀態轉換如下圖:

當多個 cpu 訪問同一個 cache line 中的不同數據時,根據 MESI 協議,容易造成 cache 的僞共享問題,解決方式是讓多線程操作的數據處在不同的 cache line 中。

收工了。

參考

《 ARM Cortex-A Series  Programmer's Guide for ARMv8-A》

《ARMv8-A CPU Architecture Overview》

《奔跑吧Linux內核》

Lecture 8. Memory Hierarchy Design II

TEACHING THE CACHE MEMORY COHERENCE WITH THE MESI PROTOCOL SIMULATOR

Cache 組織方式

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NlWvs_fjWSSvW2S1FcpgkQ