数据库修仙秘境篇五——linux cache指北

Cache技术实战分析 Cache技术实战分析 在计算机存储系统的层次结构中,介于中央处理器和主存储器之间的高速小容量存储器。与主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。   某些机器甚至有二级三级缓存,每级缓存比前一级缓存速度慢且容量大。 组成结构   高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。   主要由三大部分组成:   Cache存储体:存放由主存调入的指令与数据块。   地 阅读详情

linux cache指北

cache是什么

计算机中数据存取满足“二八定律”(局部性原理),为了以较低的成本大幅提高性能,现代cpu都有cache。cpu cache已经发展到了三级缓存结构,基本上现在买的个人电脑都是L3结构。其中L1和L2cache为每个核独有,L3则所有核共享。

本文内容大量摘抄自飘舞的雪的博客,详情请参阅原文。

cache bouncing

为了保证所有的核看到正确的内存数据,一个核在写入自己的L1 cache后,CPU会执行Cache一致性算法把对应的cacheline(一般是64字节)同步到其他核。这个过程并不很快,是微秒级的,相比之下写入L1 cache只需要若干纳秒。当很多线程在频繁修改某个字段时,这个字段所在的cacheline被不停地同步到不同的核上,就像在核间弹来弹去,这个现象就叫做cache bouncing。由于实现cache一致性往往有硬件锁,cache bouncing是一种隐式的的全局竞争。

cache bouncing使访问频繁修改的变量的开销陡增,甚至还会使访问同一个cacheline中不常修改的变量也变慢,这个现象是false sharing。按cacheline对齐能避免false sharing,但在某些情况下,我们甚至还能避免修改“必须”修改的变量。当很多线程都在累加一个计数器时,我们让每个线程累加私有的变量而不参与全局竞争,在读取时我们累加所有线程的私有变量。虽然读比之前慢多了,但由于这类计数器的读多为低频展现,慢点无所谓。而写就快多了,从微秒到纳秒,几百倍的差距。

cache的意义

为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu -> cache -> memory)。

CPU cache有什么意义?cache的容量远远小于主存,因此出现cache miss在所难免,既然cache不能包含CPU所需要的所有数据,那么cache的存在真的有意义吗?当然是有意义的——局部性原理。

A. 时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问;

B. 空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问;

cache和寄存器

存储器的三个性能指标——速度、容量和每位价格——导致了计算机组成中存储器的多级层次结构,其中主要是缓存和主存、主存和磁盘的结构。

一般情况下,速度越快,容量越小,价格越高。按照速率从高到低各级存储介质排序如下:

  • 寄存器
  • cache
  • 内存
  • 磁盘

cpu cache结构

单核CPU cache

单核cpu为二级缓存,因为不存在核之间共享,因为没有三级缓存。

在单核CPU结构中,为了缓解CPU指令流水中cycle冲突,L1分成了指令(L1P)和数据(L1D)两部分,而L2则是指令和数据共存。

多核CPU cache

多核cpu为三级缓存,L3为各个核心共享。

多核CPU的结构与单核相似,但是多了所有CPU共享的L3三级缓存。在多核CPU的结构中,L1和L2是CPU私有的,L3则是所有CPU核心共享的。

cache 一致性

缓存一致性:用于保证多个CPU cache之间缓存共享数据的一致。

cache 的写方式

  • write through(写通):每次CPU修改了cache中的内容,立即更新到内存,也就意味着每次CPU写共享数据,都会导致总线事务,因此这种方式常常会引起总线事务的竞争,高一致性,但是效率非常低;
  • write back(写回):每次CPU修改了cache中的数据,不会立即更新到内存,而是等到cache line在某一个必须或合适的时机才会更新到内存中;

无论是写通还是写回,在多线程环境下都需要处理缓存cache一致性问题。为了保证缓存一致性,处理器又提供了写失效(write invalidate)和写更新(write update)两个操作来保证cache一致性。

  • 写失效:当一个CPU修改了数据,如果其他CPU有该数据,则通知其为无效;
  • 写更新:当一个CPU修改了数据,如果其他CPU有该数据,则通知其更新数据;

