ARMv8 cache的包含策略inclusive 和 exclusive之间的区别以及Cortex-A55示例详解

Inclusive 和 Exclusive

  • 一, 什么是cache的inclusive 和 exclusive
  • 二,Inclusive 和 Exclusive cache示例
    • 2.1 Inclusive cache
    • 2.2 Exclusive cache
  • 三, inclusive cache和 exclusive cache的比较
    • 3.1 cache coherency
    • 3.2 miss rate
    • 3.3 cache capacity
  • 四,Cortex-A55/Cortex-A53示例详解
  • 五,参考文档

一, 什么是cache的inclusive 和 exclusive

如下图所示,假设系统中有两级cache:L2 cache 和 L1 cache,

  • Inclusive cache: L2包含了所有的L1里的所有有效数据。
  • Exclusive cache: L1 和L2 的数据互斥,同样的一份数据不能同时存在于L1和L2。

在这里插入图片描述

二,Inclusive 和 Exclusive cache示例

2.1 Inclusive cache

假设系统中有两级cache,并且L2 和 L1 是inclusive关系。当CPU对一个地址进行读写时,cache controler会遵守如下规则:

  1. 如果在 L1 cache中hit,则直接将 L1 cache中的数据读取并返回给CPU。
  2. 如果在 L1 cache中miss,但在 L2 cache hit,则把 L2 cache中的数据读取并返回给CPU,同时会把该数据对应的cache line填充到L1 cache中。
  3. 如果规则2中的linefill 操作导致L1中发生cache line eviction,该eviction并不会影响到L2,因为被evict的cache line肯定在L2中有备份。
  4. 如果在 L1 或 L2 中均miss,则从主存中取出对应cache line 数据并对L1和 L2 都进行linefill。
  5. 如果L2 发生eviction,L2 cache会向 L1 cache发送invalidation请求,使L1中对应的cache line失效,以达到L1 和 L2的数据同步。
    在这里插入图片描述

如上图所示,Inclusive cache有如下操作:

  • (a) 假设 L1 和 L2 cache的初始状态为空。
  • (b) CPU发送一个读 X 请求,在L1 和 L2 都会发生read miss,因此对应cache line从主存被linefill到 L1 和 L2。
  • (c ) CPU又发出读 Y 请求,L1 和 L2 也将read miss ,cache line Y 也被linefill到 L1 和 L2 中。
  • (d) 如果cache line X 必须从 L1 中被驱逐(evict),那么它只会从 L1 中移除,不会影响到L2。
  • (e) 如果cache line Y 必须从 L2 中被驱逐(evict),为了保证inclusive policy,它会向 L1 发送invalidation request, L1 会使cache line Y 失效。

2.2 Exclusive cache

假设系统中有两级cache,并且L2 和 L1 是exclusive关系。当CPU对一个地址进行读写时,cache controler会遵守如下规则:

  1. 如果在 L1 cache中hit,则直接将 L1 cache中的数据读取并返回给CPU。
  2. 如果在 L1 cache中miss,但在 L2 cache hit,则把 L2 cache中的数据读取并返回给CPU,同时会把该数据对应的cache line **移动(move)或者说是交换(exchang)**到L1 cache中,可以理解为把 L2的对应cache line移除,填充到L1 中,以保证exclusive。
  3. 如果规则2中的linefill 操作导致L1中发生cache line eviction,这个被驱逐的cache line会被填充到L2中,这是L2 发生linefill的唯一方式,所以也称 这样的L2 cache 为 victim cache,专门接收 L1 的victim cache line的cache。
  4. 如果在 L1 或 L2 中均miss,则从主存中取出对应cache line 数据并只对L1进行linefill,而不是L2。

在这里插入图片描述
如上图所示,Exclusive cache有如下操作:

  • (a) 假设 L1 和 L2 cache的初始状态为空。
  • (b) CPU发送一个读 X 请求,在L1 和 L2 都会发生read miss,但是对应cache line只会从主存被linefill到 L1 。
  • (c ) CPU又发出读 Y 请求,L1 和 L2 也将read miss ,cache line Y 也被linefill到 L1 。
  • (d) 如果cache line X 必须从 L1 中被驱逐(evict),那么它会从 L1 中被evict 到L2。

三, inclusive cache和 exclusive cache的比较

