ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识

这篇具有很好参考价值的文章主要介绍了ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

针对不同的使用场景,有不同的cache 策略来影响cache的操作。缓存策略使我们能够描述何时应该将一个cache line写入给data cache,以及当执行store指令并发生cache hit时应该发生什么。cache 策略(policy)主要分为:

  • 分配策略 Allocation policy:控制什么操作可以导致 linefill (将外部内存的一个cache line大小的数据拷贝到cache中)。
  • 替换策略 Replacement policy:针对组相联cache,当发生linefill时,用于选择将数据放入哪个cache line。如果被选中的cache line上有数据,旧数据将会被替换出去。
  • 写策略 Write policy :当CPU 进行写操作时,在cache 中命中,用于决定写入cache 的行为。

一,分配策略 Allocation policy

当CPU 发起一个read/write 请求后,首先会进行 cache look-up,如果出现了 cache miss,即读写的地址不在cache 当中。这时候就要考虑是否要进行 cache linefill,将该地址上的数据从外部内存中拷贝到cache中了。所以分配策略就是用来决定当发生miss时,是否要进行cache linefill的策略。miss 也分为 read miss 和 write miss,所以分配策略也分为WA和RA。

1.1 写分配 Write allocation (WA)

写分配策略ARMv8 和 ARMv7略有不同:

ARMv8

在ARMv8中,一个write miss 将会触发 linefill。这意味着CPU执行一个 store指令的时候,会导致一个读操作发生。在写操作发生前,一个linefill将会相关数据从外部内存中读取,填充到cache line中。cache line是cache 的最小可加载单元,就算CPU写入只写一个byte的数据,也会加载一个cache line size的数据到cache中。

ARMv7

在ARMv7下,写分配 Write allocation (WA)实际上应该叫做读写分配策略(read-write cache allocate policy)。因为在写分配策略下,无论是read miss 还是 write miss都会造成 cache linefill。一般和 写回(write-back)策略组合起来使用(WA+WB)。

1.2 Read allocation (RA)

当read miss的时候才会发生linefill。在RA策略下,如果发生了write miss,cache 不会受影响,并且该write miss的结果和动作会被传递到下一级内存当中。

二,替换策略 Replacement policy

当发生cache miss的时候,cache controler将会在set中选择一个cache line位置用于放置linefill时即将写入的数据。被选中的cache line称为victim。如果victim中包含有效的、dirty的数据,在为新数据腾出空间之前,该victim cache line上的数据必须先写回到下一级内存当中。这个过程也成为 eviction。替换策略主要是决定哪个cache line会被当做victim。

2.1 循环替换策略:Round-robin or cyclic replacement

循环替换策略意味着有个计数器(victim counter)来记录可用的 way number,当计数器到了最大的way number,就会回到0,从头开始。

2.2 伪随机替换策略:Pseudo-random replacement

使用伪随机的方式随机选择victim cache line。victim counter会以伪随机的方式递增,并且可以指向set中的任意一个cache line。

2.3 最近最少使用替换策略:Least Recently Used (LRU)

将最近最少使用的cache line作为victim,替换出去。

ARM的绝大部分处理器都支持循环替换策略和伪随机替换策略。Cortex-A15也支持LRU策略。循环替换策略通常更容易预测下一个victim,但是如果频繁读写固定pattern的地址数据(cache line固定)循环策略很容易将经常使用的cache line替换出去,而LRU替换策略设计成本较高,所以更推荐使用伪随机替换策略。
比如常见的cortex-A53,Cortex-R4, Cortex-R5和 Cortex-R7 都使用伪随机替换策略。

三,写策略 Write policy

当CPU执行一个store指令的时候,首先进行cache look-up,如果发生了cache write hit,那接下来将有两种选择:

3.1 写回法-Write-back (WB)

在写回策略下,写操作只会发生在cache 中,而不是主存中。这意味着cache 里的数据和主存里的数据将会出现不一致的现象:cache 里保存的是最新的数据,而主存中保存的是旧数据(stale data)。所以为了区分新旧数据,cache line里有个dirty标志位,来表明该cache line里的数据是否与下一级内存中的数据保持一致。当新数据写入cache line中而不是主存的时候,该cachle line的dirty bit将会被置位。
ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识,ARM,ARM Cache,arm开发,缓存,嵌入式,写通,写回,读分配,写分配

