CPU cache

参考:https://levelup.gitconnected.com/understanding-l1-l2-and-l3-caches-how-to-improve-cpu-performance-d9dcc3e2e1f5

2、以下部分:如何获取x86 CPU L1、L2和L3 cache的大小 - 知乎 (zhihu.com)

CPU cache是介于CPU内核和物理内存(动态内存 dynamic RAM)之间的若干块静态内存(staic RAM),static RAM的访问速度比dynamic RAM的访问速度要快很多,而且不需要像dynamic RAM那样由于会漏电需要保持一定的刷新频率。static RAM作为访问dynamic RAM的缓存,对于系统的内存访问性能起到了很大的提升作用,但是由于static RAM的成本比较高,所以一般static RAM或者说Cache的大小都比较有限,一般都在几十KB到几十MB的范围内。

每个CPU Socket中,会包含有L1、L2(也叫MLC,Middle Level Cache)和L3(也叫LLC,Last Level Cache)的Cache,用于加速内存访问的速度,其基本结构如下所示:

每个CPU core都会有自己的L1 cache,而且经常会分成L1 data cache(DL1)和L1 instruction cache(IL1),分别用于缓存数据和指令。L2 cache可能是的隶属单个CPU core,也可能是多个CPU core之间共享(酷睿架构是隶属单个CPU core)。L3 cache则是在一个CPU Socket/Package上的所有(也有可能是部分)CPU core共享。

按照x86 CPU的传统,CPU的特性一般可以通过CPUID指令获取,Cache的相关特性也不例外,只是CPUID指令返回的信息并没有直观地告知各级Cache的大小。

