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表现如下:

- 根据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

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

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 表用于存储产品层级信息…...
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> /// 大数的(加减乘除)四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…...
每日一练【移动零】
一、题目描述 283. 移动零 - 力扣(LeetCode) 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 二、题目解析 可以…...
QT修改windowTitle的名字以及图片
1.修改名字:点击ui的QMainWindow,然后找到windowTitle的选项修改即可 2.修改windowTitle的图片,依旧是找到windowIcon,选择资源,这个资源可以是你放到qrc里面的图片也可以是外置的图片 3.然后运行就可以看到效果了...
C语言-指针讲解(3)
文章目录 1.字符指针变量1.1 字符指针变量类型是什么1.2字符指针变量的两种使用方法:1.3字符指针笔试题讲解1.3.1 代码解剖 2.数组指针变量2.1 什么是数组指针2.2 数组指针变量是什么?2.2.3 数组指针变量的举例 2.3数组指针和指针数组的区别是什么&#…...
慢 SQL 分析及优化
目录 分析慢 SQL SQL 优化 单表优化 多表优化 慢 SQL:指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法:通过慢查询日志来查找慢 SQL MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阈值的语句&…...
PTA:计算m到n之间所有素数的和
题目 计算m到n之间所有素数的和,其中 2 < m <n <100 输入格式: 请在这里写输入格式。例如:输入两个正整数 输出格式: 请在这里描述输出格式。例如:输出两个正整数之间的素数和。 样例 输入样例: 在这里给出一组输入。例如&…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