写更新会导致大量的更新操作,因此在MESI协议中,采取的是写失效(即MESI中的I:invalid,如果采用的是写更新,那么就不是MESI协议了,而是MESU协议)

cache line

缓存的换入换出是以cacheline为单位的,一般的cacheline为64byte。因而在一些性能要求较高的程序中,我们会看到大量的内存对齐,比如vpp,目的就是为了尽量将数据装在cacheline里面。减少换入换出的次数。

cache line是cache与内存数据交换的最小单位,根据操作系统一般是32byte或64byte。在MESI协议中,状态可以是M、E、S、I,地址则是cache line中映射的内存地址,数据则是从内存中读取的数据。

  • 工作方式:当CPU从cache中读取数据的时候,会比较地址是否相同,如果相同则检查cache line的状态,再决定该数据是否有效,无效则从主存中获取数据,发起一次RR(remote read);
  • 工作效率:当CPU能够从cache中拿到有效数据的时候,消耗几个CPU cycle,如果发生cache miss,则会消耗几十上百个CPU cycle

MESI协议

cache状态

MESI协议将cache line的状态分成modify、exclusive、shared、invalid,分别是修改、独占、共享和失效。

  • modify:当前CPU cache拥有最新数据(最新的cache line),其他CPU拥有失效数据(cache line的状态是invalid),虽然当前CPU中的数据和主存是不一致的,但是以当前CPU的数据为准;
  • exclusive:只有当前CPU中有数据,其他CPU中没有改数据,当前CPU的数据和主存中的数据是一致的
  • shared:当前CPU和其他CPU中都有共同数据,并且和主存中的数据一致
  • invalid:当前CPU中的数据失效,数据应该从主存中获取,其他CPU中可能有数据也可能无数据,当前CPU中的数据和主存被认为是不一致的;
cache操作

MESI协议中,每个cache的控制器不仅知道自己的操作(local read和local write),通过监听也知道其他CPU中cache的操作(remote read和remote write)。对于自己本地缓存有的数据,CPU仅需要发起local操作,否则发起remote操作,从主存中读取数据,cache控制器通过总线监听,仅能够知道其他CPU发起的remote操作,但是如果local操作会导致数据不一致性,cache控制器会通知其他CPU的cache控制器修改状态。

  • local read(LR):读本地cache中的数据;
  • local write(LW):将数据写到本地cache;
  • remote read(RR):读取内存中的数据;
  • remote write(RW):将数据写通到主存
cache状态转换和cache操作

cache状态转换的重点是,当有某一个cpu核心操作主存(读取和写入)时,其他核心能感知到并进行状态修改和数据更新。

MESI协议中cache line数据状态有4种,引起数据状态转换的CPU cache操作也有4种,因此要理解MESI协议,就要将这16种状态转换的情况讨论清楚。

