[转帖]一个故事看懂CPU的TLB
https://www.cnblogs.com/xuanyuan/p/15347054.html
Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了~
我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的~
虚拟地址翻译
一大早,我们一号车间MMU(内存管理单元)部门的小黑就来到领导办公室,恰好我也在。

“领导,听说您同意了阿Q他们的方案,给每个车间都划拨了缓存建设预算?”
“你这小子,消息还挺灵通的。没错,内存那家伙实在太慢了,加了缓存后,不用每次都从内存读取数据,能让咱们的性能提升不少”,领导说到。
“那我们MMU部门也要申请一笔经费”,小黑说到。
领导眉头一紧,问道:“你们要申请经费干什么?”
“我们也要建设缓存”
“你们MMU部门做地址翻译工作,要缓存做什么,怕不是看领导给我们拨了款,眼红了吧?”,我在一旁说到。
小黑转过身来,看着我说道:“说我眼红,我倒是问你,你知道虚拟地址翻译的过程吗?”
这可难不倒我,以前就没少听他说过,“怎么不知道?以32位的虚拟地址为例,一个32位的虚拟地址分为三部分,分别是页目录索引、页表索引、页内偏移。翻译的时候,从CR3寄存器中取出页目录地址,根据页目录索引找到页表,再根据页表索引找到物理内存页面,最后根据页内偏移,完成寻址。我说的对吧?”

“嘿,你小子不错啊,记性挺好”,小黑有点不敢相信,随后又问到:“既然你知道,那我再问你,这读取一次数据,需要访问几次内存?”
我思考了一下,开始算了起来。从页目录表中读取一次,从页表中再读取一次,最后访问页面内数据再读取一次,总共就是三次。
“需要访问三次内存!”,我回答到。
小黑点了点头说道:“没错,你知道的,内存那家伙本来就慢,这每读写一个数据,都要访问内存三次,这谁顶得住啊?”
说的是啊,内存那家伙慢我是知道的,但读写一次就要折腾三回,我倒是没想过。
“就这还是32位地址的情况,我还没算64位下变成了4级页表呢,那访问内存的次数就更多了!”
“好在咱们马上就要建设缓存设施了,也不用每次都从内存读取数据,要是缓存能找到,就不用读取内存了嘛!”
“可是查页目录和页表还是得要两次啊”,小黑说到。
“要是能把地址翻译的结果也缓存起来就好,就不用每次都从内存查了”,我陷入了思考。
“你看,你跟我想到一会儿去了,所以我才向领导申请,咱们MMU部门也加上缓存,这样地址翻译变快了,咱们整个车间工作效率才高嘛!”

这时,领导站了起来,说道:“唉~格局要打开,光你们一号车间提高不行,得发动全厂八个车间一起。小黑,经费的问题不用担心,这事由你牵头,把其他几个车间的MMU部门负责人召集起来开个会,把你说的方案落地下去”
“没问题!”,领导这么一说,小黑高兴坏了。
地址翻译缓存
回去的路上,我又忍不住好奇,向小黑打听起来:“你们这翻译地址用的缓存,准备怎么个弄法?”
“我还没想的很成熟,只有个大概的方案”
“快给我透露一下”
“好吧,告诉你也无妨!我举个例子吧,假设要翻译的虚拟地址是0x12345678,这是一个32位的地址,前面的20位是0x12345000,经过两次查表后,定位到真实的物理页面0x00abc000,最后再加上页内偏移,翻译结果就是0x00abc678”

“地址翻译完成后,将虚拟页编号0x12345和物理页编号0x00abc的映射关系记录起来放到缓存中”

“在进行地址翻译的时候,先去这个缓存里瞅一瞅,看看有没有记录过,如果有就直接用之前记录的,找不到再去内存页表中找。跟局部性原理类似,翻译过的地址,在接下来一段时间内再次用到的可能性很大,所以这个缓存是很有必要的!”,小黑非常自信的说到。


“听上去很不错,期待早点上马啊!”
TLB
过了几天,我打算去MMU部门转转,想看看他们的缓存搞的咋样了。
一进门,只见小黑和其他几个车间的MMU部门负责人正在紧张的讨论着,一旁的画板上画了不少条条框框的图。

“小黑老哥,你们这是在做什么呢?”
“我们正在研究这个翻译记录缓存项的存储方式呢!你来的正好,我们讨论了半天也没什么好的思路,快来帮我出出主意”
我有些好奇,问道:“什么问题把你们都难倒了?”
“就是虚拟地址翻译的结果,我们不知道怎么存了!”
“这有什么好纠结的,缓存空间就那么大,一个翻译结果就是一条记录,一条一条的存呗”
二号车间MMU负责人连连挥手,“没你想的这么简单,按照你这种存法,那在翻译地址的时候,怎么查找?难道要全部扫描一遍?”

我愣了一下,“啊这,我倒是没想这么多···不过缓存空间也不大,存不了太多翻译结果,全部扫描也还好吧?”
“那可不行,咱们CPU的目标就是要把性能优化到极致,这种方案上了,领导还不得骂死我”,小黑说到。
我想了想,“有了,给虚拟页编号取模,每个虚拟页的翻译记录只能存在缓存中固定的位置,这样不用全部扫描,一次就能定位,是不是很赞?”

