深度解析: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一般是和MMU结合在一起使用的
  • 3、硬件架构基础介绍
      • 3.1 big.LITTLE架构的cache
      • 3.2 DynamIQ架构架构的cache
      • 3.3 缓存一致性总线-CCI
      • 3.4 缓存一致性总线-CMN
      • 3.5 big.LITTLE架构中的cluster interface
      • 3.6 dynamIQ架构中的DSU interface
      • 3.7 架构图示例
  • 4、L1/L2/L3 cache的大小
  • 5、cache的组织形式(index, way, set)
  • 6、cache的种类(VIVT,PIPT,VIPT)
  • 7、cache的分配策略(alocation,write-through, write-back)
  • 8、架构中定义的cache的范围(inner, outer)
  • 9、架构中内存的类型
    • 推荐


本文转自 周贺贺,baron,代码改变世界ctw,Arm精选, armv8/armv9,trustzone/tee,secureboot,资深安全架构专家,11年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。

1、cache是多级相连的

cache是多级的,在一个系统中你可能会看到L1、L2、L3, 当然越靠近core就越小,也是越昂贵。
一般来说,对于big.LITTLE架构中,在L1是core中,L1又分为L1 data cache和 L1 Instruction cache, L2 cache在cluster中,L3则在BUS总线上。
在这里插入图片描述

2、cache一般是和MMU结合在一起使用的

很多时候cache都是和MMU一起使用的(即同时开启或同时关闭),因为MMU页表的entry的属性中控制着内存权限和cache缓存策略等
在这里插入图片描述

在ARM架构中,L1 cache都是VIPT的,也就是当有一个虚拟地址送进来,MMU在开始进行地址翻译的时候,Virtual Index就可以去L1 cache中查询了,MMU查询和L1 cache的index查询是同时进行的。如果L1 Miss了,则再去查询L2,L2还找不到则再去查询L3。 注意在arm架构中,仅仅L1 cache是VIPT,L1L2和L3都是PIPT。

在这里插入图片描述

3、硬件架构基础介绍

big.LITTLE 架构 和 DynamIQ 架构 的cache是有区别的

在这里插入图片描述

  • big.LITTLE 架构中,大核小核在不同的cluster中,做为两个不同的ACE或CHI Master,连接到缓存一致性总线上(CCI或CMN)。大核cluster和小核cluster的缓存一致性,也需要通过一致性总线来解决。
  • 到了DynamIQ 架构中,大核和小核都是一个DSU cluster中,一个DSU cluster最多可以支持8个core。如果你的系统是8个core,那么一个DSU就够了,那么系统中也就只有一个ACE或CHI Master,大核和小核之间的一致性,都在DSU cluster内完成了。

3.1 big.LITTLE架构的cache

big.LITTLE 的架构中,L1是在core中的,是core私有的;L2是在cluster中的,对cluster中的core是共享的;L3则对所有cluster共享。big.LITTLE 的架构的一个cache层级关系图如下所示:
在这里插入图片描述

3.2 DynamIQ架构架构的cache

dynamIQ 的架构中,L1和L2都在core中的,都是core私有的;L3则是在cluster中的,对cluster中的core是共享的;如有L3或system cache,则是所有cluster共享。dynamIQ的架构的一个cache层级关系图如下所示。
注意,一般来说一个DSU Cluster就可以做到支持8个core,以下只是举一个极端的例子,在硬件设计时,我非要放置两个DSU cluster 可不可以?两个DSU Cluster做为两个ACE Master连接到了CCI一致性总线上。
在这里插入图片描述

3.3 缓存一致性总线-CCI

用于ACE Master缓存一致性总线有 CCI-550CCI-500CCI-400
在这里插入图片描述

它的主要作用是可以互联多个ACE MasterACE-lite Master,然后通过ACE接口协议,做到多个Master之间的缓存一致性。CCI最多支持2个ACE Master,共计支持8个ACE Master+ACE-lite Master
所以呢,如果是big.LITTLE架构的,那么最多支持两个cluster互联,每个cluster 8个core,所以最多支持8个core;如果是dynamIQ架构的,那么最多支持两个DSU cluster互联,每个cluster 8个core,所以最多支持16个core

3.4 缓存一致性总线-CMN

用于CHI Master缓存一致性总线有CMN-700、CMN-600.
在这里插入图片描述

它的主要作用是可以互联多个CHI MasterACE-lite Master,然后通过CHI接口协议,做到多个Master之间的缓存一致性。CCI-600最多支持8个 CHI Master ,共计支持8个CHI Master + ACE-lite Master

在这里插入图片描述

3.5 big.LITTLE架构中的cluster interface

big.LITTLE架构中,cluster连接到一致性总线的接口,可以是ACE,也可以是CHI,所以big.LITTLE cluster既可以做为ACE Master连接到总线,也可以做为CHI Master连接到总线。

