【ARM Cache 及 MMU 系列文章 6.1 -- Cache maintenance 相关寄存器及指令详细介绍】


请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】
及【嵌入式开发学习必备专栏】


文章目录

    • Cache Maintenance registers and instructions
      • DCZID_EL0
        • DCZID_EL0寄存器字段解释
      • DCZ 使用场景
      • Cache maintenance 范围选择
    • Cache maintenance 指令集

Cache Maintenance registers and instructions

Armv8/v9 里定义的Cache的管理的操作有三种:

  • Invalidate: 整个高速缓存或者某个高速缓存行。高速缓存上的数据会被丢弃。
  • Clean: 整个高速缓存或者某个高速缓存行。相应的高速缓存行会被标记为脏,数据会写回到下一级高速缓存中或者主存储器中。
  • Zero:在某些情况下,对高速缓存进行清零操作起到一个预取和加速的功效,比如当程序需要使用一大块临时内存,在初始化阶段对这个内存进行清零操作,这时高速缓存控制器会主动把这些零数据写入高速缓存行中。若程序主动使用高速缓存的清零操作,那么将大大减少系统内部总线的带宽。

既然谈到 cache 清零,那么我们就先看下和 cache 清零相关的寄存器和指令。

DCZID_EL0

在ARMv9架构中,DCZID_EL0(Data Cache Zero ID Register)是一种系统寄存器,用于提供关于 “数据缓存清零”( DC GVADC GZVA )操作的信息。

DCZ操作是一种特殊的cache maintenance 指令,用于将缓存行中的数据设置为零。这种指令对于初始化或清理缓存内容非常有效,尤其是在需要快速清除大量数据以避免潜在的安全风险时。
在这里插入图片描述

DCZID_EL0寄存器字段解释
  • BS(Block Size)字段:指示DCZ操作可以影响的最小字节块大小。这个大小是2的幂次方,实际的块大小为 2(BS+2) 字节。例如,如果BS字段的值为4,则DCZ操作影响的最小块大小为 2(4+2) = 64 字节。

  • DZP(Data Zero Present)位:这一位指示DCZ操作是否可用:

    • 如果DZP位为0,则表示支持DCZ操作;
    • 如果为1,则表示DCZ操作不可用。

    这提供了一种检测硬件是否支持这种优化操作的方法。

DCZ 使用场景

DCZID_EL0寄存器的信息对于操作系统和低级软件非常重要,它们需要了解和控制缓存行的具体行为。通过使用DCZ操作,软件可以有效地将缓存行初始化为零,这在多种场景下都非常有用,包括:

  • 安全清理:在释放敏感数据所占用的内存或缓存空间之前,确保数据被彻底清除,防止数据残留或泄露。
  • 性能优化:在某些应用场景中,预先清零缓存行可能会帮助提升程序的执行效率或减少延迟。
  • 系统初始化:在系统启动或任务启动时,快速初始化大量的内存或缓存区域,为后续操作准备干净的环境。

Cache maintenance 范围选择

对高速缓存的操作可以指定不同的范围。

  • 整块高速缓存。
  • 某个虚拟地址。
  • 特定的高速缓存行或者组和路。

另外在ARMv8架构中最多可以支持7级的高速缓存,L1~L7高速缓存。当对一个高速缓存行进行操作时,我们需要知道高速缓存操作的范围。具体如何选择操作哪一级cache 见文章:【ARM Cache 及 MMU 系列文章 6 – Cache 寄存器 CTR | CLIDR | CCSIDR | CSSELR 使用详解 1】

Cache maintenance 指令集

在这里插入图片描述
例如:

  • DC IGDVAC :操作d-cache,根据虚拟地址无效掉data和Allocation Tags,操作范围到PoC;
  • DC IGVAC :操作d-cache,根据虚拟地址无效掉Allocation Tags,操作范围到PoC。

关于PoC 和 PoU 的详细内容见:【ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习】

最后,我们再看armv8文档中定义的cache指令集:

DC CISW, Data or unified Cache line Clean and Invalidate by Set/Way
DC CSW, Data or unified Cache line Clean by Set/Way
DC CVAU, Data or unified Cache line Clean by VA to PoU
DC ZVA, Data Cache Zero by VA

IC IALLU, Instruction Cache Invalidate All to PoU
IC IALLU{, <Xt>}
IC IALLUIS, Instruction Cache Invalidate All to PoU, Inner Shareable
IC IALLUIS{, <Xt>}
IC IVAU, Instruction Cache line Invalidate by VA to PoU
IC IVAU{, <Xt>}

