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

Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略

Cache的数据流

常用名词

  • Allocation 分配
  • Eviction 驱逐
  • 分配策略和更新策略分别为当产生Cache miss和Cache hit的时候数据流的具体行为

1 Cache分配策略(Cache Allocation Policy)

Cache的分配策略是指不同情况下为数据分配Cache Line的不同行为。Cache分配策略分为读和写两种情况。(分配一般都是发生在miss 情况下,因为hit的时候,直接进行读写即可)

1.1 读分配(Read Allocation)

发生条件: CPU读数据,所需读取数据Cache缺失

数据流操作: 从主存读取数据,分配对应Cache Line空间进行缓存

备注: 默认情况下,Cache都支持读分配

1.2 写分配(Write Allocation)

发生条件: CPU写数据,所写数据对应地址Cache缺失

数据流操作:

  • 当不支持写分配时,写指令直接写入主存,只会更新主存数据
  • 当支持写分配时,首先从主存中加载数据到Cache Line中(相当于先做个读分配动作),然后会更新Cache Line中的数据

2 Cache更新策略(Cache Update Policy)

Cache更新策略是指当发生Cache命中时,写操作应该如何更新数据。Cache更新策略分成两种:写直通和回写。

2.1 写直通(Write Through)

发生条件: 当CPU执行store指令并在Cache命中时

数据流操作: 更新Cache中的数据并且更新主存中的数据

备注: Cache和主存的数据始终保持一致

2.2 写回(Write Back)

发生条件: 当CPU执行store指令并在Cache命中时

数据流操作:

  • 只更新Cache中的数据
  • 将dirty bit置位:每个Cache Line中会有一个bit位记录数据是否被修改过,称之为dirty bit(前文的图片中,Cache Line旁边有一个D就是dirty bit)。
  • 在Cache Line被替换或者显示的clean操作时,主存中的数据才会进行更新。因此,主存中的数据可能是未修改的数据,而修改的数据躺在Cache中。

备注: Cache和主存的数据可能不一致

为什么Cache Line大小是Cache控制器和主存之间数据传输的最小单位呢?

因为每个Cache Line只有一个dirty bit。这一个dirty bit代表着整个Cache Line是否被修改的状态。

实例

假设有如下Cache

  • Cache Size 128 Byte
  • Cache Line Size 8 Byte
  • Way=1 直接映射缓存
  • 策略:写分配和写回机制
  • Tag Array中Tag旁边Valid位:是否合法:1代表合法,0代表非法。
  • Data Array中dataCache Line旁边的Dirty位:是否脏,可以理解为是否与主存不一样,1代表dirty(Cache中更新过数据),0代表没有写过数据,即非dirty(与主存一致)

行为1:当CPU从地址0x0654读取1个字节,Cache表现如下:

image-20231126163618725

  • 根据Index找到对应的Cache Line(图中用绿色表示选中的Cache Line)
  • 对应的Tag部分valid bit是合法的(Tag 为 1,如果为不合法的话可以直接刷掉)
  • 合法且Tag的值不相等,因此判断发生缺失
  • 此时需要从地址0x0650地址(请注意Cache Line大小对齐)加载16 Byte数据到该Cache Line中
  • 但是,发现当前Cache Line的dirty bit置位。因此,Cache Line里面的数据不能被简单的丢弃,由于采用写回机制,所以需要将Cache Line中的数据0xFF…FF写回他应该在的主存地址
  • 以Cache Line中的Tag为000001111,Index为101,offset为0(因为需要Cache Line大小对齐),所以地址为0000,0111,1101,0000,即为0x07D0

image-20231126165700623

  • 当写回操作完成,将主存中0x0650地址开始的16个字节0x00…00加载到该Cache Line中,并清除dirty bit。然后根据offset找到0x0654返回给CPU

image-20231126170020828

2 Cache 逐出策略 (Cache Cache Eviction Policy)

缓存逐出策略

2.1 LRU(Least Recently Used)最久没有使用的优先剔除

假设条件: 最近最少使用的那些信息,将来被使用的概率也不大,所以在容量有限的情况下,就可以把这些不常用的信息踢出去,腾地方。认为最近用到的信息以后用到的概率会更大

逐出条件: 把很久没有用过的信息踢出去,也就是 Least Recently Used 的信息被踢出去

备注: 这个是最常用的逐出策略

2.2 FIFO(First In First Out)先进先出

假设条件: 最先进入Cache的最先被用完,之后被使用的概率低

逐出条件: 把最先进入Cache的数据优先剔除,认为他们被优先用完了

2.3 LFU(Least Frequently Used))最低频被使用的优先剔除

假设条件: 越是不常用的用的数据之后使用到的概率越大

逐出条件: 计算每个信息的访问次数,踢走访问次数最少的那个;如果访问次数一样,就踢走好久没用过的那个

备注: 这个算法其实很高效,但是耗资源,所以一般不用

Note

Tag Array 存储在硬件 Cache 里,占用真实 Cache 内存。但是我们提到 Cache Size 的时候,并没有考虑 Tag 的占用。所以计算时,请忽略 Tag 占用。

参考文献

Cache的基本原理 - 知乎
LRU Cache_cache age lru-CSDN博客

相关文章:

Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略