小黑摇了摇头:“这个方案我们刚才也讨论过了,缓存空间有限,会导致大量的虚拟页取模后映射到同一个存储位置,就会经常冲突,也不是个好办法!”
“看来还真有点麻烦啊”,我也不自觉的皱起了眉头,陷入了思考之中。
“可不是嘛,所以我们才头疼啊”
空气突然安静,所有人都在低头沉思。
“哎,有了!”,一个念头在我脑中闪现。
“什么办法?快说说看”
“分组连接!”
“分组连接?”,众人问到。
“没错!把前面这两种方案结合一下。可以把缓存存储空间划分很多个组,全部遍历太慢,直接取模映射又容易冲突,那如果映射的结果不是一个固定的位置,而是一个分组呢?”

“听上去不错唉,这样既降低了冲突,遍历也只需在分组区间里进行了,工作量大大降低了,真是个好办法”
小黑和大家都一致同意了我的想法。
“那怎么分组呢,多少项为一组呢?”,有人问到。
“嗯,这个我也说不好,得做实验验证,2、4、8、16都可以试试,实践出真知嘛!”
“好,没问题,咱们下来测试下”
“我还有一个问题,你们的这个缓存项什么时候更新呢?咱们在保护模式下,不同的进程中,同一个虚拟页翻译后对应的物理页面可是不同的,你们可不要用了错误的缓存,那可就出大乱子了!”
“嗨,这还用你说,在场的各位干这份工作时间都不短了,这一点我们比你更清楚。进程切换的时候,会把新进程的页目录表基地址写到CR3寄存器中,那时候我们就会把缓存中的数据全部清掉啦!”,小黑胸有成竹的说到。
“也不用全部清掉吧,像有些内核页面,是所有进程共享的,就可以保留啊”
小黑点了点头,“有道理,看来得给地址翻译记录增加一个标记,用来标记是不是全局有效”
一个月后,八个车间MMU部门的缓存全部建设完成,当天便投入使用,咱们这个CPU的运行效率一下突飞猛进,这缓存的威力可真是太大了。
为了跟我们的一二级缓存相区分,小黑还给他们的地址翻译缓存取了一个响亮的名字:TLB——翻译后备缓冲区。
【完】
相关阅读
[转帖]一个故事看懂CPU的TLB的更多相关文章
- 一个故事看懂CPU的TLB
Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了- 我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的- 虚拟地址翻译 一大早,我们一号车间MMU(内存管理单元)部门的小 ...
- 一个故事看懂CPU的SIMD技术
好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴. 我所在的一号车间,除了负责执行指令的我,还有 ...
- 一个故事看懂HTTPS
我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习. 为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信,主人干了什 ...
- 一个故事看懂AI神经网络工作原理
我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇. 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元. 人体中的神经元可以传递生物信号,给它输入一个信号,它经 ...
- 一个故事看懂Linux文件权限管理
前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作. 详情参见:内核地址空间大冒险:系统调用 open系统调用链 我是一个 ...
- zz:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
首先定义:待优化参数: ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch : 计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...
- 一个故事讲懂vue父子组件传值
作者:李佳明同学链接:https://www.jianshu.com/p/2272b6ca0f0c 一个故事讲懂vue父子组件传值 讲故事前先讲代码 父组件向子组件传值 父组件数据传递给子组件可以通过 ...
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法 机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着 ...
- [转帖]一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
一文看懂web服务器.应用服务器.web容器.反向代理服务器区别与联系 https://www.cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别 ...
- [转帖] 一文看懂:"边缘计算"究竟是什么?为何潜力无限?
一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta 云计算 雾计算 边缘计算... 知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景 ...
随机推荐
- Word2Vec模型总结
1.Huffman树的构造 解析:给定n个权值作为n个叶子节点,构造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称Huffman树.数的带权路径长度规定为所有叶子节点的带权 ...
- Kuasar成为CNCF官方项目,探索容器运行时新纪元
本文分享自华为云社区<Kuasar成为CNCF官方项目,探索容器运行时新纪元!>,作者:云容器大未来. 北京时间12月20日,云原生计算基金会(CNCF)正式接纳多沙箱容器运行时项目 Ku ...
- 共探AI大模型时代下的挑战与机遇,华为云HCDE与大模型专家面对面
摘要:近日,华为开发者大会2023(cloud)"开发者生态创新发展圆桌会议"在东莞华为溪流背坡村成功举办. 2023年7月8日,华为开发者大会2023(cloud)"开 ...
- 源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻
摘要:GOTC 全球开源技术峰会在上海张江科学会堂成功举办. 本文分享自华为云社区<源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻>,作者:华为云云原生团队. GOTC ...
- ios安全加固 ios 加固方案
目录 一.iOS加固保护原理 1.字符串混淆 2.类名.方法名混淆 3.程序结构混淆加密 4.反调试.反注入等一些主动保护策略 二 代码混淆步骤 1. 选择要混淆保护的ipa文件 2. 选择要混淆 ...
- PPT 做出动态路线动画
https://www.iconfont.cn/ 插入,起点.终点,两图标 编辑顶点,调整路线 添加淡出动画,持续时间1秒 再添加直线 从上一项开始 效果选项中,选择自动翻转 计时 -> 期间 ...
- Web 3.0 会是互联网的下一个时代吗?
2000 年初,只读互联网 Web 1.0 被 Web 2.0 所取代.在 Web 2.0 时代,用户摆脱了只读的困扰,可以在平台上进行互动并创作内容.而 Web 3.0 的到来,除了加密货币和区块链 ...
- Codeforce :466C. Number of Ways (数学)
https://codeforces.com/problemset/problem/466/C 解题说明:此题是一道数学题,若平分分成若干种情况,应当整体(sum)考虑,对sum/3进行分析.它是区分 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子【莫队算法裸题】
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- Sentinel 是如何做限流的
限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性. 之前的项目中使用的限流措施主要是Guava的RateLimiter.RateLimite ...