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.xdnf.cn/news/140743.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Docker 安装 Elasticsearch (本地环境 M1 Mac)

Elasticsearchkibana下载安装 docker pull elasticsearch:7.16.2docker run --name es -d -e ES_JAVA_OPTS“-Xms512m -Xmx512m” -e “discovery.typesingle-node” -p 9200:9200 -p 9300:9300 elasticsearch:7.16.2docker pull kibana:7.16.2docker run --name kibana -e EL…

最频繁被问到的SQL面试题

面试感叹失败的原因可能有很多,而做成的道路只有⼀条,那就是不断积累。纯手工的8291字的SQL面试题总结分享给初学者,俗称八股文,期待对新手有所帮助。 窗口函数题 窗口函数其实就是根据当前数据, 计算其在所在的组中的统计数据。…

网工基础知识——以太网

1972年Bob Metcalfe“以太网之父”被Xerox雇佣为网络专家,Bob Metcalfe 来到Xerox公司的Palo Alto研究中心(PARC)的第一个任务是把Palo Alto的计算机连接到ARPANET(Internet的前身)上。1972年底Bob Metcalfe以ALOHA系统…

嵌入式开发笔记:STM32的外设GPIO知识学习

GPIO简介: • GPIO ( General Purpose Input Output )通用输入输出口 • 可配置为 8 种输入输出模式 • 引脚电平: 0V~3.3V ,部分引脚可容忍 5V (如舵机和驱动直流电机) • 输出模式下可控制端口…

机器学习 day35(决策树)

决策树 上图的数据集是一个特征值X采用分类值,即只取几个离散值,同时也是一个二元分类任务,即标签Y只有两个值 上图为之前数据集对应的决策树,最顶层的节点称为根节点,椭圆形节点称为决策节点,矩形节点称…

springboot整合返回数据统一封装

1、MagCode,错误码枚举类 package com.mgx.common.enums;import lombok.*; import lombok.extern.slf4j.Slf4j;/*** 错误码* author mgx*/ Slf4j NoArgsConstructor AllArgsConstructor public enum MsgCode {/*** 枚举标识,根据业务类型进行添加*/Code…

阻塞队列-生产者消费者模型

阻塞队列介绍标准库阻塞队列使用基于阻塞队列的简单生产者消费者模型。实现一个简单型阻塞队列 (基于数组实现) 阻塞队列介绍 不要和之前学多线程的就绪队列搞混; 阻塞队列:也是一个队列,先进先出。带有特殊的功能 &…

Learn Prompt-提供示例

目前我们与 ChatGPT 交流的主要形式是文字。提示除了指令问题的形式外,还可以包含例子。特别是当我们需要具体的输出时,提供例子可以省去我们对具体任务的解释,帮助ChatGPT更好地理解我们的确切需求,从而提供更准确,更…

【数据结构】哈希应用——位图、布隆过滤器

文章目录 一、位图1.基本概念2.基本实现3.基本应用3.1 找100亿个整数只出现一次的数3.2 两个文件分别有100亿整数,1G内存,求交集 二、布隆过滤器1、基本实现2、基本应用2.1过滤一部分的数据2.2 两个文件,分别100亿个查询,1G内存&a…

[Linux入门]---管理者操作系统

文章目录 1.操作系统概念2.设计操作系统的目的3.操作系统如何进行管理系统调用和库函数概念 1.操作系统概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括: 内核(进程管理,内存…

C# OpenCvSharp Yolov8 Detect 目标检测

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Open…

索引(含B树、B+树)

1、索引(index) 索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。 一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引。 索引相当于一本书的目录,是为了缩小扫描…

Avl树(有详细图解)

目录 介绍 引入 概念 特点 模拟实现 思路 插入 旋转 左旋 无子树 有子树 右旋 无子树 有子树 左右旋 引入(也就是有子树版本的抽象图解) 解决方法(也就是左右旋) 总结 无子树(也就是curright的位置就是newnode) 有子树 模型高度解释 旋转 更新三个…

深度学习修炼(二)全连接神经网络 | Softmax,交叉熵损失函数 优化AdaGrad,RMSProp等 对抗过拟合 全攻略

文章目录 1 多层感知机(全连接神经网络)1.1 表示1.2 基本概念1.3 必要组成—激活函数1.4 网络结构设计 2 损失函数2.1 SOFTMAX操作2.2 交叉熵损失函数 3 优化3.1 求导计算过于复杂?3.2 链式法则导致的问题?3.3 梯度下降算法的改进…

八大排序(二)快速排序

一、快速排序的思想 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右…

免费的AI写作软件-智能AI写作工具

我们要谈的话题是AI写作,尤其是免费AI写作,以及147SEOAI写作免费工具。您是否曾经为了创作文章而感到煞费苦心?是否一直在寻找一种能够轻松生成高质量文章的方法? 147GPT批量文章生成工具​www.147seo.com/post/2801.html​编辑ht…

Flink TaskManger 内存计算实战

Flink TaskManager内存计算图 计算实例 案例一、假设Task Process内存4GB。 taskmanager.memory.process.size4096m 先排减JVM内存。 JVM Metaspace 固定内存 256mJVM Overhead 固定比例 process * 0.1 4096 * 0.1 410m 得到 Total Flink Memory 4096-256-410 3430m 计…

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows

求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西,最近研究了下 l4d2(求生之路2)这款游戏的搭建以及架设过程。今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器。毕竟自己当服主是热爱游…

华为云云耀云服务器L实例评测|redis漏洞回顾 MySQL数据安全解决 搭建主从集群MySQL 相关设置

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到过MySQL数据库被攻击的情况,数据丢失,还好我有几份备份,没有造成太大的损失;后来有发现Redis数据库被攻击的情况,加入了redis密…