在这里插入图片描述

3.6 dynamIQ架构中的DSU interface

2017年引入dynamIQ架构, 在DSU(dynamIQ Share Unit)规范中,连接到一致性总线的接口,可以是ACE,也可以是CHI,所以DSU cluster既可以做为ACE Master连接到总线,也可以做为CHI Master连接到总线。
在这里插入图片描述

而在DSU-110中, 连接到一致性总线的接口可以是CHI ,但不再有ACE了。如果你使用的是DSU-110,DSU Cluster做为CHI Master了,那么你一定是采用CMN的总线互联方式。

在这里插入图片描述

3.7 架构图示例

所以呢,你看到的系统架构图(也是近几年最常用的),可能是下面这个样子的,所有的core都在一个DSU cluster中,所有core共享L3 cache,DSU接到CCI或CMN缓存互联一致性总线上,可以和其它ACE-Lite Master(如 GPU)共享缓存数据
在这里插入图片描述

当然了,举个稍微极端的例子,如下连接架构图也不是不可能,系统中有两个DSU cluster,DSU接到CCI或CMN缓存互联一致性总线上。

在这里插入图片描述

事实上big.LITTLE架构的cluster,也是可以做为CHI Master。下面这种超极端的例子,技术理论上也是可行的(当然可能不会有人用)。

在这里插入图片描述

4、L1/L2/L3 cache的大小

可以参考ARM文档,

  • 对于big.LITTLE架构的core,其cache大小基本是固定的。
  • 对于dynamIQ架构的core,其L1和L2 cache大小基本是固定的。但对于L2 cache 则是可选择可配置的

另外查阅DSU TRM文档,可以看到L3 Cache可以配置 0 - 16MB的大小。
在这里插入图片描述

5、cache的组织形式(index, way, set)

cache的组织形式有:

  • 全相连
  • 直接相连
  • 多路组相连(如4路组相连)
    在这里插入图片描述

在一个core中一个架构中一个SOC中,所有cache的组织形式并不是都一样的。即使L1 D-cache和L1 I-cache的组织形式,也都可能不是一样的的。 具体的组织形式是怎>样的,需要查询你的core trm手册。

例如我们查询到Cortex-A53的cache信息如下:

L1 I-Cache

  • 可配:8KB, 16KB, 32KB, or 64KB
  • cacheline:64bytes
  • 2路组相连
  • 128-bit的读L2 memory的接口

L1 D-Cache

  • 可配:8KB, 16KB, 32KB, or 64KB
  • cacheline:64bytes
  • 4路组相连
  • 256-bit的写L2 memory的接口
  • 128-bit的读L2 memory的接口
  • 64-bit的读L1到datapath
  • 128-bit的写datapath到L1

L2 cache

可配置的: 128KB, 256KB, 512KB, 1MB and 2MB.

  • cacheline:64bytes
  • Physically indexed and tagged cache(PIPT)
    -16路组相连的结构

因为有了多路组相连这个cache,所以也就有了一些术语概念:

  • index : 用白话理解,其实就是在一块cache中,一行一行的编号(事实是没有编号/地址的)
  • Set :用index查询到的cache line可能是多个,这些index值一样的cacheline称之为一个set
  • way:用白话来说,将cache分成了多个块(多路),每一块是一个way
  • cache TAG :查询到了一行cache后,cachelne由 TAG + DATA组成
  • cache Data :查询到了一行cache后,cachelne由 TAG + DATA组成
  • cache Line 和 entry 是一个概念

在这里插入图片描述

6、cache的种类(VIVT,PIPT,VIPT)

cache一般是有如下种类;

  • PIPT
  • VIVT
  • VIPT
    在一个core中一个架构中一个SOC中,你所使用的cache是哪种类型的,都是固定的,是软件改不了的。 在ARM架构中,一般L1 cache都是VIPT的,其余的都是PIPT的。
    VIPT和PIPT的原理,基本也都是一样的,只是硬件查询时稍微有一丁点的区别,在后续讲cache查询时会再次介绍。

那么,你还学什么VIVT?你为什么还要去理解VIVT的原理?你为什么还要去分析cache同名、重名的问题? 这样的问题,在armv7/armv8/armv9架构中都是不存在的