事实上, inclusive cache 和 exclusive cache不存在绝对的性能优劣之分。在具体的约束条件下,系统架构是选择inclusive 还是exclusive ,一定是需要在各种考量因素之间做一个权衡。研究表明,或者说是经验值(a general rule-of-thumb):当L2 cache size 比 L1 cache size大于8 倍及以上时, inclusive 性能更好,反之,exclusive更好。
下面我们将从coherency、miss rate以及capacity的角度来简单分析二者性能上的差异。以下分析基于两层cache,且有多个私有L1以及共享一个L2的情况。

3.1 cache coherency

从维护数据一致性的角度,显然是inclusive cache更简单。因为L1里的数据是L2的一个子集,二者保存着一部分相同的数据。而在exclusive cache下,L1和L2里的内容是互斥的,在有多个私有L1以及共享一个L2的情况下,inclusive cache的coherency维护难度更低。

3.2 miss rate

我们考虑以下场景:

  • 对于inclusive cache:L1发生了linfill,将cache line A填充到L1,同时也填充到L2。如果cache line A的填充导致了L2中cache line B被驱逐,而cache line B恰好在另一个L1中,且经常被使用,由于要保证inclusive,另一个L1也不得不将cache line B给invalidate。这就提高了L1的miss rate。
  • 对于inclusive cache:如果L1 miss, L2 hit,则需要把L2 hit的line和L1中的一条line 交换。而inclusive cache面对这种情况,只需要直接从L2 拷贝 hit cache line到L1中。交换操作要比拷贝操作复杂,所以此时inclusive cache的总线负载和miss penalty更低。
  • 在某个L1中发生miss,cache controler想看看所需的cache line是否存在于其他私有L1中。如果是inclusive cache,就无需遍历其他L1,只需在共享的L2中查找即可。这意味着inclusive cache的miss 延迟更短。

3.3 cache capacity

  • 对于exclusive cache,cache的容量是层次结构中所有cache的总容量。而inclusive cache的内存容量由L2 cache决定的,如果L2 cache较小,则在inclusive cache中浪费的cache容量更多。
  • 对于inclusive ,越大的cache可以使用越大的cache line,这可能减小二级cache tags的大小。而Exclusive需要L1和L2的cache line大小相同,以便进行替换。如果二级cahce是远远大于一级cache,并且cache data部分远远大于tag,省下的tag部分可以存放数据。
  • exclusive方式可以存储更多数据,cache的空间利用率更高。

四,Cortex-A55/Cortex-A53示例详解

在ARM Cortex-A55和Cortex-A53中:

  • L1 data cache 与 L2 cache,采用的是exclusive
  • L1 instruction cache 采用的是inclusive。

如果Cortex-A55实现了L3 cache,L3 cache 的包含策略是动态的,取决于数据使用的行为方式:
如果只有一个core使用该数据,则使用exclusive策略,如果数据在多个core间被分享,则使用inclusive策略。
假设一开始core0对某个数据进行读取,数据将分配到L1或者L2cache 中,而不是在L3 cache。当该数据从L2中被驱逐到L3时,L1和L2将不再保存该数据,如果core再次读取,该数据又会被交换到L1或者L2中,此时的策略还是exclusive。但是如果core1也开始读取该数据,策略将会变成inclusive,core0和core1的L1或者L2中,以及L3都会保存该数据,以便数据在各个core之间共享。

此外,cache的包含策略一般是架构规定好的,软件层无法对其进行配置。

五,参考文档

https://en.wikipedia.org/wiki/Cache_inclusion_policy
https://zhuanlan.zhihu.com/p/159473930
https://blog.csdn.net/zgcjaxj/article/details/114970728
https://people.csail.mit.edu/emer/media/papers/2010.12.micro.tla.pdf
https://arstechnica.com/civis/threads/inclusive-or-exclusive-which-cache-architecture-you-consider-better.668596/
https://forums.anandtech.com/threads/inclusive-or-exclusive-which-cache-architecture-you-consider-better.1091585/

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马尔可夫链预测 (Markov Chain)

一、人寿保险案例(两状态) 人寿保险公司把人的健康状态分为健康和疾病两种,以一年为一个时段,研究健康状态的转变。假设对某一年龄段的人来说,今年健康,明年继续保持健康的概率为0.8,即明年转为疾病的概率…

AI 编码助手 Codewhisperer 安装步骤和使用初体验

文章作者:为了自己加油 最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手 Amazon Code Whisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。Amazon Code Whisperer与 GitHub Copilot 类似,…

