Cache 替换策略--PLRU算法详解

一、引言

       LRU(Least Recently Used)是 cache 的经典替换策略之一,但当  Cache 的路数比较大时(多路组相连结构),实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU(pseudo-LRU)作为 Cache 的替换策略而不是 LRU。

       PLRU 是 LRU 的一种优化,本文要介绍的是PLRU中的 tree-PLRU(tree-based pseudo-LRU)。

二、PLRU算法原理

       若当前 Cache 为 n 路组相连结构,即一个 Cache Set 中有n个 Cacheline,则 tree-PLRU 会使用(n-1)位来表示近似访问历史顺序的二叉树。根据二叉树的特性,tree-PLRU 将这 n 个Cacheline划分成不同的区块,并用0/1表示区块的访问时间的远近。

        假设有一个4路组相连的 Cache,Cache 替换时会在一个 Cache Set 中的4条 Cache line 中选择一条进行替换,假设这四条 Cache line 编号分别为line_0~3,则 tree-PLRU 会使用 4-1=3bit 来构建二叉树来反映 Cache line 的历史访问顺序。

是
图2.1 Cache line替换选择情况示意图

        如上图所示,每1bit代表了二叉树的一个分支,假设1表示左侧比右侧最近被访问,0表示右侧比左侧最近被访问,判断最近访问行时,箭头指向是“左1右0”

        第0bit位=1,表示最近访问的是line_0或line_1;

        第0bit位=0,表示最近访问的是line_2或line_3;

        第1bit位=1,表示最近访问的是line_0;

        第1bit位=0,表示最近访问的是line_1;

        第2bit位=1,表示最近访问的是line_2;

        第2bit位=0,表示最近访问的是line_3;

        请注意,这里描述的是最近访问顺序。上图二叉树绘制的是替换选择情况,也即选择访问最少的Cache line,叶子节点表示要被替换的Cache line。

       假设 branch_bits = 3'b011,表示最近访问的是 line_0 或 line_1,并且访问的是 Line_0。line_2和 line_3 中最近访问的是 line_3。这样我们就能近似得到一个最近访问顺序了,也即最近访问了 line_0 和 line_3,但 line_1 和 line_2 的之间的访问顺序不确定。

三、PLRU替换过程举例

       假设state = 3'b000,tree-PLRU的初始状态图如下。

       用 state 绘制的二叉树和我们判断最近访问的 branch_bits 正好相反,因为 branch_bits 是判断最近访问的叶子节点,而二叉树反映的是需要剔除的叶子节点(很久未访问),因此正好相反。选择替换行时箭头指的方向是“左0右1”。此时 state=3’b000 表示需要替换的 Cache line 为 line_0,因此我们往 line_0 中填入 data_0。

       填入 data_0 之后,原本指向 line_0 的箭头,因为 line_0 被访问替换了,因此指向 line_1。同理,根节点原本指向左侧(近期访问 line_0 或 line_1)的,反过来指向右侧,表示接下来要去替换(line_2 或 line_3),此时 state = 3’b110。倘若此时来了一个 data_1,将替换 line_2,如下图所示。

       填入 data_1 之后,原本指向 line_2 的箭头,因为 line_2被访问替换了,因此指向 line_3。同理,根节点原本指向右侧(近期访问 line_2 或 line_3)的,反过来指向左侧,表示接下来要去替换(line_0 或 line_1),此时 state = 3’b011。倘若此时来了一个 data_2,将替换 line_1,如下图所示。

       填入 data_2 之后,原本指向 line_1 的箭头,因为 line_1 被访问替换了,因此指向 line_0。同理,根节点原本指向左侧(近期访问line_0 或 line_1)的,反过来指向左侧,表示接下来要去替换(line_2 或 line_3),此时 state = 3’b101。倘若此时来了一个 data_3,将替换 line_3,如下图所示。

       替换掉 line_3 之后,二叉树替换情况的最新 state=3’b000,回到了一开始的时候。由此我们可以发现,每发生一次 cache miss,从根节点到叶子节点路径上的箭头指向都要换向(从↙到↘或从↘到↙)。


       以上是一个4路组相连结构的 Cache 连续发生4次 Cache miss 的 Cache line 替换情况。倘若中途发生了 Cache hit 该如何处理呢?

       我们以上图情况的二叉树为例,倘若此时来了一个 load 访问请求命中了 line_0,那么从第二层到第三层叶子结点的箭头不用发生改变,但是从根节点到第二层节点的箭头需要发生转换。

       根节点的转换表示:由于 line_0 或 line_1 最近被访问了,接下来要去替换的是 line_2 或 line_3。这是 Cache hit 有别于 Cache miss 的点。