什么时候cache里的数据才会被写回到主存呢?主要有两种方式:

  • 当发生cache line eviction时,victim cache line将会被写回到下一级内存。
  • 软件使用显式的cache 维护指令时,比如clean/invalidate.
    WB的优势:可以显著地提高性能和节省能耗,因为在WB策略下,CPU写操作大部分时间都是与cache 进行交互,只有在需要的时候,数据才会写回到主存中,极大地减少了向主存搬运数据的动作。
    WB的劣势:cache里的数据和主存中的不一致,尤其是在多核场景下,数据一致性问题(coherency issues)尤为重要。此外,要实现WB,其硬件结构也比WT更复杂。
    ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识,ARM,ARM Cache,arm开发,缓存,嵌入式,写通,写回,读分配,写分配

3.2 写通法-Write-through (WT)

与WB策略不一样,在WB策略下,每次写操作都会写入cache 和主存中。这意味着不需要考虑cache和主存之间的数据一致性问题,所以也不会将cache line的dirty bit置位。但是因为每次写操作都要写到主存中,所以通常情况下WT的性能是要显著低于WB的,尤其是当频繁更新一些相同地址上的数据的时候。如果一大块连续的内存被写入,并且写入的数据进入buffer中,WT策略可能有帮助。另外,如果这些数据在写完后就不再被使用、不会被立刻使用或者很少被使用(大规模的数据拷贝或者内存初始化),对于这种写操作,最好就不用填充到cache当中了,使用WT直接写入内存可能更有帮助。
WT的优势在于硬件结构简单,不存在数据一致性问题。但是其劣势在于放弃了部分cache带来的高性能以及便捷性。
ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识,ARM,ARM Cache,arm开发,缓存,嵌入式,写通,写回,读分配,写分配
ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识,ARM,ARM Cache,arm开发,缓存,嵌入式,写通,写回,读分配,写分配

四,缓存维护策略的组合方式

首先replacement policy根据不同的架构实现,可以选择支持不同的的策略,不会影响到write policy和allocate policy。而write policy和allocate policy之间却有很深的关联性,首先Write-Through策略和Write-allocate策略就不该组合使用,因为WT策略每一次写,不仅写入cache 中,还会写入主存中,当发生write miss时,不需要进行allocation。所以WA策略通常会搭配Write-back使用。常见的缓存维护策略的组合方式有如下三种:

  • 写回+读分配+写分配,Write-Back, Read-Allocate, Write-Allocate. (WB-RA-WA)
  • 写回+读分配,Write-Back, Read-Allocate only. (WB-RA)
  • 写通+读分配,Write-Through, Read-Allocate only. (WT-RA)

五,分析,影响cache性能的因素

通过上文关于缓存策略的描述,我们可以得到缓存性能的关键指标:

  • hit/miss ratio:命中率,或者说时miss的概率。
  • miss penalty:当发生miss时,系统需要额外进行哪些操作(associated costs of a miss penalty)。
  • time for hit :发生hit/miss所需的时间,cache controler收到一个地址,需要进行cache look-up(cache 遍历查找),才能确定是否hit或者miss,而这个查找的时间与cache的结构(组相联、直接映射、全相联映射)有关。

miss penalty和time for hit 与ARM架构的具体实现紧密相关,作为软件层,如果想提高缓存的性能以及系统性能,我们唯一能做的就是提高命中率或者减小miss的概率。

五,分析,软件层可以配置哪些维护策略

Allocate policy(读分配/写分配),Write policy(写通/写回)可以通过配置pagetable,设置memory的空间属性来改变。
replacement policy 替换策略和包含策略(inclusion policy,inclusive和exclusive)是硬件定义好的,软件层无法更改。

六,参考文档

https://developer.arm.com/documentation/den0042/a/Caches/Cache-policies
https://developer.arm.com/documentation/den0013/d/Caches/Cache-policies
http://users.ece.northwestern.edu/~kcoloma/ece361/lectures/Lec14-cache.pdf
https://blog.feabhas.com/2020/10/introduction-to-the-arm-cortex-m7-cache-part-2-cache-replacement-policy/#D-Cache_Replacement_Policy文章来源地址https://www.toymoban.com/news/detail-756785.html

