章节问题
- 你的CPU的工作频率是多少?是恒定不变的吗?
- top命令中输出的核数是服务器上物理核的数量吗?
- 如何查看CPU中的L1,L2,L3等缓存的大小?
- 为什么内存对齐之后访问性能更高?
- TLB缓存是什么?如何提高它的命中率?
CPU生产过程
-
步骤
- 晶圆的生产
- CPU硬件电路的制作
- 封装和测试
-
目的
- 在单位面积的芯片上布局更多的晶体管。
- 晶体管的尺寸越小,单位面积上的电路就越丰富,CPU性能越高。
- 晶体管的尺寸越小,晶体管能耗越低
个人电脑CPU硬件简介
Intel CPU命名规则
- Intel(R) Core(TM) 品牌标志
- I5 品牌标识符
- 7200 代际编号+SKU
- U 产品线后缀
个人电脑CPU代际简介
- 制程不断缩小
- 微架构改进,单个物理核内部的实现
- 每代CPU的内存控制器和连接外设的PCIE也不断进步
个人电脑CPU内部架构
11代Ice Lake为例
- 集成显卡
- 4个物理核
- 4块L3缓存,所有核共享
- System Agent模块
- 内存控制器(Mem Controller):决定内存规格和大小
- 外围组件快速互联(PCIe):显卡,PCIe接口的固态
- 图像处理单元(IPU):图像处理相关硬件
服务器CPU硬件简介
区别
- 核数和价格不同:服务器多
- CPU的内存控制器不同:服务器支持RDIMM,LRDIMM,带有ECC纠错功能,带有寄存器
- 通道数:个人一般双通道或四通道,服务器六通道甚至八通道
- 扩展性:可通过UPI总线支持多个CPU
服务器CPU代际简介
与个人电脑基本一致
- 制程缩小
- 微架构改进
服务器CPU内部架构
三大部分
- IMC(integrated memory controller) 集成内存控制器
- 物理核
- North Cap:包含PCIe总线(显卡,硬盘)和UPI总线(多CPU)
服务器CPU片内总线
单个CPU内部
- 2017年Skylake之前:
- Ring架构:所有的核使用一个环连接
- 核增多,环变大,延迟增加
- 2017年之后:
- Mesh架构:行列二维架构
- 寻找二维的最短路径
服务器CPU片间互联
多CPU之间
- 使用UPI总线
- 访问其他CPU连接内存的数据更慢
- Linux下NUMA特性:把CPU核内存条划分为不同的node
- 每个node包括一些核以及相近的内存。
- NUMA绑定可以避免跨node内存IO
CPU核原理
CPU核内部结构
-
前端 Front End
- 顺序从内存中获取指令
- 预解码和解码,转换为微操作
- 微操作放入队列中,等待CPU执行
-
后端 Back End
- 作用:从队列中获取解码好的指令并执行
- 顺序重排缓存器:解决数据依赖问题
- 调度器:分配到执行引擎的某个端口
- 执行引擎,包括n个端口,即n超标量
-
存储系统 Memory SubSystem
- L1级Data缓存区
- L2级缓存
- Data TLB
CPU的工作频率
- 时钟频率,一般Ghz级别
- 主频和睿频:CPU对频率进行智能控制(温度,功率限制)
物理核和逻辑核
- 物理CPU:主板真正安装的CPU数量。通过physical id查看
- 物理核:一个CPU会集成多个物理核。通过core id查看
- 逻辑核:Intel使用了超线程技术,一个物理核可以被模拟出多个逻辑核,processor是逻辑核序号
- 一个物理核上模拟的两个逻辑核不仅共享与1个物理核,还共享L1/L2缓存
- 由于共享L1/L2缓存,cache miss增多,性能只增加20%~30%
- cat /proc/cppuinfo
CPU的L1/L2/L3缓存查看
L1最快,容量最小。
- L1:
- 每个核独占。
- 分为data L1 和 code L1。更新策略不同
- L2:
- 每个核独占
- L3:
- 整个CPU共享
- Linxu提供了CPUFreq气筒,提供sysfs接口,查看CPU信息。/sys/devices/system/cpu
- dmidecode命令
CPU的TLB缓存查看
- 分页机制,使用多级页表
- 32位:2级页表
- 64位(48位地址空间):4级页表
- 缺页需要多次查询页表,所以做缓存TLB
- 使用cpuid命令,查看TLB缓存大小
- perf查看缓存命中率
- 可开启大页,默认4kb。增加单个页中缓存的页表,减少页,提高TLB的缓存命中率。
本章总结
- 你的CPU的工作频率是多少?是恒定不变的吗?
通过观察/proc/cpuinfo,可以看到CPU的工作频率。但是部分CPU支持睿频,所以工作频率随时变化。
- top命令中输出的核数是服务器上物理核的数量吗?
不一定。如果开启超线程,则逻辑核比物理核的多一倍。一个物理核被当作两个逻辑核使用,
核上所带的L1L2缓存也被这两个逻辑核共享
- 如何查看CPU中的L1,L2,L3等缓存的大小?
Linux的/sys/devices/system/cpu/
- 为什么内存对齐之后访问性能更高?
本机缓存向下一级取数据的时候基本单位不是字节,而是cacheline,一般大小位64字节。
哪怕只取1字节,CPU也取一个cacheline放到各级缓存中。
假如有64字节的对象,如果对齐过,则一次内存IO就可以完成访问。但是如果没有经过对齐,需要两次IO。
所以对齐之后,性能会提高。
- TLB缓存是什么?如何提高它的命中率?
TLB也是CPU中缓存的一种,用来加速内存中的页表访问。
可以通过大页降低进程中的页数量,进而减少页表项的总数量,这样TLB的命中率能够提升。但是会浪费一些内存。