四、参考资料

1.people.computing.clemson.edu/~mark/464/p_lru.txt

2.Cache replacement policies(缓存替换策略)/ LRU 和 LFU等算法

3.Cache替换策略之tree-PLRU 

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

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

相关文章

一文带你搞懂C++运算符重载

7. C运算符重载 C运算符重载 什么是运算符重载 运算符重载赋予运算能够操作自定义类型。 运算符重载前提条件: 必定存在一个自定义类型 运算符重载实质: 就是函数调用 友元重载 类重载 在同一自定义类型中,一个运算符只能被重载一次 C重载只能重载…

人工智能与机器学习原理精解【5】

文章目录 最优化基础理论特征值(Eigenvalue)特征向量(Eigenvector)特征值和特征向量的重要性计算方法特征值一、特征值分解的定义二、特征值分解的算法三、特征值分解的例子 正定矩阵Hessian矩阵的特征值Hessian矩阵的含义Hessian…

记Redis 被攻击,数据被定时清除的问题

问题描述 搞自己项目的时候,在云服务器上部署了redis,没有设密码,结果用了几天发现数据老是丢失,排查了过期时间以及内存大小都没有问题,然后注意到了几个陌生的backup1、buckup2、backup3、backup4数据: …

vue element-ui日期控件传参

前端&#xff1a;Vue element-ui <el-form-item label"过期时间" :rules"[ { required: true, message: 请选择过期时间, trigger: blur }]"><el-date-picker v-model"form.expireTime" type"date" format"yyyy-MM-dd&…

FastGPT部署和接入使用重排模型bce-reranker-base

bce-reranker简介 bce-reranker 是一种专门用于信息检索和自然语言处理领域中的重排序(reranking)模型。这种模型由北京智源人工智能研究院(BAAI)开发,是 BGE(BAAI General Embedding)系列的一部分。BGE 系列模型专注于提供通用的嵌入表示,而 bce-reranker 则更进一步…

【C++】透析类和对象(下)

有不懂的可以翻阅我之前文章&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;CSDN_C入门 目录 拷贝构造函数 运算符重载 赋值运算符重载 取地址运算符重载 const成员函数 取地址重载 再探构造函数 初始化列表 类型转换 static成员 友元 内…

MySQL查询执行(二):order by工作原理

假设你要查询城市是“杭州”的所有人名字&#xff0c; 并且按照姓名排序返回前1000个人的姓名、 年龄。 假设这个表的部分定义是这样的&#xff1a; -- 创建表t CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT N…

Docker 搭建Elasticsearch详细步骤

本章教程使用Docker搭建Elasticsearch环境。 一、拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.8.2二、运行容器 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-n

maven clean报错:Failed to delete xxxxx\target\xxxx.jar

问题描述 今天使用maven的clean命令时候出错如下&#xff1a; 分析问题 target文件可能时编译的文件被其他程序占用&#xff0c;导致资源无法回收 解决问题 1 打开任务管理器 右键任务栏。进入任务管理器 点击详细信息 2 进入 点击性能&#xff0c;点击打开资源监视器 …

推荐2024年大家都在用的4款ai写作免费神器

最近公司年中总结&#xff0c;要写好多像工作报告&#xff0c;工作计划之类的文件。我尝试着使用AI写作工具帮助&#xff0c;没想到效果意外的好&#xff0c;省事又省力。如果你也有和我一样的烦恼的话&#xff0c;可以去使用这4个写作工具&#xff0c;都是可以免费使用的。 1、…