根据Intel SDM(Software Developer's Manual)手册Volume 2对CPUID指令的介绍,CPUID Leaf 2(EAX=02H时执行CPUID指令),能够在EAX、EBX、ECX和EDX寄存器中返回TLB(Translation Lookaside Buffer)和Cache的相关信息,信息以字节为单位进行编码,如下图所示:

需要根据CPUID指令返回的信息,以字节为单位查表以获取详细的信息,这种方法一般适用于比较老的CPU,因为这样的表最多支持256个表项,支持的范围有限。现在的CPU基本不怎么使用这种方式,而是采用CPUID Leaf 4的方式来获取Cache的信息。

当支持CPUID Leaf 4的时候,不仅需要将EAX设置为04H,而且需要在ECX设置一个索引值,因为CPU中存在多个种类或级别的Cache,该索引值从0开始向上递增,直到返回的EAX寄存器中Cache Type File为0,表示没有更多的Cache了。

CPUID Leaf 4返回的信息并没有直接指明Cache的大小,而是需要根据一定的公式进行计算:

Cache Size = (Ways + 1) * (Partitions + 1) * (Linue_Size + 1) * (Sets + 1) 即

Cache Size = (EBX[31:22] + 1) * (EBX[21:12] + 1) * (EBX[11:0] + 1) * (ECX + 1)

在Linux上可以通过cpuid这个工具来获取CPUID指令的输出,在Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz的系统上CPUID leaf 4的输出如下所示:

   deterministic cache parameters (4):
      --- cache 0 ---
      cache type                           = data cache (1)
      cache level                          = 0x1 (1)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0x1 (1)
      extra processor cores on this die    = 0x7 (7)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0x7 (7)
      ways of associativity                = 0x0 (0)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = false
      complex cache indexing               = false
      number of sets - 1 (s)               = 63
      --- cache 1 ---
      cache type                           = instruction cache (2)
      cache level                          = 0x1 (1)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0x1 (1)
      extra processor cores on this die    = 0x7 (7)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0x7 (7)
      ways of associativity                = 0x0 (0)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = false
      complex cache indexing               = false
      number of sets - 1 (s)               = 63
      --- cache 2 ---
      cache type                           = unified cache (3)
      cache level                          = 0x2 (2)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0x1 (1)
      extra processor cores on this die    = 0x7 (7)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0x3 (3)
      ways of associativity                = 0x0 (0)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = false
      complex cache indexing               = false
      number of sets - 1 (s)               = 1023
      --- cache 3 ---
      cache type                           = unified cache (3)
      cache level                          = 0x3 (3)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0xf (15)
      extra processor cores on this die    = 0x7 (7)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0xb (11)
      ways of associativity                = 0x6 (6)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = true
      complex cache indexing               = true
      number of sets - 1 (s)               = 12287

可以看出,该CPU上包含了L1 Data Cache、L1 Instruction Cache,L2 Cache和L3 Cache,并且可以根据上面的公式计算出L3 Cache的大小为:

(11 + 1) * (0 + 1) * (63 + 1) * (12287 + 1) = 9MB

类似,也可以算出其他Cache的大小。

搞得这么复杂主要是因为在CPU Cache的设计过程中,为了提高Cache的利用率、准确性,并兼顾成本,需要对Cache进行更精细的划分和管理。

如果只是想要简单直接地查看CPU Cache的详情,在Windows下可以借助CPU-Z这个工具软件:

而在Linux下,则可以借助hwloc工具包中的lstopo命令,如下所示:

3、chatGPT 怎么查看处理器上 L2 cache可能是的隶属单个CPU core,也可能是多个CPU core之间共享

要查看处理器上 L2 Cache 是隶属于单个 CPU 核心还是多个 CPU 核心共享的情况,可以通过以下几种方式来获取信息:

1. 处理器规格表

查找处理器的详细规格表或者官方文档通常会提供关于 L2 Cache 的具体信息。这些文档通常包括每个核心的缓存结构,以及缓存是如何组织和共享的。

  • Intel 处理器: 可以访问 Intel ARK 网站 (ark.intel.com),在该网站上搜索特定的处理器型号,可以查看处理器的详细规格,包括 L2 Cache 的配置。

  • AMD 处理器: AMD 也有类似的官方规格文档和处理器信息页面,可以在 AMD 的官网上查找特定处理器型号的详细信息。

2. 操作系统和工具

使用操作系统和相关的硬件信息工具可以提供一些关于缓存配置的信息。

  • Windows: 在 Windows 操作系统上,可以使用系统信息工具或者第三方工具如 CPU-Z 来查看详细的处理器信息,包括缓存配置和拓扑结构。

  • Linux: 在 Linux 系统上,可以使用命令行工具如 lscpuhwloc 来查看处理器的拓扑结构和缓存配置信息。

3. BIOS/UEFI 设置

有时候 BIOS 或者 UEFI 设置界面中也会显示处理器的缓存配置信息,尤其是一些高级设置界面可能会提供更多关于缓存和处理器拓扑的详细信息。

4. 第三方硬件检测工具

除了上述提到的 CPU-Z,还有其他第三方工具如 AIDA64、HWiNFO 等,它们提供了更详细的硬件信息和缓存配置。

检查方法总结

  • 查阅处理器规格表和官方文档,这是最直接和准确的方式,可以找到详细的缓存配置信息。
  • 使用操作系统和工具,如 CPU-Z、lscpu 等来查看当前系统中处理器的缓存配置和拓扑结构。
  • 检查 BIOS/UEFI 设置,有时候可以在系统启动时查看到更深入的硬件信息。

通过以上方法,可以确定处理器上 L2 Cache 是隶属于单个 CPU 核心还是多个 CPU 核心共享的具体情况。

4. 每个cpu所有cores 共享 L2 cache

case1 System architecture with single-port shared L2 cache.   | Download Scientific Diagram (researchgate.net)

 4.2 没有L3的 cache架构 早期的吧Dive Into Systems (swarthmore.edu)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm校园志愿服务信息系统-计算机毕业设计源码97697

摘 要 随着社会的进步和信息技术的发展,越来越多的学校开始重视志愿服务工作,通过组织各种志愿服务活动,让学生更好地了解社会、服务社会。然而,在实际操作中,志愿服务的组织和管理面临着诸多问题,如志愿者…

实战演练:Fail2Ban部署全攻略,确保您的服务器免受CVE-2024-6387侵害!

Fail2Ban是一个开源的入侵防护软件,它可以扫描日志文件,识别恶意行为(如多次失败的登录尝试),并自动采取措施(如更新防火墙规则)来阻止攻击者。最近,CVE-2024-6387漏洞的爆出使我们更…

一分钟学习数据安全—自主管理身份SSI分布式加密密钥管理

在这篇之前,我们已经对SSI有了一个全局的了解。这个系列的文章可以作为一个学习笔记来参考,真正要实践其中的一些方案、协议,还需要参考专业的书籍和官方文档。作为一个SSI系列学习笔记的最后一篇,我们做一个简单的延伸&#xff0…

无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云计算的发展趋势 2、无服务器计算简介 二、无服务…

DPDK概述

文章目录 1. DPDK概述1.1 DPDK 内存管理Mbuf单帧结构:1.2 DPDK内核驱动 igb_uio驱动1.3 DPDK源码下载方式1.4 pktgen源码下载方式1.5 DPDK相关名词解释 1. DPDK概述 Intel DPDK全称Intel Data Plane Development Kit,是Intel提供的数据平面开发工具集,为…

AI语音工具——Fish Speech:使用简单,可训练专属语音模型!

今天给大家介绍一款超好用的AI语音工具——Fish Speech,使用简单,还可以训练自己的语音模型! 工具介绍 Fish Speech是由 Fish Audio 开发的免费开源文本转语音模型。经过十五万小时的数据训练,Fish Speech能够熟练掌握中文、日语…

binutils ifunc 流程图

上图是x86 binutils 的流程图。 函数说明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

SSL/CA 证书及其相关证书文件解析

在当今数字化的时代,网络安全变得至关重要。SSL(Secure Socket Layer)证书和CA(Certificate Authority)证书作为保护网络通信安全的重要工具,发挥着关键作用。 一、SSL证书 SSL证书是数字证书的一种&…

前端八股文 说一下盒模型

网页中任何一个元素都可以视为一个盒子,由里到外,盒模型包括外边界(margin)、边框(border)、内边界(padding)和内容(content)。 盒模型基本分为3种&#xff1…

【遥感语义分割】UNetFormer

原文:UNetFormer: An UNet-like Transformer for Efficient Semantic Segmentation of Remotely Sensed Urban Scene Imagery Libo Wang1, 2, Rui Li1, Ce Zhang3, 4, Shenghui Fang1*, Chenxi Duan5, Xiaoliang Meng1, 2 and Peter M. Atkinson3, 6, 7 1) 中国…

