首页 > 其他分享 >arm64高速缓存基础知识

arm64高速缓存基础知识

时间:2024-09-11 09:24:28浏览次数:12  
标签:缓存 基础知识 字段 指令 arm64 共享 高速缓存 处理器

高速缓存的替换策略

  1. 随机法:随机地确定替换的高速缓存行,由一个随机数产生器产生随机数来确认替换行

  2. FIFO法:选择最先调入的高速缓存行进行替换

  3. LRU法:最少使用的行优先替换。

高速缓存的共享属性

  1. 内部共享的高速缓存通常指的是CPU内部集成的高速缓存,它们最靠近CPU内核

  2. 外部共享的高速缓存指的是通过系统总线扩展的高速缓存

  3. 高速缓存可以分成4个共享域------不可共享域、内部共享域、外部共享域以及系统共享域

  • 不可共享域:只能被一个处理器访问,其他处理器不能访问

  • 内部共享:这个区域里的处理器可以访问

  • 外部共享:这个区域里的处理器以及具有访问内存能力的硬件单元可以访问

  • 系统共享:所有访问内存的单元都可以访问和共享这个区域

4. 共享域的目的:指定其中所有可以访问内存的硬件单元实现缓存一致性的范围,主要用于高速缓存维护指令以及内存屏障指令

5. 一个处理器系统中,除了处理器,还有其他的可以访问内存的硬件单元,这些硬件单元(如DMA设备,GPU等)通常具有访问内存总线的能力。

6. PoU和PoC的区别

  • 全局缓存一致性角度(PoC):系统中所有可以发起内存访问的硬件单元(如处理器、DMA设备、GPU等)都能保证观察到的某一个地址上的数据是一致的或者是相同的副本,通常PoC表示站在系统的角度来看高速缓存的一致性问题

  • 处理器缓存一致性角度(PoU):表示站在处理器的角度来看高速缓存的一致性问题,例如看到的指令高速缓存、数据高速缓存、TLB、MMU等都是同一份数据的副本,数据是一致的,PoU有两个观察点。

  • 站在处理器角度来看,也就是针对单个处理器

  • 站在内部共享的属性的范围来看(同属于内部共享属性的一组处理器)

高速缓存的维护指令

  1. 高速缓存的管理主要有如下3种情况

  • 失效(invalida)操作:使整个高速缓存或者某个高速缓存行失效。之后,丢弃高速缓存上的数据

  • 清理(clean)操作:把标记为脏的整个高速缓存或者某个高速缓存行写回下一级高速缓存或者内存中,然后清理高速缓存中的脏位,使得高速缓存行的内容与下一级高速缓存或者内存中的数据保存一致

  • 清零(zero)操作:在某些情况下,用于对高速缓存进行预取和加速,例如:当程序需要使用较大的临时内存时,如果在初始化阶段对这块内存进行清0操作,高速缓存控制器就会主动把这些零数据写入高速缓存行中,如果程序主动使用高速缓存的清零操作,那么将大大的减少系统内部总线的带宽

2. ARM64还提供一种混合的操作,即清理并使其失效,会先执行清理,然后再使高速缓存行失效。

3. 对于高速缓存的操作可以指定如下不同的范围

  • 整个高速缓存

  • 某个虚拟地址

  • 特定的高速缓存行或组或路。

4. ARMV8指令

数据缓存指令: DC <operation>, <Xt>

指令缓存指令: IC <operation>, <Xt>

  • 操作码可以分为4部分

  • 功能:包括高速缓存指令的功能,例如清理等

  • 类型:用来指定指令操作的类型,例如,VA是针对单个虚拟地址的操作,SW表示针对高速缓存中的路和组进行操作,ALL表示针对整个高速缓存

  • 观察点:表示站在哪个角度来对高速缓存进行操作,U表示站在处理器一致性角度,C表示站在全局缓存一致性角度

  • 共享:IS表示内部共享属性

例: ic ialluis 使内部共享域中的所有处理器的指令高速缓存都失效

··········································ARMV8体系结构的高速缓存指令

指令类型

辅助操作符

描述

·····DC

cisw

清理并使指定的组和路的高速缓存失效

civac

站在PoC,清理并使指定的虚拟地址对应的高速缓存失效

csw

清理指定的组或路的高速缓存

cvac

站在PoC,清理指定的虚拟地址对应的高速缓存

cvau

站在PoU,清理指定的虚拟地址对应的高速缓存

isw

使指定的路或组的高速缓存失效

ivac

站在PoC,使指定的虚拟地址中对应的高速缓存失效

zva

把虚拟地址中的高速缓存清零

·····IC

ialluis

站在PoU,使所有的指令高速缓存失效,这些指令高速缓存是内存共享的

iallu

站在PoU,使所有的指令高速缓存失效

ivau

站在PoU,使指定的虚拟地址对应的指令高速缓存失效

  1. CLIDR_EL1

用来标识高速缓存的类型以及系统最多支持几级高速缓存

添加图片注释,不超过 140 字(可选)

  • Ctype<n>, bits [3(n-1)+2:3(n-1)], for n = 7 to 1,Cache Type字段,描述各个缓存等级的的类型。比如Ctype1字段,描述的是Level1缓存的类型。可以有以下值:

  • LoUIS:标识内部共享PoU的边界所在的高速缓存级别

  • LoC字段表示PoC的边界所在的高速缓存级别

  • LoUU字段表示单处理器PoU边界所在的高速缓存级别

  • ICB字段表示内部缓存边界,ICB字段的编码如下:

  • 0b001:L1是最高级别的内部共享的高速缓存

  • 0b010:L2是最高级别的内部共享的高速缓存

  • ….

  • 0b111:L7是最高级别的内部共享的高速缓存