错误代码0x80070035是什么情况?针对错误代码0x80070035的解决方法

错误代码 0x80070035 通常与网络连接和文件共享有关&#xff0c;表示“找不到网络路径”。这个问题可能由多种原因引起&#xff0c;包括网络设置不当、服务未启动、注册表配置错误等。今天这篇文章就和大家分享几种针对错误代码0x80070035的解决方法。 针对错误代码0x80070035问…

express连接mysql

一、 安装express npm install express --save二、express配置 //引入 const express require("express"); //创建实例 const app express(); //启动服务 app.listen(8081, () > {console.log("http://localhost:8081"); });三、安装mysql npm i m…

CentOS6.10 更换vault源

CentOS6.10 更换vault源 备份 /etc/yum.repos.d/ 文件夹 cp -a /etc/yum.repos.d/ /etc/yum.repos.d.original/恢复 /etc/yum.repos.d/ 文件夹 rm -rf /etc/yum.repos.d/* ; cp -af /etc/yum.repos.d.original/* /etc/yum.repos.d/用alias将 恢复 /etc/yum.repos.d/ 文件夹 …

简过网:大学生考公,一定要先好好看看这篇文章!

大家好&#xff0c;我是简过网&#xff0c;今天这篇文章我们来聊聊关于大学生考公的那些事儿&#xff0c;希望能给大学生们一点点的帮助&#xff01; 首先&#xff0c;可能有朋友会问了&#xff0c;大学生一般从什么时候开始备考公务员呢&#xff0c;在这里小编建议大家从大三…

mysql1055报错解决方法

目录 一、mysql版本 二、 问题描述 三、解决方法 1.方法一&#xff08;临时&#xff09; 2.方法二&#xff08;永久&#xff09; 一、mysql版本 mysql版本&#xff1a;5.7.23 二、 问题描述 在查询时使用group by语句&#xff0c;出现错误代码&#xff1a;1055&#xf…

FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章FastAPI&#xff08;七十三&#xff09;实战开发《在线课程学习系统》接口开发-- 回复留言&#xff0c;那么我们这次分享删除留言接口的开发…

requirements

flask1.1.1 cachetools5.2.0 pyyaml5.4 requests2.22.0 tqdm4.36.1 redis3.5.3 scikit-surprise1.1.1 numpy1.19.5 pytorch1.10.1 torchvision0.11.2 cpuonly matplotlib3.2.2 pandas0.25.1 scikit-learn0.21.3 joblib0.13.2 pymysql1.0.2 DBUtils3.0.2 faiss py2neo

XSSFWorkbook 和 SXSSFWorkbook 的区别

在现代办公环境中&#xff0c;处理 Excel 文件是一个常见的任务。Apache POI 是一个流行的 Java 库&#xff0c;能够读写 Microsoft Office 文档。对于处理 Excel 文件&#xff0c;Apache POI 提供了 XSSFWorkbook 和 SXSSFWorkbook 两个类。本文将详细介绍这两个类的特点和适用…

许昌建筑设计资质企业如何利用资质提升市场竞争力?

资质升级&#xff1a;不断提升和扩展资质等级&#xff0c;如从乙级升至甲级&#xff0c;这将允许企业承接更大规模和更复杂的项目。 一5零 跟踪行业政策变化&#xff0c;及时申请新开放的资质领域&#xff0c;如智能建筑、绿色建筑等。 三8零六 品…

MySQL可重复读的隔离机制下是否彻底解决了幻读?

答案&#xff1a;没有彻底解决。 一、什么是幻读&#xff1f; 当同一个查询在不同时间产生不同的结果集时&#xff0c;事务中就会出现幻读问题。 幻读关注的是记录数量的不同。 不可重复读关注的是记录内容的不同。 二、快照读和当前读 InnoDB引擎的默认隔离级别是可重复读&…