Cache的数据流 常用名词 Allocation 分配Eviction 驱逐分配策略和更新策略分别为当产生Cache miss和Cache hit的时候数据流的具体行为 1 Cache分配策略(Cache Allocation Policy) Cache的分配策略是指不同情况下为数据分配Cache Line的不同行为。Cac…...

角色管理--产品经理岗

研发组织管理--角色管理--产品经理岗 定位 相对稳定和简单产品的独立产品打造者,复杂产品的辅助者 所需资质 校招新人,拥有灵性拥有基础的产品力(认知,设计,创新,推进,学习)Axur…...

SQL数据迁移实战:从产品层级信息到AB测试表

文章目录 创建表插入数据清空数据表数据迁移和筛选查询数据结论 创建表 首先,代码中定义了两个表格:dim_prod_hierarchy_info 和 app_abtest_product_info,都位于 test 数据库中。 dim_prod_hierarchy_info 表用于存储产品层级信息&#xf…...

VMware系列:VMware安装Android虚拟机

VMware系列:VMware安装Android虚拟机 一. 下载镜像这里提供了三种下载镜像方式,也就是三个下载链接,这里推荐百度网盘下载二. 使用VMware Workstation Pro 创建新的虚拟机操作系统应该可以选择任意一个,笔者只试过下图中,如果读者感兴趣可以多试几个,但笔者不保证每个都可…...

链接1:编译器驱动程序

文章目录 GNU编译器示例编译 GNU编译器 GNU编译器(GNU Compiler)是由自由软件基金会(Free Software Foundation,FSF)开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码,将其转换为…...

经典滑动窗口试题(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、水果成篮1、题目讲解2、讲解算法思路3、代码实现 二、找到字符串中所有字母异位词1、题目…...

easyexcel指定sheet页动态给行列加背景色

需求 1、easyexcel,有多个sheet页,某些sheet页的行、列动态需要加背景色。 2、扩展支持cellStyle标记单元格超过64000 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.…...

设计模式在实际业务中应用 - 模版方法

1. 业务背景 作者在工作中主要主导 A 业务线的系统建设,A 业务线主要是零售场景酒水的售卖与即时配送服务。为了方便运营在自研系统中对多平台商品进行管理而开发的三方平台商品管理功能,本次介绍的模版方法模式则是在该功能开发过程中的落地实践。 2.…...

BGP综合实验

任务如下: 1.AS1存在两个环回,一个地址为192.168.1.0/24该地址不能在任何协议中宣告 AS3存在两个环回,一个地址为192.168.2.0/24该地址不能在任何协议中宣告,最终要求这两个环回可以互相通讯 2.整个AS2的IP地址为172.16.0.0/16&…...

Global Surface Summary of the Day 全球逐日气象站点数据 GSOD数据集

数据名称 Global Surface Summary of the Day 数据内容 数据包含以下气象要素的日值观测数据: 气压:平均气压、海平面气压;气温:平均气温、日最高气温、日最低气温;湿度:露点温度(需自行换算…...

Harmony OS4开发入门

代码地址: https://gitee.com/BruceLeeAdmin/harmonyos/tree/master 项目目录介绍 ArkTS介绍 简单案例: State times: number 0/*数据类型:stringnumberany: 不确定类型,可以是任意类型*/State msg: string "hello"…...

.net core 事务

在 .NET Core 中,可以使用 Entity Framework Core 来实现事务处理。下面是一个简单的示例,展示了如何在 .NET Core 中使用 Entity Framework Core 来创建和执行事务: using System; using Microsoft.EntityFrameworkCore; using System.Tran…...

【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...

MPPT工作流程及算法和硬件的选择

MPPT算法选择 目前,MPPT算法有开路电压比率(离线)、短路电流比率(离线)、观察调节(在线)、极限追踪控制法(在线)。 在光伏控制系统中,因为日照、温度等条件的变化,光伏电池的输出功率也是在不断变化的,为保证使得光伏电池的输出功…...

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…...

每日一练【移动零】

一、题目描述 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 二、题目解析 可以…...

QT修改windowTitle的名字以及图片

1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了...

C语言-指针讲解(3)

文章目录 1.字符指针变量1.1 字符指针变量类型是什么1.2字符指针变量的两种使用方法&#xff1a;1.3字符指针笔试题讲解1.3.1 代码解剖 2.数组指针变量2.1 什么是数组指针2.2 数组指针变量是什么&#xff1f;2.2.3 数组指针变量的举例 2.3数组指针和指针数组的区别是什么&#…...

慢 SQL 分析及优化

目录 分析慢 SQL SQL 优化 单表优化 多表优化 慢 SQL&#xff1a;指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法&#xff1a;通过慢查询日志来查找慢 SQL MySQL 的慢查询日志是 MySQL 提供的一种日志记录&#xff0c;它用来记录在 MySQL 中响应时间超过阈值的语句&…...

PTA:计算m到n之间所有素数的和

题目 计算m到n之间所有素数的和&#xff0c;其中 2 < m <n <100 输入格式: 请在这里写输入格式。例如&#xff1a;输入两个正整数 输出格式: 请在这里描述输出格式。例如&#xff1a;输出两个正整数之间的素数和。 样例 输入样例: 在这里给出一组输入。例如&…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...