当前位置: 首页 > news >正文

ARMv8如何读取cache line中MOESI 状态以及Tag信息(tag RAM dirty RAM)

本文以Cortex-A53处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MOESI信息。
Cortex-A53提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元的机制。这个功能可以探查出当缓存中的数据与主存中的数据不一致时存在的问题。
此外,A64模式和A32模式的读取方式不同:
当处理器处于A64模式时,先通过一些只写(write-only)寄存器来选择具体的cache line和内存地址,然后通过只读寄存器来读取具体的tag信息。下图为相关寄存器以及相关操作指令,需要注意的是,这些操作只在EL3时可用,如果在其他模式下使用这些指令,将会进入Undefined Instruction 异常。
在这里插入图片描述
当处理器处于A32模式下时,先通过一些只写(write-only)CP15寄存器来选择具体的cache line和内存地址,然后通过只读CP15寄存器来读取具体的tag信息。下图为相关寄存器以及相关操作指令,需要注意的是,这些操作只在EL3时可用,如果在其他模式下使用这些CP15指令,将会进入Undefined Instruction 异常。
在这里插入图片描述
接下来,本文以Cortex-A53的Data cache为例,读取其某个cache line的tag信息,其具体的步骤很简单,分为两步:

  1. 写入Data Cache Tag Read Operation Register,写入的内容为具体的Set和way信息,通过way index和set index来定位到想要读取的cache line。
  2. 读取相应的 Data Register 0 和 Data Register 1寄存器,通过对Data Register寄存器里面的数据进行解码,来获取tag 信息。
    其他信息,比如Data cache 的data信息Instruction Cache的data或者tag信息,以及TLB的data信息,都可以用这种方式读取得到。

Step1:将Set/way信息写入Data Cache Tag Read Operation Register

首先,我们需要从一个虚拟地址(VA)中解析出Set index信息。
下图为Cortex-A57的4-way组相连的32KB大小的data cache结构,其cache line大小也为64 bytes,从图中可知,一个VA可以被分成几个部分:Tag,Set index,word index以及byte index。其中Set index = VA[13:6]。
在这里插入图片描述
在另一个实例中,32KB大小的4-way组相连data cache,cache line大小为32 bytes,其Set index = VA[12:5]:
在这里插入图片描述
Cortex-A53的Data cache为4-way 组相连结构。假设其为32KB,一个cache line的大小为64 bytes,我们就可以求出该data cache中有 32 KB / 64 B / 4 = 2^7 = 128个set(组),也就是说至少需要7个bit才能完整解析出具体的set index。如下图所示,可以通过公式:

S = log2(Data cache size / 4).

来计算出Set index的范围:Set index = VA[12:6]。
由于是4-way 组相连结构,cache line 可以存在与任意一个way中,所以我们的cache way可能为0,1,2,3中任意一个数字。
求得了set和way的index后,需要对其进行编码,然后写入到Data Cache Tag Read Operation Register寄存器中。其编码规则如下图所示,只需将Set和way的值写入对应的bit中即可,其中Rd[5:3]为cahche double word数据的偏移量,由于本次示例是读取tag信息,所以Rd[5:3]为0即可。
在这里插入图片描述
所以我们要写入Data Cache Tag Read Operation Register的Rd的值可以通过以下代码获取:

unsigned int get_Rd_data(int * VA, way_num)
{unsigned int set_way_index = VA | 0x1FC0; //get way index, VA[12:6]set_way_index |= way_num < 30; //way_num could be 0,1,2,3 return set_way_index;
}

Rd中除了Set和way信息,其他值均为0,0x1FC0为VA[12:6]全为1的情况:
在这里插入图片描述
然后我们使用CP15寄存器将Rd的值写入,假设Rd为R0:

MCR p15, 3, r0, c15, c2, 0   ; r0 = get_Rd_data(VA,way_num)

Step2:读取Data Register 1和Data Register 0数据并解码

将Set/way信息写入Data Cache Tag Read Operation Register 后,相当于选择了想要操作的cache line,接下来我们将读取Data Register 1和Data Register 0的数据来获取该cache line里的tag信息,除了tag信息外,我们还可以从Data Register 1和Data Register 0两个寄存器中获取:

  1. MOESI 状态信息
  2. outer内存属性
  3. valid 信息
    可获得的信息具体见下图:
    在这里插入图片描述
    在这里插入图片描述
    需要注意的是,如果是想获取MOESI状态信息,则需要两个寄存器配合使用,即读取Data Register 0 [1:0]以及Data Register 1 [30:29] ,Data Register 0 [1:0]里的为来自Dirty RAM的部分状态信息,Data Register 1 [30:29]里的为来自tag RAM的部分MOESI信息,
    其具体的组合见下图:
    在这里插入图片描述
    比如读取到的Data Register 0 [1:0]为1,以及Data Register 1 [30:29]也为1,根据上图的组合关系,可知当前cache line的MOESI状态为 SharedDirty(O)。

