• 2024-04-02【CHI协议-1】CacheLine状态
    从这一章开始就和大家一起分享一下CHI协议中具体的一些事务以及场景。今天主要梳理一下Read事务,但是要讲清楚这些乱七八糟的事务,还需要了解其他很多知识点,不然就是云里雾里的,比如cacheline的状态啊,什么是snoop啊,以及一致性节点啊等等。但是这些太多了,如果先要把这些都讲清楚
  • 2024-03-12Cache和DMA一致性
    DMA应该多多少少知道点吧。DMA(DirectMemoryAccess)是指在外接可以不用CPU干预,直接把数据传输到内存的技术。这个过程中可以把CPU解放出来,可以很好的提升系统性能。那么DMA和Cache有什么关系呢?这也需要我们关注?需要解决什么问题我们知道DMA可以帮我们在I/O和主存之间搬运数据,
  • 2024-02-28缓存一致性协议MESI
    从Cache说起如今的多核计算机往往包含多个CPU核心,其中每个CPU有自己独立的CacheL1、CacheL2,同时多个CPU共享主存。由于CPU获取指令数据的速度远快于主存,所以通过一级缓存、二级缓存等等来降低CPU从主存获取数据的频率,提升性能。CPU不会每需要一次数据就从主
  • 2023-07-26std::optional 内存布局
    对于std::optional<int>对应的内存布局为structoptional_mem{ int_M_payload; bool_M_engaged;};可以通过godbolt通过pahole工具查看在汇编窗口选择pahole右侧会显示数据结构classexception_ptr{ void*_M_exception_object;/*0
  • 2023-06-14CPU 缓存一致性:MESI
    概述MESI(也称伊利诺斯协议)是一种广泛使用的支持write-back策略的缓存一致性协议。MESI状态我们假设CPU中共有$k$个核;CPU中每个cacheline使用$4$种状态进行标记:状态介绍所有核中该状态的个数MODIFIED实际上是exclusivedirty,说明该核的缓存数据被修改
  • 2023-06-13CPU 缓存一致性:MESI
    概述MESI(也称伊利诺斯协议)是一种广泛使用的支持write-back策略的缓存一致性协议。MESI状态我们假设CPU中共有$k$个核;CPU中每个cacheline使用$4$种状态进行标记:状态介绍所有核中该状态的个数MODIFIED实际上是exclusivedirty,说明该核的缓存数据被修改
  • 2023-05-05【CacheLine】关于缓存行的笔记(存疑)
    什么是缓存行Cache是由很多个cacheline组成的。每个cacheline通常是64字节,并且它有效地引用主内存中的一块儿地址。一个Java的long类型变量是8字节,因此在一个缓存行中可以存8个long类型的变量。CPU每次从主存中拉取数据时,会把相邻的数据也存入同一个cacheline。在访问一
  • 2023-02-18Linux 系统中缓存行cacheline
    为了解决计算机系统中主内存与CPU之间运行速度差问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。这个Cache一般是被集成到CPU内部的,所以也叫CPUCache,如图
  • 2023-02-04C++ atomic的Cacheline及Memory fence问题
    我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生racecondition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指
  • 2023-01-04伪共享(False Sharing)
    【参考】https://zhuanlan.zhihu.com/p/55917869【cachememory】cpu和主存间存在三级缓存L1,L2(单核独享)L3(多核共享)【L1和L2如何保持一致】mesi协议定义cacheline
  • 2022-12-06缓存行Cache Line
    CacheLine:顾名思义叫做缓存行缓存行越大,局部空间效率越高,读取时间越慢!缓存行越小,局部空间效率越低,读取时间越快!众所周知,计算机将数据从主存读入Cache时,是把要读取
  • 2022-10-03CPU高速缓存行对齐和代码优化
    CacheLine众所周知,计算机将数据从主存读入Cache时,是把要读取数据附近的一部分数据都读取进来这样一次读取的一组数据就叫做CacheLine,每一级缓存中都能放很多的CacheLine两