初始场景:在最初的时候,所有CPU中都没有数据,某一个CPU发生读操作,此时发生RR,数据从主存中读取到当前CPU的cache,状态为E(独占,只有当前CPU有数据,且和主存一致),此时如果有其他CPU也读取数据,则状态修改为S(共享,多个CPU之间拥有相同数据,并且和主存保持一致),如果其中某一个CPU发生数据修改,那么该CPU中数据状态修改为M(拥有最新数据,和主存不一致,但是以当前CPU中的为准),并通知其他拥有该数据的CPU数据失效,其他CPU中的cache line状态修改为I(失效,和主存中的数据被认为不一致,数据不可用应该重新获取)

  • modify

    场景:当前CPU中数据的状态是modify,表示当前CPU中拥有最新数据,虽然主存中的数据和当前CPU中的数据不一致,但是以当前CPU中的数据为准;

    • LR:此时如果发生local read,即当前CPU读数据,直接从cache中获取数据,拥有最新数据,因此状态不变;
    • LW:直接修改本地cache数据,修改后也是当前CPU拥有最新数据,因此状态不变;
    • RR:因为本地内存中有最新数据,因此当前CPU不会发生RR和RW,当本地cache控制器监听到总线上有RR发生的时,必然是其他CPU发生了读主存的操作,此时为了保证一致性,当前CPU应该将数据写回主存,而随后的RR将会使得其他CPU和当前CPU拥有共同的数据,因此状态修改为S;
    • RW:同RR,当cache控制器监听到总线发生RW,当前CPU会将数据写回主存,因为随后的RW将会导致主存的数据修改,因此状态修改成I;
  • exclusive

    场景:当前CPU中的数据状态是exclusive,表示当前CPU独占数据(其他CPU没有数据),并且和主存的数据一致;

    • LR:从本地cache中直接获取数据,状态不变;
    • LW:修改本地cache中的数据,状态修改成M(因为其他CPU中并没有该数据,因此不存在共享问题,不需要通知其他CPU修改cache line的状态为I);
    • RR:因为本地cache中有最新数据,因此当前CPU cache操作不会发生RR和RW,当cache控制器监听到总线上发生RR的时候,必然是其他CPU发生了读取主存的操作,而RR操作不会导致数据修改,因此两个CPU中的数据和主存中的数据一致,此时cache line状态修改为S;
    • RW:同RR,当cache控制器监听到总线发生RW,发生其他CPU将最新数据写回到主存,此时为了保证缓存一致性,当前CPU的数据状态修改为I;
  • shared

    场景:当前CPU中的数据状态是shared,表示当前CPU和其他CPU共享数据,且数据在多个CPU之间一致、多个CPU之间的数据和主存一致;

    • LR:直接从cache中读取数据,状态不变;
    • LW:发生本地写,并不会将数据立即写回主存,而是在稍后的一个时间再写回主存,因此为了保证缓存一致性,当前CPU的cache line状态修改为M,并通知其他拥有该数据的CPU该数据失效,其他CPU将cache line状态修改为I;
    • RR:状态不变,因为多个CPU中的数据和主存一致;
    • RW:当监听到总线发生了RW,意味着其他CPU发生了写主存操作,此时本地cache中的数据既不是最新数据,和主存也不再一致,因此当前CPU的cache line状态修改为I;
  • invalid

    场景:当前CPU中的数据状态是invalid,表示当前CPU中是脏数据,不可用,其他CPU可能有数据、也可能没有数据;

    • LR:因为当前CPU的cache line数据不可用,因此会发生RR操作,此时的情形如下。

    ​ A. 如果其他CPU中无数据则状态修改为E;

    B. 如果其他CPU中有数据且状态为S或E则状态修改为S;

    C. 如果其他CPU中有数据且状态为M,那么其他CPU首先发生RW将M状态的数据写回主存并修改状态为S,随后当前CPU读取主存数据,也将状态修改为S;

    • LW:因为当前CPU的cache line数据无效,因此发生LW会直接操作本地cache,此时的情形如下。

      A. 如果其他CPU中无数据,则将本地cache line的状态修改为M;

      B. 如果其他CPU中有数据且状态为S或E,则修改本地cache,通知其他CPU将数据修改为I,当前CPU中的cache line状态修改为M;

      C. 如果其他CPU中有数据且状态为M,则其他CPU首先将数据写回主存,并将状态修改为I,当前CPU中的cache line转台修改为M;

    • RR:监听到总线发生RR操作,表示有其他CPU读取内存,和本地cache无关,状态不变;

    • RW:监听到总线发生RW操作,表示有其他CPU写主存,和本地cache无关,状态不变;

reference

  1. https://www.cnblogs.com/snow826520/p/8574824.html
