| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux性能学习(1.1):CPU_CPU缓存 -> 正文阅读 |
|
[系统运维]Linux性能学习(1.1):CPU_CPU缓存 |
参考资料: 在日常的嵌入式开发中,查看一些SOC的datasheet总会看到 “32KB I/D cache”“L1 cache”“L2 cache”等字样,但是不知道是什么意思,查询了一些资料,记录一下。 1 简介CPU的运算是需要数据的,因此就需要从内存中读写一些数据来进行运算。但是CPU的运算速度很快,而内存的读写速率相比较于CPU的运行速率就比较慢,因此CPU就需要花费时间等待内存的数据到来或者把数据写入内存,这种操作就无法发挥CPU的全部功力。 因此,一种新的读写速度更快的内存—“缓存”被设计出来,用来存储一些需要频繁被访问的数据,这样CPU会先从速度更快的缓存中来读写数据,加快CPU的运算。 缓存本质上还是内存,只不过读写速度会比内存快很多。 缓存又分为一级缓存L1、二级缓存L2、三级缓存L3: 关于访问速度,查询资料,大致如下:
从上可以看出,加入了缓存机制,大大提高了CPU的工作效率,防止CPU摸鱼。 在linux下可通过如下指令查看缓存的大小:
2 工作机制缓存的工作机制是比较复杂的,在这里简单的描述下。 当程序执行时,会将内存中的数据载入到L3中,然后再载入L2,最后再载入L1。如果CPU需要数据,则先会在L1中寻找,然后依次是L2、L3、内存中寻找。 如果在L1中找到需要的数据,就叫做“缓存命中”。 当在L1/L2/L3中没有找到数据后,会从内存中读取数据到CPU,并会将这些数据写入到缓存中,防止后续CPU会再次使用,而不需要从内存中读取。 因为缓存的大小是有限的,而CPU会不断执行不同任务,或者CPU需要不同的数据,因此缓存中的数据会按照算法进行替换,将一些不再需要的数据淘汰出缓存,将一些频繁需要的数据放进缓存。 3 Cache LineCPU将数据加载进缓存中,不会按照一个字节一个字节的方式进行加载,一般按照固定大小的块的进行加载,叫做缓存行即“Cache Line”。
也可通过指令
关于缓存的加载策略,可参考上面链接2,本文只是简单介绍下缓存相关的内容,使对缓存有大致的了解。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 21:16:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |