【ARM】内存属性Memory Attributes (MemAttr)

目录

1. EWA

2. Device

3. Cacheable

4. Allocate

5. 内存属性的传播

6. 事务属性组合

7. Memory Type


       

        内存属性Memory Attributes (MemAttr) 包含Early Write Acknowledgment (EWA), Device, Cacheable, 以及Allocate

1. EWA

EWA,Early Write Acknowledgment ,指示事务的写入完成响应是否必须来自事务的终点:

  • EWA=1:允许来自互连中的中间点,例如Home节点。则该事务的写入完成响应可以来自中间点或来自端点。
  • EWA=0:必须来自事务的最终目的地。

注意:如果不使用EWA属性,完成信号必须来自端点。

EWA断言要求如下:

可以取任意值:

  • •可以在ReadNoSnp和ReadNoSnpSep事务中取任何值。
  • •可以在WriteNoSnp事务中取任何值。
  • •可以在CMO事务中取任何值。
  • •可以在Atomic事务中取任何值。

必须置位:

  • •必须在不是ReadNoSnp、ReadNoSnpSep或CMO事务的其它读、dataless事务中断言
  • •必须在非WriteNoSnp事务的其它Write事务中断言。

不适用:

  • •不适用于DVMOp或PCrdReturn事务中,设置为零。
  • •不适用于PrefetchTgt事务,可取任何值。

2. Device

Device属性指示内存类型是Device还是Normal

Device memory type

        对于exhibit side-effects的位置必须使用Device memory type,连带效应(side-effectts),即对一个地址的数据的操作可能会影响到另一个地址中的数据值。允许对没有exhibit side-effects的位置使用Device memory type。

事务到 Device type memory location的要求如下:

  • •读取事务不能读取超过请求的数据。
  • •不允许从设备内存位置预取(Prefetching)。
  • •读取必须从端点获得数据。不得在完成的中间点将同一地址的写入数据转发给读事务。(也就是说,地址A,有个写操作,你不得在中间点把写入的这个data转发给Read)
  • •不允许将到不同位置的请求合并成一个请求,或将到同一位置的不同请求合并成一个请求。(Gathering属性?)
  • •写入不能合并。
  • •从中间点完成的对Device内存的写入必须使写入数据及时对端点可见。

对设备内存的访问必须使用以下类型,允许使用独占变体(exclusive variants):

  • •对Device内存位置的读取访问必须使用ReadNoSnp。
  • •对Device内存位置的写入访问必须使用WriteNoSnpFull或WriteNoSnpPtl。
  • •CMO事务。
  • •Atomic原子事务
  • •PrefetchTgt预取事务不允许,MemAttr字段不适用可取任何值。

Normal memory type

Normal memory type适用于不会产生side-effects的内存位置。

对Normal内存的访问在预取或转发方面没有Device类型内存那些限制:

  • •已断言EWA的读取事务可以从写入事务中获得读取数据,如果该写入事务已从中间点发送其完成,并且是同一地址。
  • •写入可以合并。

        任何Read、Dataless、Write、PrefetchTgt或Atomic事务类型都可以用于访问Normal内存位置。所使用的事务类型由要完成的内存操作和Snoopable属性决定。

3. Cacheable

Cacheable属性指示事务是否必须执行缓存查找:

  • •当断言Cacheable时,事务必须执行缓存查找。
  • •取消断言Cacheable时,事务必须访问最终目的地。

Cacheable值要求包括:

必须置位:

  • •必须为ReadNoSnp和ReadNoSnpSep以外的任何读取事务断言。
  • •必须为除CleanShared、CleanSharedPersist*、CleanInvalid、MakeInvalid之外的任何Dataless事务断言。
  • •必须为除WriteNoSnpFull和WriteNoSnpPtl之外的任何Write事务断言。

不得置位:

  • 不得为任何Device内存事务断言。
  •  WriteNoSnpDef事务不得断言