OpenClaw大师技能集:339个即插即用AI Agent技能一键部署 AI Agent的核心能力不在于大模型本身,而在于能否可靠、低延迟地连接真实世界——这正是‘技能’(Skill)的本质:标准化的外部系统交互接口。其技术原理基于统一技能契约(Skill Contract)、容器化交付(SCI)与协议网关式安装机制,解决了长期困扰开发者的依赖冲突、环境异构与配置碎片化三大顽疾。该方案显著提升Agent工程化效率,使技能复用从‘手动考古’升级为‘声明式调用’,广泛适用于企业自动化、个人知识管理及低代码AI工作流构建等场景。OpenClaw大师技能集正是这一范式的成熟落地,提供3 阅读详情

相关推荐

WordPress小说主题实战:从模板解压到小说站上线与维护

在搭建内容型网站时,WordPress凭借灵活的主题机制和丰富的插件生态,成为许多站长构建垂直阅读平台的首选。对于小说站这类以书籍、章节为基本单元的内容站点,合理运用自定义文章类型(CPT)可以有效组织数据,配合固定链接优化与分类管理,能显著提升SEO收录效率。实际部署一套“多本小说阅读模板”时,从zip包解压验证、本地环境调试,到主题启用后的功能配置、章节排序逻辑,再到图片懒加载、防采集策略及CSRF安全加固,每一步都影响站点稳定性与读者体验。本文以WordPress主题为切入点,梳理小说网站从零搭建的完

weixin_33563728的博客 221

CPU中的cache结构以及cache一致性

一. 引子   在多线程环境中,经常会有一些计数操作,用来统计线上服务的一些qps、平均延时、error等。为了完成这些统计,可以实现一个多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值。在实现这个计数器类库时,可以利用thread local存储来避免cache bouncing,从而提高效率。注意,这种实现方式的本质是把写时的竞争转移到了读:读得合并所有写过的线程中的数据,而不可...

weixin_30376509的博客 472

R以及Rstudio超详细安装教程(包括安装过程中出现的问题)

R安装及Rstudio安装,以及安装中出现的问题

2301_76908257的博客 1万+

【并发编程】CPU cache结构和缓存一致性(MESI协议)

一、cache    cpu cache已经发展到了三级缓存结构,基本上现在买的个人电脑都是L3结构。1. cache的意义    为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu -> cache -> memory)。    ...

Mr、温少的博客 729

Cisco Packet Tracer 9.0 工业网络模拟:3步配置OT协议与Purdue模型实战

本文详细介绍了如何使用Cisco Packet Tracer 9.0进行工业网络模拟,包括Purdue模型构建、三大OT协议(Modbus TCP/IP、CIP、PROFINET IO)配置及工业网络安全防护。通过实战演练,读者可掌握工业网络设计、配置与安全防护的核心技能,适用于智能制造和能源管理等场景。

weixin_28691741的博客 353

NI数据采集卡测电流的三种‘姿势’:直接连接、外接分流电阻还是用电流互感器?看完这篇不再纠结

本文全面解析了NI数据采集卡在电流测量中的三种主流方案:直接连接、外接分流电阻和电流互感器。通过对比精度、带宽、隔离等关键参数,结合NI-DAQmx软件生态,为工业自动化、电力监测等场景提供选型指南和实战技巧,帮助工程师优化测量系统设计。

weixin_30882895的博客 423

什么是CPU cache line和cache line bouncing?

什么是cache line?什么是cache line bouncing?

Jesse_Liu666的博客 950

DSP28335做FFT傅里叶变换

1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的。方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DSP28335上行不?测试了一下,是可以的,因为都是用的math.h,下面的一些正弦函数基本一样的 2. 硬件简介,其中DSP28335和TLV320AIC23B之间使用I2C接口进行寄存器配置,...

weixin_30390075的博客 3331

cache与buffer的差别

简单说,Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。所以,如果你注意关心过存储系统的话,你会发现硬盘的读写缓冲/缓存名称是不一样的,叫write-b

szembed的博客 183

JSON 与 JSON-RPC 的区别

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于文本,采用人类可读的语法来表示结构化数据。它起源于JavaScript,但如今已被几乎所有主流编程语言支持。标准文档:RFC 4627数据类型:支持 String、Number、Boolean、Null、Object、Array 六种基本类型格式示例"name": "张三","age": 30,JSON-RPC(JSON Remote Procedure Call)是一种远程过程调用(RPC)协议。

