arm64高速缓存基础知识

news2024/11/24 19:14:03

高速缓存的替换策略

  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)

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

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

相关文章

50ETF期权交易对手方是谁?对手方怎么交易?

今天期权懂带你了解50ETF期权交易对手方是谁&#xff1f;对手方怎么交易&#xff1f;上证50ETF期权投资作为目前金融业呼声较高的投资品种&#xff0c;其实与其他类型的金融产品相比&#xff0c;风险是相对较低的了&#xff0c;因为对于投资者而言&#xff0c;亏损只会影响到权…

《mkcert介绍及使用》

&#x1f916; 作者简介&#xff1a;水煮白菜王 &#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧✍。 感谢支持&#x1f495;&#x1f495;&#x1f495; 关…

如何在 DigitalOcean Droplet 云服务器上部署 Next.js 应用

Next.js 是一个流行的 React 框架&#xff0c;可轻松构建服务器渲染的 React 应用程序。在本教程中&#xff0c;我们将介绍如何使用 Nginx 作为反向代理&#xff0c;在 DigitalOcean 的 droplet 云主机上部署 Next.js 应用程序。以下是逐步指南&#xff0c;假设你已经准备好部署…

数学建模笔记—— 线性规划

数学建模笔记—— 线性规划 线性规划1. 模型引出1.1 线性规划模型的三要素1.2 线性规划模型建立步骤1.3 线性规划的表现形式1.4 线性规划的模型特点 2.典型例题3. python代码求解3.1 求解KK升级的问题3.2 求解投资收益问题 线性规划 在人们的生产实践中&#xff0c;经常会遇到…

jenkins工具的介绍和gitlab安装

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要工具&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;需…

【LoRa】对TX与RX的TOA时间的理解

目录 1 前言2 解释说明3 延申-计算TOA 1 前言 大家可能已经知道在射频传输中&#xff0c;TOA&#xff08;Time on Air&#xff09;是指本包传输所需时间。本章主要来讨论如何理解这段时间&#xff0c;并从发送端和接收端一起来理解。本章是基于LoRa所做的测试&#xff0c;但我…

OutBrain原生广告新赛道助力欧美流量变现优势与实战策略

揭秘欧美流量变现新蓝海&#xff1a;OutBrain原生广告的优势与实战策略 在数字化时代&#xff0c;流量即金钱的观念深入人心&#xff0c;尤其是对于欧美市场而言&#xff0c;高效、精准的流量变现策略成为了众多网站主、博主及内容创作者关注的焦点。OutBrain&#xff0c;作为…

凭什么要买净水器?

近年来&#xff0c;购买净水器的人越来越多&#xff0c;净水器似乎成了一件必不可少的家电。 但仍有部分人保持着传统的观念&#xff0c;认为喝自来水烧开的白开水是最健康的&#xff0c;净水器都是商家炒作出来的&#xff0c;不可信。 可事实是这样吗&#xff1f;其实你家水…

多语言ASO – 本地化的10个技巧

ASO优化是一个复杂的领域&#xff0c;即使你只关注讲英语的用户。如果您想面向国际受众并在全球范围内发展您的应用程序业务&#xff0c;您必须在App Store和Google Play Store上本地化应用程序的产品页面。不过&#xff0c;应用程序商店本地化的过程也有很多陷阱。 应用商店本…

U盘数据恢复秘籍:四款软件的亲测推荐!

U盘作为便捷的存储工具被广泛使用&#xff0c;但随之而来的是数据丢失的风险。面对U盘中的宝贵资料不慎丢失&#xff0c;如何高效、安全地恢复成为关键。推荐几款亲测好用的U盘数据恢复软件&#xff01; 第一款&#xff1a;福昕数据恢复 直达链接&#xff1a;www.pdf365.cn/f…

elementui Cascader 级联选择器的使用总结

实现效果 技术要点总结如下&#xff1a; 1、点击添加自动增加多行&#xff0c;实现自主选择增加多条节点数据 2、节点地址使用的是Cascader 级联选择器&#xff0c;需要动态生成&#xff0c;涉及到一个技术要点是&#xff1a;因v-modal只能获取value不能获取label&#xff0c;故…

CCF编程能力等级认证GESP—C++7级—20240907

CCF编程能力等级认证GESP—C1级真题 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)小杨寻宝矩阵移动 单选题&#xff08;每题 2 分&#xff0c;共 30 分&…

Spring AOP,通知使用,spring事务管理,spring_web搭建

spring AOP AOP概述 AOP面向切面编程是对面向对象编程的延续&#xff08;AOP &#xff08;Aspect Orient Programming&#xff09;,直译过来就是 面向切面编程,AOP 是一种编程思想&#xff0c;是面向对象编程&#xff08;OOP&#xff09;的一种补充。&#xff09; 面向切面编…

开放系统,面向各类业务需求可提供定制化服务的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中&#xff0c;能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候&#xff0c;一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具&#xff01; 365在线转文字 直达链接&…

性能测试工程师必须掌握的诊断工具及应用实例

“工欲善其事&#xff0c;必先利其器”&#xff0c;那么作为一名性能测试工程师需要了解到的诊断工具有哪些呢&#xff1f;在实际工作中要怎么去应用呢&#xff1f; 1、应用层报文抓取工具-HTTPWatch 快速定位请求、响应时间 快速查找请求、响应完整HTTP报文 快速定位请求、…

1、程序如何生成和运行

程序如何生成和运行 一、生成可执行文件1、 源文件2、 预处理&#xff1a;g -E hello.cpp -o hello.i //将头文件&#xff0c;宏定义等替换到源文件3、 编译&#xff1a;g -S hello.i -o hello.s // 生成汇编代码4、 汇编&#xff1a;g -c hello.s -o hello.o // 生成二进制目标…

【区块链 + 基层治理】链动社区:基于 FISCO BCOS 的智慧社区数字化治理平台 | FISCO BCOS应用案例

“链动社区——基于 FISCO BCOS 的智慧社区数字化治理平台”是智慧社区治理服务一套完整系统&#xff0c;通过使用 FISCO BCOS 联盟链方案进行社区数据管理&#xff08;积分交易数据和行为数据等&#xff09;、对社区工作进行数字化支持&#xff0c;激发社区治理的多元主体参与…

Linux相关概念和重要知识点(1)(交互方式、存储结构、定位方式)

1.Linux是什么&#xff1f; Linux是一款继Unix之后开发的一款开源操作系统。 操作系统是基础性系统软件&#xff0c;是人机交互的一个媒介&#xff0c;我们日常使用的Windows、iOS、Android都是操作系统&#xff0c;用户都是和操作系统打交道的。像Windows、iOS是闭源的&…

【西电电装实习】流水灯(高级贴片焊接练习)

前言 说明书 左边实现流水&#xff0c;右边实现灯&#xff0c;灯与灯之间独立 此练习板具有功能 注意事项 不能焊错芯片&#xff0c;会影响功能先焊右侧比较好焊的用万用表检测电路质量 引脚序号 有圆点是第一个脚&#xff0c;然后逆时针按自然数顺序标引脚