2. CTR_EL0

记录了高速缓存的相关信息,例如高速缓存行的大小、高速缓存策略等

  • L1Ip, bits [15:14]:Level 1中的指令缓存(instruction cache)的缓存策略。指示了index和tag的生成方式。可能包含的值如下,其中,VIPT和PIPT较常使用:

0b00---表示通过VMID指定的高速缓存策略位物理索引物理标记(VPIPT)

0b01---表示通过ASID指定的高速缓存策略为虚拟索引虚拟标记 (AIVIVT)

0b10---Virtual Index, Physical Tag (VIPT) 虚拟索引物理标记

0b11---Physical Index, Physical Tag (PIPT)物理索引物理标记

  • DminLine字段表示数据高速缓存或者联合高速缓存的缓存行大小

  • ERG字段表示独占访问的最小单位,用于独占加载和存储指令

  • CWG字段表示高速缓存回写的最小单位,

  • IDC字段表示清理数据高速缓存时是否要求指令对数据的一致性

  • DIC字段表示无效指令高速缓存时是否要求数据与指令的一致性

  • TminLine字段表示缓冲行中标签的大小。

3. CSSELR_EL1

  • InD, bit [0]:选择的高速缓存类型

0b0 Data or unified cache.数据高速缓存或者联合高速缓存

0b1 Instruction cache. 指令高速缓存

  • Level, bits [3:1]:指定要查询的高速缓存的层次

  • TnD字段用来指定高速缓存标记的类型

0b0:表示数据、指令或者联合高速缓存

0b1:表示独立分配标记的高速缓存

5. CCSIDR_EL1

  • LineSize:(Log2(Number of bytes in cache line)) - 4,表示一个cache line的大小为多少个字节。它的值需要进行换算:如果LineSize = 0,2^(0+4) = 16,表明此时的cache line大小为16个字节。相反,如果cache line大小为64 bytes,此时LineSize = log2(64) - 4 = 6 - 4 = 2 =0x10。

  • Associativity:Number of ways in cache -1,如果Associativity = 3,则说明有4个way。

  • NumSets:(Number of sets in cache)-1,组的数量-1,也就是说该字段的数值加1,才是当前cache的set数量。

6. DCZID_EL0寄存器

这个寄存器用来指定清零(DC ZVA)的数据块大小

  • DZP: 0b0 Instructions are permitted. 0b1 Instructions are prohibited.

  • BS, bits [3:0] :Log2 of the block size in words. The maximum size supported is 2KB (value == 9)

标签:缓存,基础知识,字段,指令,arm64,共享,高速缓存,处理器
From: https://blog.csdn.net/weixin_42198851/article/details/142054731

相关文章

  • arm64 Linux操作系统知识点
    一、C语言常见陷阱1.数据模型ARM64下可以采用LP64和ILP64数据模型,在Linux系统下默认采用LP64数据模型。LP64中,L表示Long,P表示Pointer(指针长度),ILP32、ILP64、LP64数据模型中不同数据类型的长度数据类型/字节ILP32数据模型中的长度ILP64数据模型中的长度LP64......
  • 《教育基础知识与能力》
    1.简述政治经济制度对教育的制约政治经济制度决定教育的性质;政治经济制度决定教育的宗旨和目的;政治经济制度决定教育的领导权;政治经济制度决定受教育权;政治经济制度决定教育内容和教育管理体制;2.简述个体身心发展的一般规律个体身心发展具有顺序性。它是有个由低级到高......
  • C++入门基础知识61——【关于C++继承】
    成长路上不孤单......
  • C++入门基础知识60——【关于C++ 类 & 对象】
    成长路上不孤单......
  • C++入门基础知识59——【关于C++数据结构】
    成长路上不孤单......
  • 面试-JS基础知识-原型和原型链
    JS本身是基于原型来继承的语言。问题引出:如何判断一个变量是不是数组?手写一个简易的jQuery,考虑插件和扩展性class的原型本质,怎么理解?知识点class和继承类型判断instanceof原型和原型链classclass相当于一个模版,可以用来构建(constructor)东西。classStudent{co......
  • 【AutoSAR Dem基础知识】
    文章目录1.DemDTC2.DemDebounce3.DemEventParameter4.DemOperationCycle5.DemIndicator6.DemComponent7.DemDTCstatus1.DemDTCDTCAttributes:故障数据一致的dtc可以共用老化阈值agingcounter是fail以后的周期中,发生的pass次数。故障优先级老化操作循环Ignition......
  • C++入门基础知识58——【关于C++基本的输入输出】
    成长路上不孤单......
  • JavaScript 基础知识
    概述        在Web前端开发中,JavaScript是一种脚本语言,主要用于实现网页的动态功能和交互效果。与HTML和CSS主要关注网页的结构和样式不同,JavaScript可以用于以下方面:动态内容更新:通过JavaScript,可以在不重新加载页面的情况下更新网页上的内容。例如,用户点击......
  • 02_硬件基础知识学习
            通过上一课的学习,我们貌似成功的点亮了一个LED小灯,但是有一些知识大家还没彻底搞明白。单片机是根据硬件电路图的设计来编写代码的,所以我们不仅仅要学习编程知识,还要学习基本的硬件知识,这节课我们就要来穿插介绍电路硬件知识。1.电磁干扰EMI      ......