h a 6 6 6 c k 为 你解决复杂难题! 147

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 948

跨界内容生成系统:从拓扑算法到修仙规则引擎的技术实现

规则引擎作为现代软件系统的核心组件,通过定义和执行业务逻辑来实现复杂的决策流程。其技术原理基于条件判断和动作执行的组合,能够将抽象的业务需求转化为可执行的代码逻辑。在技术价值层面,规则引擎提供了高度的灵活性和可维护性,使系统能够快速适应需求变化。特别是在游戏开发和内容生成领域,规则引擎的应用尤为广泛,能够处理复杂的角色属性计算、环境交互逻辑和随机事件生成。以拓扑算法为例,这种数学概念可以转化为游戏中的关卡生成机制,通过连通性分析和空间变换创造多样化的游戏体验。结合修仙题材的设定系统,规则引擎能够实现境界提升

weixin_34087307的博客 348

基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端

【代码】基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端。

weixin_42300449的博客 167

Java开发实战:从环境配置到内存管理的核心避坑指南

在软件开发领域,环境配置与运行时管理是构建稳定应用的基础。理解环境变量的原理,如JAVA_HOME与PATH的协同机制,能确保开发工具链的正确识别与调用。内存管理则是程序性能与稳定性的核心,JVM通过堆内存分配与垃圾回收机制自动管理对象生命周期,但不当的编码实践可能导致内存泄漏或溢出错误,深刻理解其原理对编写高效、健壮的代码至关重要。这些基础技术广泛应用于企业级应用开发、后端服务构建等场景。本文聚焦Java开发中环境变量配置、版本兼容性、内存不足(OutOfMemoryError)及数组越界等典型问题的深度

weixin_34115824的博客 297

基于环形槽谐振器与PIN二极管的频率可重构Vivaldi天线设计与CST仿真研究

摘要 本文设计了一种基于FR4基板的频率可重构Vivaldi天线,通过集成环形槽谐振器(CSRR)和PIN二极管开关实现超宽带(UWB,2-8 GHz)与窄带(2.4/3.5/5.2 GHz)模式的电控切换。天线采用指数渐变槽线结构,结合CSRR的滤波特性和PIN二极管的开关功能,利用CST仿真优化参数。结果表明,UWB模式下S11<-10 dB,窄带模式下目标频点谐振显著,其他频段抑制良好,验证了设计的可行性。该方案为多频段无线通信系统提供了紧凑、低成本的可重构天线解决方案。 关键词:频率可重构天线

huanghm88的专栏 219

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

[转]CPU中的cache结构以及cache一致性

timer实现 https://cloud.tencent.com/developer/article/1553274

专注探索c++,Linux等后台开发相关机制,欢迎关注,欢迎交流 815

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

brpc学习笔记(1)

文章目录一、简介及各个文档学习1.1 bvar1.2 bthread1.3 client1.4 server1.5 内置服务1.6 工具参考 一、简介及各个文档学习 brpc是一款RPC框架,基于brpc可以在一个端口上搭建支持多种协议的服务。 1.1 bvar bvar是多线程环境下的计数器类库,方便统计和查看用户程序中的各类数值(例如qps、平均延时等等),使用thread_local减少了cache bouncing。brpc集成了该模块,因此需要在多线程环境中计数的场景可以第一时间考虑bvar,但

sinat_38705282的博客 4570

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深入浅出cache写策略