【机器学习】分类算法-KNN算法实践

一、前言 前面的一篇文章介绍了KNN算法的基本思想,接下来我们就根据B站UP主【abilityjh】老师的节奏,做一个关于KNN算法运用于“约会网站配对”的算法实现。当然,这个实践的代码是一样的,但是理解的话,我是用自己的话来…

考到PMP证书后 如何获得PDU?

目前仅续证一次,也是在威班PMP考试后免费积攒的。其实获取PMP的渠道很多,网上也有很多售卖的,积攒起来也挺容易,不过在续证的时候千万不要找不明渠道来源的人去搞,不靠谱。续证期有三年的,三年时间积攒60PD…

第十二章 执行引擎

一、执行引擎概述 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引…

简单的git pull fail Can‘t update has no tracked branch解决记录

简单的git pull fail Can‘t update has no tracked branch解决记录 1. 问题描述 上午同事使用idea拉取代码的时候,发现拉取不了,提示用户权限问题,之后修改了git用户信息,发现还是拉取不了分支代码,然后删除了git r…

docker介绍与详细安装

1 docker 介绍 1.1 虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实…

Vue 详情实战涉及从项目初始化到功能实现、测试及部署的整个过程

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

全面解析找不到msvcp71.dll无法继续执行的原因及修复方法

在使用Windows操作系统时,可能会遇到“msvcp71.dll文件丢失”的问题,从而导致部分应用程序无法正常运行。msvcp71.dll属于Microsoft Visual C 2008 Redistributable package的一部分,其包含了运行基于该编译器开发的软件所需的运行时库函数。…

react v18 less使用(craco)

方案一、弹出配置(不推荐) 安装依赖:yarn add less less-loader 首先 执行 yarn eject 弹出配置项文件(注意:弹出配置不可逆!) 在 config 文件夹中 找到 webpack.config.js,在如图…

苹果手机耗电太快怎么办?6个有效解决方法大揭秘

现代智能手机功能越来越强大,但随之而来的电量消耗问题也让许多用户头疼不已。尤其是苹果手机,虽然以其流畅的用户体验和强大的功能著称,但电池续航问题仍然是很多用户的共同困扰。 那么,苹果手机耗电太快怎么办呢?别…

震惊!张宇25版高数18讲发布,656页惹争议!

这个张宇老师在微博已经解释过了! 我觉得张宇老师本意是好的,在考研数学教学创新这方面,他真的有自己的思考。 他为什么要这么做? 其实作为一个考研高数老师,他完全可以像其他老师一样,什么都不做&#x…