到了这里,关于ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • nginx配置相关策略Content-Security-Policy、Referrer-policy

    nginx配置相关策略Content-Security-Policy、Referrer-policy

    最近在安全测试中发现了一下网站的问题: 主要是配置一些参数:这些可以前端配置,也可以在nginx中进行配置 在nginx的server中添加请求头信息: add_header Content-Security-Policy “upgrade-insecure-requests;connect-src *”; add_header X-XSS-Protection “1; mode=block” always; add_header X-Content-Type-Opt

    2024年02月02日
    浏览(8)
  • SAP 角色维护/分配权限 PFCG 角色查看 SUIM

    SAP 角色维护/分配权限 PFCG 角色查看 SUIM

    不同的角色会需要分配不同的权限,在此介绍两个事务码:PFCG和 SUIM。 PFCG可以用于创建新的角色并分配给不同的用户,角色可以用于控制用户权限,例如这个用户的菜单中是否有事务码MM01,SUIM可以用于查看MM01事务码被分配给了哪些角色,SUIM事务码还有许多其他功能,在此不

    2024年02月02日
    浏览(17)
  • kubernetes网络之网络策略-Network Policies

    Kubernetes 中,Network Policy(网络策略)定义了一组 Pod 是否允许相互通信,或者与网络中的其他端点 endpoint 通信。 NetworkPolicy 对象使用标签选择Pod,并定义规则指定选中的Pod可以执行什么样的网络通信,规则通常由如下三类信息组合而成: 允许访问的其他容器组(容器组不能

    2024年02月15日
    浏览(8)
  • 思科Cisco策略路由(policy route)详细介绍

    注:PBR以前是CISCO用来丢弃报文的一个主要手段。比如:设置set interface null 0,按CISCO说法这样会比ACL的deny要节省一些开销。这里我提醒: interface null 0 no ip unreachable //加入这个命令 这样避免因为丢弃大量的报文而导致很多ICMP的不可达消息返回。 三层设备在转发数据包时一般都

    2024年02月05日
    浏览(16)
  • Web 安全之 Permissions Policy(权限策略)详解

    Permissions Policy 为 web 开发人员提供了明确声明哪些功能可以在网站上使用,哪些功能不能在网站上使用的机制。可以设置一组策略,用于限制站点代码可以访问的 API 或者修改浏览器对某些特性的默认行为。设置 Permissions-Policy 可以在代码库不断演进的同时强制执行最佳实践

    2024年02月09日
    浏览(21)
  • 前端安全-内容安全策略CSP(Content Security Policy)

    前端安全-内容安全策略CSP(Content Security Policy)

    目录 CSP xss 使用方法 http头部设置 meta标签设置 策略集组成 常见指令 default-src report-uri 示例  指令(属性)  指令值(属性值) CSP学习链接  内容安全策略,为了页面内容安全而制定的一系列防护策略。可以通过CSP指定策略来规定页面加载的内容来源(这里的内容可以指脚本

    2024年02月05日
    浏览(7)
  • Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始

    Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始

    近端策略优化(PPO)算法是OpenAI在2017提出的一种强化学习算法,被认为是目前强化学习领域的SOTA方法,也是适用性最广的算法之一。本文将从PPO算法的基础入手,理解从传统策略梯度算法(例如REIFORCE算法)、自然策略梯度算法、信赖域策略优化算法(TRPO)直到PPO算法的演

    2023年04月26日
    浏览(15)
  • Proximal Policy Optimization(近端策略优化)(PPO)原理详解

    Proximal Policy Optimization(近端策略优化)(PPO)原理详解

    本节开始笔者针对自己的研究领域进行RL方面的介绍和笔记总结,欢迎同行学者一起学习和讨论。本文笔者来介绍RL中比较出名的算法PPO算法,读者需要预先了解Reinforcement-Learning中 几个基础定义 才可以阅读,否则不容易理解其中的内容。不过笔者尽可能把它写的详细让读者弄

    2024年02月13日
    浏览(11)
  • 华为之ACL应用于Traffic Policy/华为策略路由匹配原则

    华为之ACL应用于Traffic Policy/华为策略路由匹配原则

    如果报文没有匹配到traffic policy中的Classifier该怎么处理? 一个Traffic policy中可以配置一个或多个Classifier Behavior对。 当收到一个报文,做复杂流分类处理时,会按照Traffic-policy中Classifier Behavior对的配置顺序进行匹配。 如果命中,则停止匹配;如果不命中,则匹配后面的Classi

    2024年02月07日
    浏览(9)
  • Web安全之Content Security Policy(CSP 内容安全策略)详解

    Content Security Policy是一种网页安全策略,现代浏览器使用它来增强网页的安全性。可以通过Content Security Policy来限制哪些资源(如JavaScript、CSS、图像等)可以被加载,从哪些url加载。 CSP 本质上是白名单机制,开发者明确告诉浏览器哪些外部资源可以加载和执行,可以从哪些url加

    2024年02月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包