可取任意值:

  • •对于发送到Normal memory 位置的ReadNoSnp、ReadNoSnpSep、WriteNoSnpFull和WriteNoSnpPtl事务,可以设为任何值。
  • •对CleanShared、CleanSharedPersist*、CleanInvalid和MakeInvalid事务可以取任何值。
  • •Atomic事务可以取任何值。

不适用:

  • •不适用于DVMOp和PCrdReturn事务,必须设置为零。
  • •不适用于PrefetchTgt事务,可以取任何值。

4. Allocate

Allocate属性是一个分配提示。它指示事务的建议分配策略:

  • •如果断言了Allocate,出于性能原因,建议将事务分配到缓存中。但是,允许不分配事务。
  • •如果取消断言Allocate,出于性能原因,建议不将事务分配到缓存中。但是,允许分配事务。

(那到底要不要allocate?最简单的实现方案就是allocate=1时就分配到cache,有没有其他更加符合性能的allocate条件?)

Allocate属性值要求为:

  • •可以为断言了Cacheable属性的事务断言,除了 ReadOnceMakeInvalid。
  • •必须为WriteEvictFull事务断言 (请求者可以将带有未断言Allocate位的WriteEvictFull转换为Evict事务。)
  • •不得为Device内存事务断言。
  • •对于 Normal Non-cacheable内存事务,不可以断言。
  • •不适用于DVMOp、PCrdReturn和Evict事务,设置为零。
  • •不适用于 PrefetchTgt事务中,可以取任何值。
  • 5. 内存属性的传播

        对于从HN到SN的请求(响应向HN发送的请求),必须保留Device, Cacheable, and Allocate这些 MemAttr bits。

        此规则的唯一例外是当已知下游内存为“Normal”时,则“Device”字段值可以设置为0b0以指示“Normal”,从HN到SN的请求中的SnpAttr属性位值必须始终设置为0b0。当接收到的组合写入请求事务中的写入事务和CMO事务分离时,写入事务继承原始组合请求的MemAttr和SnpAttr值。分离的CMO事务SnpAttr和cacheable位必须设置为最普遍的,以便影响RN-F节点和下游缓存的所有缓存。

对于由于Prefetch或者系统cacheable踢出而在互连内部生成的ReadNoSnp或WriteNoSnp:

  • •MemAttr的EWA、Cacheable和Allocate为设置为 0b1
  • •“Device”字段值必须设置为0b0以表示“Normal”。
  • •SnpAttr字段的值必须设置为0b0,表示Non-snoopable。

6. 事务属性组合

下表列出了MemAttr、SnpAttr和Order字段值的合法组合以及等效的ARM内存类型。

7. Memory Type

R / nR:(Reordering)

E / nE:(Early Write Acknowledgement)

G/ nG:(Gathering and non-Gathering attributes,即多笔命令能否合并成一条命令)。

由以上的R/E属性+Device组合起来得到下面的memory type:

Device nRnE

这种地址需要保序,且不能支持EWA,即从中间节点返回写响应。

Device nRnE内存类型的必需行为是:

  • 写入响应必须从最终目的地获得。(nE)
  • 读取的数据必须从最终目的地获得。(Device)
  • 读取时不能提取超出要求的数据。(Device)
  • 不能预取读取。(Device)
  • 写入不应合并。(Device)
  • 写入的地址范围不得大于原始事务的地址范围。(Device)
  • 从同一来源到同一端点的所有读和写事务必须保持顺序。(nR)

Device nRE

这种地址需要保序,但可以支持EWA,即从POS或POC点返回写响应就可以。)

Device nRE内存类型的必需行为与设备nRnE内存类型相同,但以下情况除外:

  • 写响应可以从中间点获得。(E)

Device RE

这种地址不需要保序,支持EWA。

Device RE内存类型的必需行为与Device nRE内存类型相同,但以下情况除外:

  • •从同一来源到同一端点的读和写事务无需保序。(R)
  • •从同一来源到重叠地址的读和写事务必须保持顺序。(R)