随着计算机行业的飞速发展,CPU的速度和内存的大小都发生了翻天覆地的变化,在处理器速度不断增加的形势下,处理器处理数据的能力也得到大大提升。数据是存储在内存中的,内存吞吐率虽然得到很大的提升,但是相对于处理器来讲,仍然非常慢。处理器要从内存中直接读取数据都要花大概几百个时钟周期,在这几百个时钟周期内,处理器除了等待什么也不能做。在这种环境下,才提出了Cache的概念。计算机中常见的存储介质如图1所示,在梯形图中从上到下容量依次递增,速率依次递减,每字节的成本依次递减(图中列出的外部存储不是绝对满足这两条性质

mabin2005的专栏 1899

【随写笔记】循环展开和cache

由数组移位引发的思考: 看代码里有用数组实现FIFO的移位,使用了for循环前向移位 本来猜测是否使用memcpy类的函数会更快一些。后来发现memcpy也不是直接对内存块进行操作。 cpu的快速执行非常依赖于cache,如果cache不命中,cpu会浪费一些时钟周期在等待内存上。(cpu缓存和内存的读取速度要快一个数量级)。小段循环结构容易命中cache。 所以有人...

lewis的博客 896

AXI协议理解

1、AXI 协议定义了memory和外设slave的transaction 属性,通过ARCACHE和AWCACHE信号来指定。控制: 1)transaction progresses如何通过system? 2)system-level cache 如何处理transaction xact_type有:READ、WRITE、IDLE、COHERENT和DATA_STREAM几种,如果打开cache的情况下,xact_type要设为COHERENT,同时...

wuhenge120的专栏 4122

CPU Cache

大纲: 1.CPU Cache的产生背景 2.CPU Cache模型 3.Cache Line 4.Cache Bouncing 5.CPU、CPU Cache、Main Memory交互 6.CPU 缓存一致性 7.Java内存模型 1.CPU Cache的产生背景   计算机中的所有运算操作都是由CPU的寄存器来完成的,CPU指令的执行过程需要涉及数据的读取和...

weixin_30567471的博客 161

java cache line_Java高级进阶多线程学习之路(五)cache line 缓存行

​ CPU从内存读取数据时实际是按块读取的,有什么好处呢?程序局部性原理,可以提高效率,充分发挥总线CPU针脚等一次性读取更多数据的能力。因为多数情况下CPU处理完一个数据后会处理该数据旁边的数据,所以按块去读取时,将一块数据一起读过来放入缓存,这样CPU处理完一个直接从缓存中取下一个,不需要再去内存取,极大的提高了局部性空间效率。这一块数据就被叫做缓存行。那一个缓存行能放多大的数据呢,目前...

weixin_39662834的博客 338

Introduction of DRAM

DDR简介,待完善。

Keep Fighting! 506

linux并发机制Ⅱ---mutex机制分析

目录 1概述 2optimistic spinning 2.1 MCS锁 2.2 osq流程分析 2.2.1 osq_lock 2.2.2 osq_unlock 2.2.3osq_wait_next 3mutex 3.1 数据结构 3.2 加锁流程分析 3.2.1 fast-path 3.2.2 mid-path 3.2.3 slow-path 3.3 释放锁流程分析 1概述 Mutex互斥锁是Linux内核中用于互斥操作的一种同步原语; 互斥锁是一种休眠锁,...

1489

缓存命中_cachegrind

程序运行时,cpu通过一次读取从内存中获取的当前使用变量和变量相邻的值,放入cpu的cache中,该值的大小一般为64byte。左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。LLi misses:3级LLi 缓存未命中数,LLi miss rate:3级缓存未命中率。I1 misses:1级缓存未命中数,I1 miss rate:1级缓存未命中率。LL rate:3级缓存未命中率。

前行 1159

Linux 中的同步机制——rwsem

读写信号量的原理与读写锁类似,读写信号量归根到底是“信号量”,读写锁归根到底是“自旋锁”,而信号量与自旋锁的区别一个可以睡眠,一个只能自旋。允许多个读者同时进入临界区;读者与写者不能同时进入临界区(读者与写者互斥);写者与写者不能同时进入临界区(写者与写者互斥);

私房菜 1750
上一篇: 数据库修仙金丹篇三——vpp源码流程
下一篇: 数据库修仙金丹篇二——vpp 主要数据结构
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值