DC CIVAC, Data or unified Cache line Clean and Invalidate by VA to PoC
DC CVAC, Data or unified Cache line Clean by VA to PoC
DC CVAP, Data or unified Cache line Clean by VA to PoP
DC GVA, Data Cache set Allocation Tag by VA
DC GZVA, Data Cache set Allocation Tags and Zero by VA
DC IGDSW, Data, Allocation Tag or unified Cache line Invalidate of Data and Allocation Tags by Set/Way
DC IGDVAC, Data, Allocation Tag or unified Cache line Invalidate of Allocation Tags by VA to PoC
DC IGSW, Data, Allocation Tag or unified Cache line Invalidate of Allocation Tags by Set/Way
DC IGVAC, Data, Allocation Tag or unified Cache line Invalidate of Allocation Tags by VA to PoC
DC ISW, Data or unified Cache line Invalidate by Set/Way
DC IVAC, Data or unified Cache line Invalidate by VA to PoC
DC CVADP, Data or unified Cache line Clean by VA to PoDP

ARMv8.5-MemTag:
DC CGDSW, Data, Allocation Tag or unified Cache line Clean of Data and Allocation Tags by Set/Way
DC CGDVAC, Data, Allocation Tag or unified Cache line Clean of Allocation Tags by VA to PoC
DC CGDVADP, Data, Allocation Tag or unified Cache line Clean of Allocation Tags by VA to PoDP
DC CGDVAP, Data, Allocation Tag or unified Cache line Clean of Data and Allocation Tags by VA to PoP
DC CGSW, Data, Allocation Tag or unified Cache line Clean of Allocation Tags by Set/Way
DC CGVAC, Data, Allocation Tag or unified Cache line Clean of Allocation Tags by VA to PoC
DC CGVADP, Data, Allocation Tag or unified Cache line Clean of Data and Allocation Tags by VA to PoDP
DC CGVAP, Data, Allocation Tag or unified Cache line Clean of Allocation Tags by VA to PoP
DC CIGDSW, Data, Allocation Tag or unified Cache line Clean and Invalidate of Data and Allocation Tags by Set/Way
DC CIGDVAC, Data, Allocation Tag or unified Cache line Clean and Invalidate of Data and Allocation Tags by VA to PoC
DC CIGSW, Data, Allocation Tag or unified Cache line Clean and Invalidate of Allocation Tags by Set/Way
DC CIGVAC, Data, Allocation Tag or unified Cache line Clean and Invalidate of Allocation Tags by VA to PoC

推荐阅读
https://blog.csdn.net/weixin_42135087/article/details/109772274

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记——路由网络基础——等开销负载均衡

3、等开销负载均衡 等开销负载均衡&#xff1a;到达同一目标网段&#xff0c;存在多条路由条目&#xff0c;存在两条或两条以上的路由优先级值和开销值都是最优的(优先级值和开销值一致)&#xff0c;则这几条路径执行负载均衡(在ping中就是这条路由发个包再下一条路由再发个包…

如何进行光伏户用开发?

1、业主端使用 业主使用手机端进行账户注册&#xff0c;填写个人信息&#xff1b;开设银行二类卡&#xff0c;用于电费的结转。之后就可以进行线上合同签署。 2、踏勘收资 大家可以借助一些踏勘软件&#xff0c;例如无人机踏勘、卫星踏勘等&#xff0c;使用无人机搭载高清摄…

超实惠的GPU云服务器安利!!

自己一个人抱着老笔记本学深度学习&#xff0c;没有GPU是真的难受。Colab用过&#xff0c;GPU稍微用用就被剥夺了。华为云在培训的时候也用过&#xff0c;好贵。现在学到大模型&#xff0c;cuda10.1举步维艰。 失眠在网上冲浪&#xff0c;刷到了潞晨云&#xff0c;一块六就能用…

FFA-Net:用于单图像去雾的特征融合注意力网络

摘要 论文链接&#xff1a;https://arxiv.org/pdf/1911.07559v2 在这篇论文中&#xff0c;我们提出了一种端到端的特征融合注意力网络&#xff08;FFA-Net&#xff09;来直接恢复无雾图像。FFA-Net架构由三个关键组件组成&#xff1a; 一种新颖的特征注意力&#xff08;FA&…

【python】IndexError: Replacement index 1 out of range for positional args tuple

成功解决“IndexError: Replacement index 1 out of range for positional args tuple”错误的全面指南 一、引言 在Python编程中&#xff0c;IndexError: Replacement index 1 out of range for positional args tuple这个错误通常发生在使用str.format()方法或者f-string&am…

SpringBoot: 读取项目的Git版本号

在开发项目的时候&#xff0c;我们经常会想要拿到线上运行的程序版本&#xff0c;以确定程序是否正确发布。Spring Boot提供了这样的能力支持。这个能力的核心组件是3个: Maven插件git-commit-id-maven-plugin&#xff0c;用于生成.properties文件&#xff0c;里边包含git的各…

LeetCode 算法:最大子数组和c++

原题链接&#x1f517;&#xff1a;最大子数组和 难度&#xff1a;中等⭐️⭐️ 题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 …

LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关