7、cache的分配策略(alocation,write-through, write-back)

  • 读分配(read allocation)
    当CPU读数据时,发生cache缺失,这种情况下都会分配一个cache line缓存从主存读取的数据。默认情况下,cache都支持读分配。

  • 写分配(write allocation)
    当CPU写数据发生cache缺失时,才会考虑写分配策略。当我们不支持写分配的情况下,写指令只会更新主存数据,然后就结束了。当支持写分配的时候,我们首先从主存中加载数据到cache line中(相当于先做个读分配动作),然后会更新cache line中的数据。

  • 写直通(write through)
    当CPU执行store指令并在cache命中时,我们更新cache中的数据并且更新主存中的数据。cache和主存的数据始终保持一致。

  • 写回(write back)
    当CPU执行store指令并在cache命中时,我们只更新cache中的数据。并且每个cache line中会有一个bit位记录数据是否被修改过,称之为dirty bit(翻翻前面的图片,cache line旁边有一个D就是dirty bit)。我们会将dirty bit置位。主存中的数据只会在cache line被替换或者显示的clean操作时更新。因此,主存中的数据可能是未修改的数据,而修改的数据躺在cache中。cache和主存的数据可能不一致

在这里插入图片描述

8、架构中定义的cache的范围(inner, outer)

对于cacheable属性,inner和outer描述的是cache的定义或分类。比如把L1/L2看做是inner cache,把L3看做是outer cache。

通常,内部集成的cache属于inner cache,外部总线AMBA上的cache属于outer cache。例如:

  • 对于big.LITTLE架构(A53为例)中,L1/L2属于inner cache,如果SOC上挂了L3的话,则其属于outer cache
  • 对于DynamIQ架构(A76为例)中,L1/L2/L3属于inner cache,如果SOC上挂了System cache(或其它名称)的话,则其属于outer cache

然后我们可以对每类cache进行单独是属性配置,例如:

  • 配置 inner Non-cacheable 、配置 inner Write-Through Cacheable 、配置 inner Write-back Cacheable
  • 配置 outer Non-cacheable 、配置 outer Write-Through Cacheable 、配置 outer Write-back Cacheable
    在这里插入图片描述

对于shareable属性,inner和outer描述的是cache的范围。比如inner是指L1/L2范围内的cache,outer是指L1/L2/L3范围内的cache

在这里插入图片描述

9、架构中内存的类型

在arm架构中,将物理内存分成了device和normal两种类型

在这里插入图片描述

而是每种的内存下(device和normal)又分出了多种属性。ARM提供一个MAIR寄存器, 将一个64位的寄存器分成8个attr属性域,每个attr属性域有8个比特,可配置成不同的内存属性。
也就是说,在一个arm core,最多支持8中物理内存类型。
在这里插入图片描述

而我们在MMU使用的页表的entry中的属性位中,BIT[4:2]占3个比特,表示index,其实就是指向MAIR寄存器中的attr。
(Attribute fields in stage 1 VMSAv8-64 Block and Page descriptors)

在这里插入图片描述

PBHA, bits[62:59] :for FEAT_HPDS2
XN or UXN, bit[54] : Execute-never or Unprivileged execute-never
PXN, bit[53] :Privileged execute-never
Contiguous, bit[52] : translation table entry 是连续的,可以存在一个TLB Entry中
DBM, bit[51] :Dirty Bit Modifier
GP, bit[50] :for FEAT_BTI
nT, bit[16] :for FEAT_BBM
nG, bit[11] :缓存在TLB中的翻译是否使用ASID标识
AF, bit[10] : Access flag, AF=0后,第一次访问该页面时,会将该标志置为1. 即暗示第一次访问
SH, bits[9:8] :shareable属性
AP[2:1], bits[7:6] :Data Access Permissions bits,
NS, bit[5] :Non-secure bit
AttrIndx[2:0], bits[4:2]

也就是说,页表的每一个entry中,都指向MAIR寄存器中的一个属性域。也就是页表的每一个entry都配置了一种内存类型。 如下所示,便很好的展示了,MMU页表的每一个page descriptor(也叫entry)都指向一个内存属性类型。
在这里插入图片描述

推荐

  • ARMv8/ARMv9架构从入门到精通 --博客专栏
  • 《Armv8/Armv9架构从入门到精通 第二期》 --大课程
  • 8天入门ARM架构 --入门课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUG 弹药库】Tortoise git 绿色的勾 ✔ 和 红色的 !突然不见了该如何解决呢?

文章目录 1. 出现的问题描述如下所示:2. 如何解决这个问题呢 ? 1. 出现的问题描述如下所示: 用 TortoiseGit 提交代码的时候,红色的 ! 和 绿色的 ✔ 突然消失了; 2. 如何解决这个问题呢 ? ① 首先按住快…

商业模式的深度解析:以四个特点构筑成功之路

商业模式,是企业将产品、服务、信息流、资金流等要素组合在一起,形成独特价值主张,并通过特定的渠道和方式传递给目标市场,从而获取利润的一种系统性设计。一个成功的商业模式,往往具备四个显著特点:重点突…

企业微信如何接入第三方应用?