Normal Non-cacheable Non-bufferable

  • 写响应必须从最终目的地获得。
  • 读取的数据必须从最终目的地获得。
  • 可以合并写入。
  • 从同一来源到重叠地址的读和写事务必须保持顺序。

Normal Non-cacheable Bufferable

  • 写响应可以从中间点获得。
  • 写入事务必须在最终目的地及时显示。
  • 读取的数据必须来自:

        ——最终目的地。

        ——正在向其最终目的地推进的写事务。

        如果从写事务中获得读取数据:

        ——必须从最新版本的写内容中获得。

        ——数据不得缓存,以便为稍后的读取提供服务。

  • 可以合并写入
  • 从同一来源到重叠地址的读和写事务必须保持顺序

Write-Back No-allocate

  • 写响应可以从中间点获得。
  • 写事务无需在最终目的地显示。
  • 读取的数据可从中间缓存副本获得。
  • 读数可以预取。
  • 可以合并写入。
  • 读取和写入事务需要高速缓存查找。
  • 从同一来源到重叠地址的读和写事务必须保持顺序。
  • no-allocation属性是一种分配提示,也就是对内存系统的一种建议,出于性能原因,不分配事务。

Write-Back Allocate

        Write-Back Allocate内存类型的必需行为与Write-Back No-allocation Memory的必需行为相同。然而,在这种情况下,分配提示是对存储器系统的推荐,其出于性能原因,事务会被分配。

参考链接:

https://blog.csdn.net/wangwangmoon_light/article/details/126696121

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

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

相关文章

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成(Continuous Integration,CI)工具。 Jenkins 创建任务 选择“流水线”类型,该类型的优点是定制化程度非常高 (可选)添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

一本好的电子画册应这样做,你做对了吗?

​一本好的电子画册,不仅要有吸引人的图文,还可能包括视频、音频等多媒体元素,为读者提供全方位的阅读体验。连贯性是指画册的整体设计风格、内容布局要协调一致,让读者在阅读过程中感受到流畅和自然。创新性则要求创作者在内容呈…

甲骨文(Oracle)云AI专家级证书免费获取攻略

这次分享的是甲骨文云(Oracle)2024年最新最热门的AI专家级证书,活动截止日期7/31。 考试为闭卷监考形式,但小李哥已经把题库准备好,分享给大家。 甲骨文Oracle☁️云计算凭借其Oracle原生产品(数据库、ERP等)在云计算市场中具有一定地位。目前…

Linux:系统引导过程与服务控制

目录 一、linux 系统引导过程 1.1、引导过程总览 1.2、系统初始化进程 (centos 6和7 的区别) 1.2.1、centos 6 的引导过程 init 进程 1.2.2、centos 7(systemd进程) 二、MBR、GRUB菜单、忘记密码故障修复 2.1、修复MBR扇区故障 模拟故障 重启…

代码随想录-Day41

46. 携带研究材料(第六期模拟笔试) 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实…

Git->git pull 和 git pull --rebase的详解

Git拉取代码的坑 格式:git xx指令 origin/远程仓库分支名称假如本地仓库和远程仓库都是空的 本地仓库向远程仓库提交一个文件 git commit -a -m "local first commit":-a暂存修改文件到暂存区,准备本地提交。-m表示提交信息git pu…

2023: 芒种集•序言

2023: 芒种集•序言 2023: 芒种集•序言 从西南旅游回来,一直忙着整理游记“2024:追寻红色足迹”,之后又应初建平索要刘桂蓉遗作“我们一起走过”,于是把“别了,老屋”和诗作“二月”一并合编,把我写的悼念…

重大进展!微信支付收款码全场景接入银联网络

据中国银联6月19日消息,近日,银联网络迎来微信支付收款码场景的全面接入,推动条码支付互联互通取得新进展,为境内外广大消费者提供更多支付选择、更好支付体验。 2024年6月,伴随微信支付经营收款码的开放,微…