示例代码如下:

; step 1: write set index and way num into Data Cache Tag Read Operation Register
MCR p15, 3, r0, c15, c2, 0   ; r0 = get_Rd_data(VA,way_num)
; step 2: read Data Register 1 and Data Register 0
MCR p15, 3, r1, c15, c0, 0   ;r1 =  Data Register 0 
MCR p15, 3, r2, c15, c0, 1   ;r2 =  Data Register 1 

参考文章:
DDI0500E_cortex_a53_r0p3_trm.pdf

相关文章:

ARMv8如何读取cache line中MOESI 状态以及Tag信息(tag RAM dirty RAM)

本文以Cortex-A53处理器为例&#xff0c;通过访问 处理器中的内部存储单元&#xff08;tag RAM和dirty RAM&#xff09;&#xff0c;来读取cache line 中的MOESI信息。 Cortex-A53提供了一种通过读取一些系统寄存器&#xff0c;来访问Cache 和 TLB使用的一些内部存储单元的机制…...

学习通学习--脚本

刷客就爱学学习-首页 (xxbwk.top) 所有科目答案可以网上找超星尔雅学习通《形势与政策》2023年春章节测试答案 (3gmfw.cn) 学习通全部答案 萌面人 – 萌面人官网 (mengmianren.com) 自动答题教程 想要使用自动答题功能&#xff0c;只需要一个配置项就可以让OCS脚本拥有自动答…...

C盘的深度清理

随着反复安装和移除软件&#xff0c;c盘虽然给了80或者100G的空间&#xff0c;也经不住垃圾文件的堆积。居然只剩下几兆空间了。真是可气&#xff0c;某些软件虽然移除了。但是他们不负责自己产生的文件夹和文件的深度清理。 1. 清理系统的垃圾 2. 移动或者清理大文件。 某…...

43掌握自动化运维工具 Puppet 的基本用法,包括模块编写、资源管理

Puppet是一种自动化配置管理工具&#xff0c;可以自动化地部署、配置和管理大规模服务器环境。本教程将介绍Puppet的基本用法&#xff0c;包括模块编写和资源管理。 模块编写 在Puppet中&#xff0c;模块是一组相关的类、文件和资源的集合。模块可以用于部署和配置应用程序、服…...

【新2023Q2押题JAVA】华为OD机试 - 硬件产品销售方案

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:硬件产品销售方案 题目描述 …...

three.js实现3d球体树状结构布局——树状结构的实现

目录系列文章安装依赖基本分析实体类场景相机渲染器辅助线环境光点光源球形几何体球形几何体的材质线几何体线几何体的材质物体文本轨道控制实现效果实现源码参考文档系列文章 three.js实现3d球体树状结构布局——添加入场、出场、点击放大等动画 安装依赖 npm i three three…...

ChatGPT大解密:带您探讨机器学习背后的秘密、利用与发展

一、什么是机器学习&#xff1f;二、ChatGPT 的运作原理三、ChatGPT 生活利用1、自然语言处理2、翻译3、自动回复四、ChatGPT vs 其他相关技术五、ChatGPT 的未来1、未来发展2、职业取代3、客服人员4、翻译人员5、语言学家6、机遇与挑战六、结语这篇文章&#xff0c;将带着各位…...

3ds max2024带来了什么新功能(一)

文章目录1、安装2、操作界面3、快捷键&#xff08;不冲突了&#xff09;4、 修改器列表&#xff08;可以搜索了&#xff09;5、超级阵列功能&#xff08;Array&#xff09;6、超级布尔1、安装 传说3dmax2024有很多牛叉的改进二话不说&#xff0c;先安装按起来&#xff01;这个…...

HNU-电路与电子学-实验3

实验三 模型机组合部件的实现&#xff08;二&#xff09;&#xff08;实验报告格式案例&#xff09; 班级 计XXXXX 姓名 wolf 学号 2021080XXXXX 一、实验目的 1&#xff0e;了解简易模型机的内部结构和工作原理。 2&#xff0e;分析模型机的功能&am…...

Hadoop MapReduce各阶段执行过程以及Python代码实现简单的WordCount程序

