IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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缓存

参考资料:
1.
https://www.makeuseof.com/tag/what-is-cpu-cache/
2.
https://zhuanlan.zhihu.com/p/80672073
3.CPU Cache 机制以及 Cache miss
4.性能优化方法和技巧

在日常的嵌入式开发中,查看一些SOC的datasheet总会看到 “32KB I/D cache”“L1 cache”“L2 cache”等字样,但是不知道是什么意思,查询了一些资料,记录一下。

1 简介

CPU的运算是需要数据的,因此就需要从内存中读写一些数据来进行运算。但是CPU的运算速度很快,而内存的读写速率相比较于CPU的运行速率就比较慢,因此CPU就需要花费时间等待内存的数据到来或者把数据写入内存,这种操作就无法发挥CPU的全部功力。

因此,一种新的读写速度更快的内存—“缓存”被设计出来,用来存储一些需要频繁被访问的数据,这样CPU会先从速度更快的缓存中来读写数据,加快CPU的运算。

缓存本质上还是内存,只不过读写速度会比内存快很多。

缓存又分为一级缓存L1、二级缓存L2、三级缓存L3:
L1容量最小,但是速度最快,L1又针对指令和数据分为数据缓存和指令缓存;
L2容量比L1大,但是速度会比L1慢些;
L3容量比L2大,速度也相应比L2慢。
每一个核单独有自己的L1和L2,L3属于所有核共享的。
在这里插入图片描述

关于访问速度,查询资料,大致如下:

CPU访问一次L1,大约需要4个时钟周期;
CPU访问一次L2,大约需要11个时钟周期;
CPU访问一次L3,大约需要39个时钟周期;
CPU访问一次内存,大约需要107个时钟周期;

从上可以看出,加入了缓存机制,大大提高了CPU的工作效率,防止CPU摸鱼。

在linux下可通过如下指令查看缓存的大小:


# getconf -a | grep CACHE
LEVEL1_ICACHE_SIZE                 32768
LEVEL1_ICACHE_ASSOC                8
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_SIZE                 32768
LEVEL1_DCACHE_ASSOC                8
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_SIZE                  262144
LEVEL2_CACHE_ASSOC                 4
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_SIZE                  12582912
LEVEL3_CACHE_ASSOC                 16
LEVEL3_CACHE_LINESIZE              64
LEVEL4_CACHE_SIZE                  0
LEVEL4_CACHE_ASSOC                 0
LEVEL4_CACHE_LINESIZE              0

2 工作机制

缓存的工作机制是比较复杂的,在这里简单的描述下。

当程序执行时,会将内存中的数据载入到L3中,然后再载入L2,最后再载入L1。如果CPU需要数据,则先会在L1中寻找,然后依次是L2、L3、内存中寻找。

如果在L1中找到需要的数据,就叫做“缓存命中”。

当在L1/L2/L3中没有找到数据后,会从内存中读取数据到CPU,并会将这些数据写入到缓存中,防止后续CPU会再次使用,而不需要从内存中读取。

因为缓存的大小是有限的,而CPU会不断执行不同任务,或者CPU需要不同的数据,因此缓存中的数据会按照算法进行替换,将一些不再需要的数据淘汰出缓存,将一些频繁需要的数据放进缓存。

3 Cache Line

CPU将数据加载进缓存中,不会按照一个字节一个字节的方式进行加载,一般按照固定大小的块的进行加载,叫做缓存行即“Cache Line”。
在我的电脑中的Cache Line的大小为64Bytes。

# cat /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size 
64	

也可通过指令


# getconf -a | grep CACHE_LINESIZE
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_LINESIZE              64
LEVEL4_CACHE_LINESIZE              0

关于缓存的加载策略,可参考上面链接2,本文只是简单介绍下缓存相关的内容,使对缓存有大致的了解。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:43:44  更:2022-12-25 11:48:04 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计