Chatopera 云服务实现类海尔服务智能客服的功能点比较 | Chatopera

在上一篇文章中,我分享了《智能客服体验分析,使用小程序海尔服务完成电器报修》。如果使用 Chatopera 云服务实现一个类似的应用,如何做呢?借助 Chatopera 云服务 可以实现一个智能客服,那么和现在的海尔服务小程序会有…

pd17虚拟机安装包:Parallels Desktop 17 激活版

Parallels Desktop 17 是一款功能强大的虚拟机软件,可以在 Mac 计算机上运行 Windows、Linux 和其他操作系统。使用 Parallels Desktop,您可以创建虚拟机并在其中安装各种操作系统,从而能够在同一台计算机上同时运行多个操作系统。 该软件具…

【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间

文章目录 前言一、datetime模块简介二、常用类和方法三、date类四、time类五、datetime类六、timedelta类七、常用的函数和属性八、代码及其演示 前言 Python的datetime模块提供了日期和时间的类,用于处理日期和时间的算术运算。这个模块包括date、time、datetime和…

给前端小白的11个建议(少走弯路)

作为一个编程4年的的前端工程师,一路走来踩过许多坑。希望我的经验能让你少踩些坑,在编程的路上走的更顺些! 1. 禁用var声明 只使用const或let声明变量。并且首选const,当一个变量需要重新赋值时,才使用let。并且在创…

【C++】final关键字 | 避免派生、重写

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

wps linux node.js 加载项开发,和离线部署方案

环境准备 windwos 安装node.js 安装VSCode 安装wps linux 安装node.js 安装VSCode 安装wps 通过npm 安装wpsjs SDK 使用npm安装wpsjs npm install -g wpsjs 创建一个项目 wpsjs create WPS-Addin-PPT 创建项目会让你选择2个东西&#xff1a; 1&#xff1a;选择你的文…

Qt小项目 | 实现迅雷设置界面

文章目录 一、手写代码实现迅雷设置界面 一、手写代码实现迅雷设置界面 使用Qt控件&#xff08;如&#xff1a;QListWidget与QScrollArea等&#xff09;与布局实现腾讯会议登陆界面。设置界面除基本设置界面外&#xff0c;其他界面都是以图片的形式嵌入到项目中并没有手写代码。…

SonarQube集成Jenkins平台搭建

SonarQube平台搭建 一、项目搭建的必要条件 SonarQube 8.9.10 previous LTS 依据公司现有服务目前的Jdk版本1.8&#xff0c;需要选择一个适用的长期支持版本&#xff0c;我在这里选用的是SonarQube 8.9.10 previous LTS。下载地址&#xff1a;Download Previous SonarQube Ver…

制作高校专属PPT时,如何将校徽设置成透明底色?无须PS

目录 示例&#xff1a;以清华大学为例 1必应搜索“清华大学校徽” 2保存清华大学校徽及校名。 3将校徽导入到PPT中 ​4 选中校徽&#xff0c;然后依次选择“图片格式”-->颜色-->设置透明色​编辑 5出现“画笔”&#xff0c;由于截图的缘故&#xff0c;画笔没有在截…

华为仓颉编程语言

目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展&#xff0c;编程语言作为软件开发的核心工具&#xff0c;其重要性日益凸显。近年来&#xff0c;华为公司投入大量研发资源&#xff0c;成功…

合合信息智能文档抽取:赋能不良资产管理行业的数字化转型

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 随着数字化浪潮的汹涌澎湃&#xff0c;全球各行各业正经历着前所未有的变革。人工智能技术的快速发展&#xff0c;以其独特的创新能力和应用潜力&#xff0c;正在深刻地改变着业务模式&#xff0c;推动产业效率的…

Java常用API基础语法(附带思维导图)

常见的API基本语法 String常用的操作方法 toCharArray equals() equalsIgonreCase substring(0,5) 从0-5的下标开始截取 substring&#xff08;5&#xff09; 从下标为5开始往后截取 replace …