视频资料&#xff1a;黑马程序员大数据Hadoop入门视频教程&#xff0c;适合零基础自学的大数据Hadoop教程 文章目录Map阶段执行过程Reduce阶段执行过程Python代码实现MapReduce的WordCount实例mapper.pyreducer.py在Hadoop HDFS文件系统中运行Map阶段执行过程 把输入目录下文件…...

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好&#xff0c;我是CSDN的拿我格子衫来&#xff0c; 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦&#xff0c;这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜&#xff0c;最终开花结果。感触良多&#xff0c;今天就借这篇文章来谈一谈这本书的…...

【分享】如何写出整洁的代码?

文章目录前言1.为什么要保持代码整洁?1.1 所以从一开始就要保持整洁1.2 如何写出整洁的代码?2.命名3.类3.1单一职责3.2 开闭原则3.3 内聚4.函数4.1 只做一件事4.2 函数命名4.3 参数4.4 返回值4.5 怎样写出这样的函数?4.6 代码质量扫描工具5.测试5.1 TDD5.2 FIRST原则5.3 测试…...

视频剪辑:教你如何调整视频画面的大小。

大家应该都会调整图片的大小吧&#xff0c;那你们会调整视频画面的大小吗&#xff1f;我想&#xff0c;应该会有人不还不知道要调整的吧&#xff0c;今天就让小编来教大家一个方法怎样去调整视频画面的大小尺寸。 首先&#xff0c;我们要有以下材料&#xff1a; 一台电脑 【…...

操作系统概述

Overview Q1&#xff08;Why&#xff09;:为什么要学操作系统&#xff1f;Q2&#xff08;What&#xff09;&#xff1a;到底什么是操作系统&#xff1f;Q3&#xff08;How&#xff09;&#xff1a;怎么学操作系统&#xff1f; 一.为什么要学操作系统&#xff1f; 学习操作系统…...

记录重启csdn

有太多收藏的链接落灰了&#xff0c;在此重启&#xff5e; 1、社会 https://mp.weixin.qq.com/s/Uq0koAbMUk8OFZg2nCg_fg https://mp.weixin.qq.com/s/yCtLdEWSKVVAKhvLHxjeig https://zhuanlan.zhihu.com/p/569162335?utm_mediumsocial&utm_oi938179755602853888&ut…...

蓝牙耳机哪个品牌质量最好最耐用?蓝牙耳机排行榜10强推荐

现今&#xff0c;外出佩戴蓝牙耳机的人越来越多&#xff0c;各大品牌厂商对于蓝牙耳机各种性能的设计也愈发用心。那么&#xff0c;无线耳机哪个品牌音质好&#xff1f;下面&#xff0c;我来给大家推荐几款质量好的无线蓝牙耳机&#xff0c;可以当个参考。 一&#xff0e;南卡…...

mysql 双主架构详解

文章目录 一、背景二、MySQL双主(主主)架构方案三、MySQL双主架构图四、MySQL双主架构的优缺点五、MySQL双主架构,会存在什么问题?总结一、背景 MySQL 主从模式优缺点 容灾:主数据库宕机后,启动从数据库,用于故障切换 备份:防止数据丢失 读写分离:主数据库可以只负责…...

计算机指令系统基础 - 寻址方式详解

文章目录1 概述2 常见寻址方式2.1 立即寻址2.2 直接寻址2.3 间接寻址2.4 寄存器寻址2.5 寄存器间接寻址2.6 相对寻址2.7 变址寻址3 扩展3.1 操作码3.2 常见寄存器1 概述 计算机指令&#xff1a;指挥计算机工作的 指示 和 命令内容&#xff1a;通常一条 指令 包括两方面的内容 …...

React Three Fiber动画入门

使用静态对象和形状构建 3D 场景非常酷&#xff0c;但是当你可以使用动画使场景栩栩如生时&#xff0c;它会更酷。 在 3D 世界中&#xff0c;有一个称为角色装配的过程&#xff0c;它允许你创建称为骨架的特殊对象&#xff0c;其作用类似于骨骼和关节系统。 这些骨架连接到一块…...

为什么我推荐你使用 systemd timer 替代 cronjob?

概述 前几天在使用 Terraform cloud-init 批量初始化我的实验室 Linux 机器。正好发现有一些定时场景需要使用到 cronjob, 进一步了解到 systemd timer 完全可以替换 cronjob, 并且 systemd timer 有一些非常有趣的功能。 回归话题&#xff1a;为什么我推荐你使用 systemd t…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...