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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成为网络安全高手!教你如何做出专业级别的渗透测试

01、信息收集 1、域名、IP、端口 域名信息查询:信息可用于后续渗透 IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常 端口信息查询:NMap扫描,确认开放端口 发现:一共开放两…

Zookeeper分布式锁实现Curator十一问

前面我们通过Redis分布式锁实现Redisson 15问文章剖析了Redisson的源码,理清了Redisson是如何实现的分布式锁和一些其它的特性。这篇文章就来接着剖析Zookeeper分布式锁的实现框架Curator的源码,看看Curator是如何实现Zookeeper分布式锁的,以…

仿东郊到家预约按摩小程序开发;

在这个快节奏的现代社会,人们对便捷、高效的服务需求日益增大。正因如此,到家预约系统上门按摩小程序应运而生,它结合了互联网技术和传统按摩服务,不仅满足了人们对便捷按摩服务的需求,还为商家提供了全新的商业价值。…

【创建和排查隐藏进程和隐藏计划任务】

Window 创建隐藏进程和隐藏计划任务: 隐藏进程: 在Windows中,隐藏进程主要通过修改进程属性或使用第三方工具实现。以下是一个使用PowerShell脚本创建隐藏进程的示例: $Script {Start-Process -FilePath "notepad.exe"…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报​

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥资讯预览 AI生成技术威胁版权保护,水印技术和法律完善是关键 Sam Altman对…

海外网红挑选指南:6个方法轻松辨真伪,保障合作最佳效果!

随着社交媒体的飞速发展,海外网红营销已经成为品牌推广的重要渠道之一。然而,与日俱增的网红数量也给广告主带来了选择的困扰,因为市场上充斥着各种水分和虚假的网红。为了确保广告效果最大化,广告主需要学会识别真实的海外网红&a…

解锁Jira本地部署的数据中心版高级功能,打造高效、智能、精细化的项目管理

近日,在龙智携手Atlassian与JFrog共同举办的“大规模开发创新:如何提升企业级开发效率与质量”的线下研讨会中,龙智高级咨询顾问、Atlassian认证专家叶燕秀为大家带来了精彩演讲,解锁Jira Data Center版的诸多高级功能&#xff0c…

【探索Linux】—— 强大的命令行工具 P.17(进程信号 —— 信号保存 | 阻塞信号 | sigprocmask() | sigpending() )

阅读导航 引言一、阻塞信号1. 信号相关常见概念(1)信号递达(2)信号未决(3)阻塞信号(4)忽略信号 2. 信号在内核中的表示⭕信号在内核中的表示示意图 3. sigset_t (数据类型…

四氧化三钴和三元前驱体废水回收钴 钴回收树脂技术

钴是一种稀有金属,也是非常重要的过渡金属材料,因其优异的物理、化学性质,以化学品和金属的形式,广泛应用于锂电池、硬质合金、超耐热合金、绝缘材料和磁性材料、工业催化剂、染料及氧化钴的生产过程中。 钴可以提高锂离子电池的稳…

k8s-deployment控制器 5

K8s控制器是Kubernetes(简称k8s)系统中一个重要的组成部分,它是一个管理Pod的中间层,可以创建和管理多个Pod副本,确保它们按照预定的数量和行为进行运行。 通过编写yaml文件将信息全部存到etcd中,控制器通…

NX二次开发UF_CURVE_create_arc 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc Defined in: uf_curve.h int UF_CURVE_create_arc(UF_CURVE_arc_p_t arc_coords, tag_t * arc ) overview 概述 Creates an arc. You input the matrix tag, …

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步? 目录 一、简介 软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

PLC与组态王之间Modbus无线通讯的从站设置

本方案主要详述了在多台西门子300PLC与组态王之间Modbus无线通讯中如何设置从站。方案中所用到的无线通讯终端是DTD434MC——欧美系PLC专用无线通讯终端。 一、方案概述 无线Modbus网络组成如下: 二、测试背景 ● PC端组态软件版本:组态王6.55 ● 默…

错误:FinalShell连接CentOs连接失败

需要说明的是:这个错误不是首次连接发生的,而是多次使用后可能发生的错误 正文: 可能的原因是虚拟机的ip地址发生了变更,原因有以下几点: 最最可能的原因:1.DHCP分配变更: 如果虚拟机使用DHCP来获取IP地址,那么DHCP服务器可能会分配给虚拟机一个新的I…

Matplotlib散点图的创建_Python数据分析与可视化

Matplotlib散点图的创建 plot绘制散点图scatter画散点图plot与scatter效率对比 plot绘制散点图 散点图也是在数据科学中常用图之一,前面的文章我们学习了使用plt.plot/ax.plot画线形图的方法。同样的,现在用这些函数来画散点图: x np.lins…

掌握你的Mac,iStat Menus带你了解mac系统状态

iStat Menus for mac是一款强大的mac系统状态监控工具,它能够提供实时的系统信息和性能监测,帮助用户全面了解和管理自己的Mac设备。无论是CPU、内存、网络、硬盘还是传感器数据,iStat Menus都能直观地展示,并且支持自定义布局和样…

Linux - 动静态库(下篇)

前言 在上篇博客当中,对静态库是什么,怎么使用,简单实现自己的静态库,这些做了描述,具体请看上篇博客: 本篇博客将会对 动态库是什么,怎么使用,简单实现自己的动态库&#xff0c…

14 网关实战:网关聚合API文档

上节课介绍了网关层的认证鉴权,今天这节介绍一下网关层如何聚合API接口文文档。 为什么需要聚合API接口文档? 大型微服务系统模块众多,木谷博客系统就有9个,如果这些服务的接口地址没有一个统一,那么客户端将要保存每个服务的接口地址,这个肯定是不现实。 先来看一下A…

paddleocr笔记

PP-OCRv1 PP-OCR中,对于一张图像,需要完成以下3个步骤提取其中的文字信息: 使用文本检测方法,获取文本区域多边形信息(PP-OCR中文本检测使用的是DBNet,因此获取的是四点信息)。对上述文本多边形…

leetcode面试经典150题——33 最小覆盖子串(滑动窗口)

题目: 最小覆盖子串 描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中…