角色扮演&#xff1a;在系统指令中告诉千问你需要它扮演的角色&#xff0c;即可沉浸式和该角色对话交流语言风格&#xff1a;简单调整 LLM 的语言风格任务设定&#xff1a;比如旅行规划&#xff0c;小红书文案助手这样的专项任务处理System message 也可以被用于规定 LLM 的答复…

使用 LiteGraph.js 构建可视化工作流图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 LiteGraph.js 构建可视化工作流图 应用场景介绍 LiteGraph.js 是一个轻量级的开源 JavaScript 库&#xff0c;用于构建可视化工作流图。它广泛应用于游戏开发、数据可视化、交互式叙事等领域。 代码基本…

人工智能的兴起和发展

人工智能的兴起 人工智能&#xff0c;artificial intelligence&#xff0c;缩写为AI。 它是随着计算机技术的发展才逐步产生并发展起来的一门学科。关于AI的定义有很多种&#xff0c;通俗一点说&#xff0c;它企图了解智能的实质&#xff0c;并生产出一种新的&#xff0c;能以…

从学士-硕士-博士-博士后-副教授-教授-优青-杰青-长江-院士:一文看懂学术巨人的成长历程

会议之眼 快讯 学术之路&#xff0c;如同攀登一座高耸入云的山峰&#xff0c;需要毅力、智慧和不断的求知探索。从奠定基础的学士&#xff0c;到站在学术巅峰的院士。这条成长之路充满了挑战和机遇。 如果把学术界比作王者荣耀&#xff0c;那么学者们的成长历程就像是在进行一…

真实场景 这周的任意一天,获取上周一到周日的时间范围-作者:【小可耐教你学影刀RPA】

用户场景 我想在这周的任意一天&#xff0c;获取上周一到周日的时间范围&#xff0c;应该怎么做 解决办法1 用指令解决 最简单 解决办法2 自己写逻辑 不过要用到 获取当前日期指令 当前是礼拜几

DuDuTalk柜台拾音器:如何助力营业厅实现3分钟快速风险响应?

在运营商、金融服务、政府服务场景&#xff0c;营业厅是企业和政府与客户互动的第一线&#xff0c;也是风险管理的关键环节。随着技术的发展&#xff0c;以AI技术为基础的新一代营业厅柜台服务智能管理产品——DuDuTalk柜台拾音器已成为营业厅风险管理的新策略&#xff0c;帮助…

Docker部署青龙面板

青龙面板 文章目录 青龙面板介绍资源列表基础环境一、安装Docker二、安装Docker-Compose三、安装青龙面板3.1、拉取青龙&#xff08;whyour/qinglong&#xff09;镜像3.2、编写docker-compose文件3.3、检查语法启动容器 四、访问青龙面板五、映射本地部署的青龙面板至公网5.1、…

TCP的核心属性

TCP的核心属性 一: TCP的核心属性1.1: 确认应答:1.2 : 超时重传1.3 : 连接管理1.3.1 三次握手1.3.2 四次挥手 1.4 滑动窗口1.5: 流量控制:1.6 拥塞控制1.7 延时应答1.8 :捎带应答1.9: 面向字节流1.10 : 异常情况 一: TCP的核心属性 1.1: 确认应答: 保证可靠性最核心的机制 1…

Pinterest免费引流实操演示

这篇文章中你将了解到 1.Pinterest网站介绍&#xff0c;用户群体&#xff0c;适合做什么品类。 2.现在的商家都在上面做什么&#xff1f;案例展示。 3.我们在这个站免费引流要怎么做以及注意事项。 1.Pinterest网站介绍&#xff0c;用户群体&#xff0c;适合做什么品类。 P…

如何令谷歌浏览器搜索时,子页面使用新窗口,而不是迭代打开

1 问题描述 工作相关需要常用谷歌浏览器&#xff0c;但是现在设置就是每次搜索后&#xff0c;点击搜索结果进去之后&#xff0c;都会覆盖掉原来的父页面&#xff0c;也就是如果我看完了这个子页面的内容&#xff0c;关掉的话&#xff0c;我就需要重新google.com来一遍。。。很…

面试题------>MySQL!!!

一、连接查询 ①&#xff1a;左连接left join &#xff08;小表在左&#xff0c;大表在右&#xff09; ②&#xff1a;右连接right join&#xff08;小表在右&#xff0c;大表在左&#xff09; 二、聚合函数 SQL 中提供的聚合函数可以用来统计、求和、求最值等等 COUNT&…

IO流,文件操作

参考 Java IO 基础知识总结 | JavaGuide 史上最骚最全最详细的IO流教程&#xff0c;没有之一&#xff01; - 宜春 - 博客园 零、io-流简介 IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据…

什么是 Batch Normalization 批标准化和全连接层

Batch Normalization 神经元在经过激活函数之后会处于饱和状态&#xff0c;无论后续怎么变化都不会再起作用。 每一层都会进行batch normalization的处理&#xff01; without normalization 会导致数据分布再饱和区 全连接层&#xff1a; 全连接层(fully connected layers&a…