1.登录企业微信管理后台:https://work.weixin.qq.com/wework_admin​​​​​ 2.点击创建应用; ​​​​​​​ 3. 此时可以看到已经创建好的应用,并且生成应用的唯一id(agentId) 4. 第三方应用申请域名 (举例&…

智慧楼宇物联网建设实施方案(2)

建设方案 楼宇综合管理平台 智慧楼宇物联网应用综合管理系统是对整个物联网系统的集中监控和展示。其主要功能是对各应用子系统的关键监测数据进行数据格式解析并呈现。进而使管理者能够从整体上对整个物联网系统运行状态有个直观的了解。其不同于各专业子系统的管理软件,重…

flstudio教程如何设置成中文 flstudio基础教程 flstudio免费

Fl studio编曲软件总共有英文和中文两种语言供用户选择,对于我们来说,更习惯于使用中文版本的flstudio编曲软件,包括我自己也比较习惯于使用中文版本的flstudio,同时也能提高工作效率。Flstudio编曲软件默认语言是英文&#xff0c…

vue:功能【xlsx】动态行内合并

场景:纯前端导出excel数据,涉及到列合并、行合并。 注)当前数据表头固定,行内数据不固定。以第一列WM为判断条件,相同名字的那几行数据合并单元格。合并的那几行数据,后面的列按需求进行合并。 注&#x…

CV论文--2024.3.13

1、Sora Generates Videos with Stunning Geometrical Consistency 中文标题:Sora 生成具有惊人几何一致性的视频。 简介:最近发布的 Sora 模型展示了在视频生成领域的出色表现,引发了人们对其模拟真实世界现象能力的激烈讨论。尽管该模型越来越受欢迎&…

如何保证Redis和数据库数据一致性

缓存可以提升性能,减轻数据库压力,在获取这部分好处的同时,它却带来了一些新的问题,缓存和数据库之间的数据一致性问题。 想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题 首先我们来看看一致性: 强一致性…

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…

python基础——列表【创建,下标索引,常见操作方法】

📝前言: 这篇文章主要讲解一下python中常见的数据容器之一——列表 本文主要讲解列表的创建以及我们常用的列表操作方法 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础以及python入门基础 &#x1f380…

泰迪智能科技3月线上培训计划

有学习意向可到 泰迪智能科技官网 咨询了解

Visual Basic6.0零基础教学(3)—焦点概念和深入学习属性

焦点概念和深入学习属性 文章目录 焦点概念和深入学习属性前言一、什么是焦点(Focus)?焦点的特点 二、窗体属性一、窗体的结构二、窗体的属性三、事件四、方法 一.控件属性一. 标签 Label二.文本框 TextBox2.常用事件 三.命令按钮事件 总结 前言 今天我们来继续学习VB中的属性…

Java全系工程源码加密,防止反编译

一、前言 在大约2015年左右,由于公司产品序列逐渐增加,涉及到N多项目部署交付,为了有效防止产品被滥用,私自部署,当时技术中心决定开发一套统一的授权认证管理系统,对公司所有产品序列进行 License 控制。…

Kotlin:为什么创建类不能被继承

一、为什么创建类不能被继承 class或data class 默认情况下,Kotlin 类是最终(final)的:它们不能被继承。 示例:data class PsersonBean 反编译data class PsersonBean 生成 public final class PsersonBean 示例&…

材料科学类3区SCI,仅13天超快上线见刊,国人友好!!

录用案例 JCR3区材料类SCI (3.31截稿) 【期刊简介】IF:3.0-4.0,JCR3区,中科院4区; 【检索情况】SCI在检; 【征稿领域】低温环境下新型生物降解材料的开发相关或结合研究均可; 【案例分享】重要时间节点…

伪分布式Spark集群搭建

一、软件环境 软 件 版 本 安 装 包 VMware虚拟机 16 VMware-workstation-full-16.2.2-19200509.exe SSH连接工具 FinalShell Linux OS CentOS7.5 CentOS-7.5-x86_64-DVD-1804.iso JDK 1.8 jdk-8u161-linux-x64.tar.gz Spark 3.2.1 spark-3.2.1-bin-…

PostgreSQL YUM安装

docker中的centos7中安装 选择对应的版本然后在容器中的centos7中执行下面命令 但是启动容器的时候需要注意 开启端口映射开启特权模式启动init进程 docker run -itd --name centos-postgresql -p 5433:5432 --privilegedtrue centos:centos7 /usr/sbin/init 启动然后进入后先…

java SSM在线学习网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM在线学习网站系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用…

【基于HTML5的网页设计及应用】——改变文字和背景颜色

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

有手就会Python自定义模块使用

1.自定义模块 自定义模块一般是在项目中根据自己的需求进行的封装 项目中自定义了额一个模块,module.py name "张三" age 23 weight 160 height 187 def test(): print("测试的方法") def demo(): print("天使的眼泪") …