Python异步编程并发执行爬虫任务,用回调函数解析响应

一、问题:当发送API请求,读写数据库任务较重时,程序运行效率急剧下降。 异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用,经常面临对外发送网络请求,调用外部接口,或者不断更新数据库或文…

测试与FastAPI应用数据之间的差异

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 当使用两个不同的异步会话来测试FastAPI应用程序与数据库的连接时,可能会出现以下错误: 在测试中,在数据库中创建了一个对象&#x…

分布式应用之监控平台zabbix的认识与搭建

一、监控系统的相关知识 1.1 监控系统运用的原因 当我们需要实时关注与其相关的各项指标是否正常,往往存在着很多的服务器、网络设备等硬件资源,如果我们想要能够更加方便的、集中的监控他们,zabix可以实现集中监控管理的应用程序 监控的…

微服务保护

1.初识Sentinel 1.1.雪崩问题及解决方案 1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞…

Maven高级---分模块设计,继承(继承关系/版本锁定/自定义属性)

目录 分模块设计 继承与聚合 继承关系 ​案例​ 版本锁定 自定义属性/引用属性 分模块设计 把一个项目拆分成不同的模块 我们可以把原来一个项目包中的东西单独提出来作为一个模块,也是解耦的思想 然后我们可以通过引入依赖的方式将这两个模块引入,如下 继承与聚合 继…

基于springboot高校场馆预订系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux查看系统信息

# 查看操作系统的详细信息 uname -a# 查看已安装的Linux发行版信息 cat /etc/os-release# 查看Linux Standard Base (LSB)的信息 lsb_release -a# 查看主机的信息 hostnamectl# 查看文件系统的磁盘空间使用情况 df -h# 查看系统内存的使用情况 free -h# 查看网络接口的信息 ifc…

Android内存优化内存抖动的解决实战

问题背景 假设我们有一个应用,它的功能是在一个TextView上显示一个计数器,每隔一秒钟就更新一次计数器的值。为了实现这个功能,我们使用了一个Handler来发送空消息,并在接收到消息时更新计数器的值,并再次发送空消息&…

利用爬虫技术自动化采集汽车之家的车型参数数据

导语 汽车之家是一个专业的汽车网站,提供了丰富的汽车信息,包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息,我们可以通过浏览器手动访问网站,或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写…

Android 实现椭圆形中心发散渐变绘制

1. 前言 工作中有一个需求,需要实现一个椭圆形的中心发散渐变效果,并且可以自由指定椭圆比例,旋转角度等。 Android中实现椭圆形的绘制很简单,只需要调用canvas.drawOval()就可以了,圆形的中心发散渐变可以使用RadialGradient,但是椭圆形的中心发散渐变效果Android自带的…

浅谈Deep Learning 与 Machine Learning 与Artificial Intelligence

文章目录 三者的联系与区别 三者的联系与区别 “Deep Learning is a kind of Machine Learning, and Machine Learning is a kind of Artificial Intelligence.” 人工智能(AI),机器学习(Machine Learning,简称ML&am…

Linux环境变量配置说明(配置jdk为例-摘录自尚硅谷技术文档)

配置环境变量的不同方法 Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/.sh,~/.bashrc,~/.bash_profile等,下面说明上述几个文件之间的关系和区别。 bash的运行模式可分为login shell和non-login shell。 例…

Unity3D C# 反射与特性的配合使用

需求分析 情况: 假如我们是一个动物园的管理员,我们需要统计园内的所有动物和动物的行为。 举例: 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌,狗对应狗吠和干饭,鸡对应篮球和打鸣那么这时候我要统计这些&a…

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据...

全文链接:http://tecdat.cn/?p24492 此分析的目的是构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括 1258 天的股票收益(点击文末“阅读原文”获取完整代码数…

Linux chmod命令——修改权限信息

我们可以使用chmod命令,修改文件、文件夹的权限信息。注意,只有文件、文件夹的所属用户或root用户可以修改。 chmod [-R] 权限 文件或文件夹 -R,对文件夹内的全部内容应用同样的操作 例如: chmod urwx,grx,ox hello.txt &…

基于微信小程序的项目申报管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…

flarum 论坛 User Statistics插件修改

此插件在中国使用日期不是很理想,于是决定修改代码 下面是插件信息: User Statistics A Flarum extension. Add some user statistics in flarum posts, this extension require clarkwinkelmann/flarum-ext-likes-received and will be installed au…