多处理机的Cache一致性问题及其解决方案

  • 多处理机的Cache一致性问题及其解决方案
    • 1 多处理机体系结构
    • 2 Cache一致性问题
    • 3 监听一致性协议
      • 3.1 写作废方式
        • 3.1.1 具体流程
        • 3.1.2 状态转换图
      • 3.2 写更新方式
    • 4 目录一致性协议

多处理机的Cache一致性问题及其解决方案

1 多处理机体系结构

一种很朴素的提高计算机解决问题的性能的方法是,把多个小的计算机连接起来、并行执行相对独立的任务、必要时互相做到通信,就可以制造出一台功能强大、性能较高的计算机,这也是多处理机技术的基本思想。

在这,我们将讨论的多处理机局限于

  • 处理机的协调与使用由单一的处理器系统来控制。
  • 多处理机通过共享地址空间来共享存储器。
  • 各个处理机有自己的 Cache

在逻辑上,多处理机共享地址空间。而在物理上,可以采取两种方式布置主存储器,可以采取集中式和分布式。如下图:

对于图一的集中式结构,通常称其为集中式共享存储器体系结构,这种体系结构还有的一个特点是,所有的处理器访问存储器的延迟都是一致的,有时也被称为UMA结构(Uniform Memory Access)。

对于图二的集中式结构,通常称其为分布式共享存储器体系结构,这种体系结构采用了分布式处理器,各处理器间通过互联网络进行数据的传送,有时也被称为NUMA结构(Non-Uniform Memory Access)。

而无论是哪一种结构,都可能会出现数据共享的问题,即两个不同处理机的 Cache 存放了缓存了同一个主存单元的块,即共享数据,这种情况就可能会导致 Cache 一致性问题的出现。


2 Cache一致性问题

通过下图,我们能理解什么是 Cache 一致性问题。

具体的过程描述如下:

  • 初始时,CPU A Cache 以及CPU B Cache 中无缓存内容,而主存中的X单元处存储的内容为1。
  • 在1时间时,CPU A 读取 X 单元,由于CPU A Cache 中无缓存内容,因此将主存中的数据读入CPU A Cache 中。
  • 在2时间时,CPU B 读取 X 单元,由于CPU B Cache 中无缓存内容,因此将主存中的数据读入CPU B Cache 中。
  • 在3时间时,CPU AX 单元写入0,假设写策略为写直达法,由于主存是共享的,CPU A 将更新其 Cache 的内容为0,且将主存的 X 单元的内容更新为0。
  • 但是 CPU B Cache 中缓存的 X 单元的值仍为旧值,这就导致不一致的情况出现了。

为实现 Cache 的一致性,针对两种体系结构,可以采用两种不同的方法保证 Cache 的一致性。


3 监听一致性协议

针对第一种体系结构,即集中式共享存储器体系结构,来说明这种协议,并且假设Cache 的写命中策略是写回法

所谓监听,就是每个 CPU 都有一个Cache控制器,随时对通过总线中的数据进行判断,判断自己这是否有总线上请求的数据块。

我们讨论两种保持一致性的方式:写作废方式、写更新方式。

3.1 写作废方式

这种方式的基本思想是,当某个 CPU 出现写请求时,将其它的副本直接作废。其详细过程如下,

为了更好地讨论协议,我们将每个CPUCache 的每个块都归结为下述的三种状态:

  • 未缓冲(U):所有的 Cache 中都无此块。
  • 专有态(E):即该块仅仅在该Cache 中有副本,且该块的内容与主存中的不一致。
  • 共享态(S):即该块在一个或多个 Cache 中有副本,且内容与主存中一致。

3.1.1 具体流程

  • 假设 CPU 1 有一个读请求,

    • 若命中,则 Cache 1 直接将值返回给 CPU 1
    • 若未命中,就把读失效信号、以及相应地址放到总线上,其他的的 CPU 一直监听着总线,CPU 1 进行读取主存的操作,
      • 若该地址不能在其他 CPUCache 中被匹配,则结果就是 CPU 1 能正常从主存中读取出数据,且将该块设置为共享态
      • 若该地址在 CPU 2 中被匹配上,且该块在 CPU 2Cache 中的状态是共享态,那么CPU 2 将不会采取任何操作。
      • 若该地址在 CPU 2 中被匹配上,且该块在 CPU 2Cache 中的状态是专有态,那么CPU 2 将向 CPU 1 提供该块,并停止 CPU 1 访问主存的操作。同时,该块将被写回至主存,CPU 1 Cache 以及 CPU 2 Cache 中该块的状态修改为 共享态
  • 假设 CPU 1 有一个写请求,
    • 若写命中,

      • 若该块在CPU 1 Cache 中的状态是共享态,那么 CPU 1 将该块状态改为专有态,且向总线发送写作废信号,使得别的 CPU 将其Cache 中相应的共享块(若存在)设置为无效
      • 若该块在CPU 1 Cache 中的状态是专有态,那么 CPU 1 进行正常的写数据的操作,即将新数据写入该块。
    • 若写缺失,
      • 那么 CPU 1 将该块状态改为专有态,并且正常写入数据,且向总线发送写作废信号,使得别的 CPU 将其Cache 中相应的块(若存在)设置为无效

3.1.2 状态转换图

其状态转换图如下,

3.2 写更新方式

这种方式的思想是,当某个 CPU 出现写请求时,将其它的副本一并更新。

具体说来,就是当一个 CPU 写某数据时,若该块是共享块,通过广播使其他所有 Cache 中有对应副本的块都一并更新。

这种方式很需要总线和存储器的带宽,因为要经常性地广播修改的数据,这使得这种方法被采用地越来越少。


4 目录一致性协议

目录是一种数据结构,记录了 Cache 块的一些状态:

  • Cache 块的访问状态,未缓冲共享态专有态
  • Cache 块的位向量,用于记录该 Cache 块的共享情况,即位向量的每一位代表一个处理器(CPU),若其为 1 ,则表明在该位置的 CPU 有该 Cache 块的副本。

同样地,目录一致性协议也有两种实现方式,即写作废方法、写更新方法,在这里,我们同样假设 Cache 的写策略是写回法

此时,Cache 每个块的状态转换模式和监听一致性协议是一样的

基于目录的一致性协议要避免不必要的性能损失,比如避免广播,而是根据位向量,找到对应的 CPU 向其发送信息。

总结一下目录一致性协议的基本点:

  • 每个 CPU 节点增加了目录存储器,用于存放目录
  • 存储器的的每一块在目录中都有对应的一项。
  • 每一个目录项的组成成分是:访问状态、位向量。
  • 状态描述该目录项对应的存储块的访问状态:未缓冲共享态专有态
  • 位向量的每一位对应于一个 CPUCache,用于指出该 CPUCache 有无该块的缓存。
  • 当处理器对某一块进行写操作时,需要根据位向量,**”通知“**对应的 CPU 进行作废或更新操作。

基于目录的一致性协议配合分布式共享存储器体系结构,能很好地支持系统的可扩展性,然而,这种多处理机的实现模式,需要带宽较大的网络来实现,普通的以太网是远远达不到带宽要求的。

多处理机的Cache一致性问题及其解决方案相关推荐

  1. Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

    目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...

  2. Linux内存管理:ARM64体系结构与编程之cache(2):cache一致性

    <Linux内存管理:ARM64体系结构与编程之cache(1)> <Linux内存管理:ARM64体系结构与编程之cache(2)> <ARM SMMU原理与IOMMU ...

  3. 多处理机Cache一致性问题及解决办法

    1. 造成Cache一致性问题的原因 出现不一致的原因有三个:共享可写的数据.进程迁移和I/O传输. 2. 解决办法 解决多处理机Cache一致性问题提出了两种解决办法:侦听一致性协议和基于目录的一致 ...

  4. Cache 工作原理,Cache 一致性,你想知道的都在这里

    欢迎关注方志朋的博客,回复"666"获面试宝典 可以随便到网上查一查,各大互联网公司笔试面试特别喜欢考一道算法题,即 LRU缓存机制,又顺手查了一下LRU缓存机制最近有哪些企业喜欢 ...

  5. 多功能PCIE交换机之三:PCIE非透明桥 cache一致性

    关于PCIE非透明桥 cache一致性 PCIE非透明桥提供了两种机制来从local node往remote node迁移数据,分别是基于地址映射和内嵌的 DMA.对remote节点而言,当它接受数据 ...

  6. Cache 工作原理、Cache 一致性,你想知道的都在这里

    作者 | 桔里猫 来源 | https://zhuanlan.zhihu.com/p/386919471 可以随便到网上查一查,各大互联网公司笔试面试特别喜欢考一道算法题,即 LRU缓存机制,又顺手查 ...

  7. Cache一致性与2种基本写策略(1)

    2019独角兽企业重金招聘Python工程师标准>>> (1) 一致性问题的产生--信息不对称导致的问题 现实生活中常常会出现因为沟通不畅而导致的扯皮,一方改了某些东西,又没有及时通 ...

  8. DMA及cache一致性的学习心得

    这里提到的DMA设备是非PCI设备 在framebuffer的prob函数中,用到了这样一个函数,下面分析下它的作用 /* *    s3c_fb_map_video_memory(): *   分配 ...

  9. Cache工作原理,Cache一致性,你想知道的都在这里

    可以随便到网上查一查,各大互联网公司笔试面试特别喜欢考一道算法题,即 LRU缓存机制,又顺手查了一下LRU缓存机制最近有哪些企业喜欢考察,超级大热门! 今天给大家分享一篇关于 Cache 的硬核的技术 ...

最新文章

  1. 摄像头PVD和CVD薄膜
  2. linux open系统调用的O_DIRECT标记
  3. python opencv读写图片
  4. python刚开始学什么_刚入门的时候,你们都是怎么开始学Python的呢?
  5. 初学Python——文件操作第二篇
  6. Java并发编程 Volatile关键字解析
  7. 一人之力也能抬起一辆大型箱车?
  8. Pytorch有关张量的各种操作
  9. 典型的 C++ 程序员成长经历
  10. c 语言自行实现字符串常用库函数_学习c语言的7本书——你知道吗?
  11. RobotStudio传送带设计
  12. 【Y9000x】单硬盘UEFI+GPT基于Win10安装Ubuntu18.04
  13. uk码对照表_36码(uk码和中国码对照表)
  14. Windbg远程调试
  15. Spire pdf 操作pdf,页眉 页脚 水印 二维码
  16. 关于hibernate的generator标签中param name=sequencexxx/param用了还是默认的hibernate_sequence的问题
  17. 微信小程序 实现报表(表格)双指缩放功能
  18. D3D11 骨骼动画(基于MD5格式)
  19. 观察装柜一个月的装柜波动
  20. wsdl互联网短信接口_中国移动推出短信小程序,逆袭机会在哪里?

热门文章

  1. JavaEye论坛热点推荐-2009年3月
  2. c语言获得鼠标点击坐标方法,C语言怎样获取鼠标坐标?
  3. android camera surfaceview 变形,使用Camera预览显示变形问题
  4. BootStrap 怎样调整td的宽度
  5. [笔记] EXCEL中的数据透视表含义、用途、何时使用
  6. 如何在jsp内嵌音乐_JSP页面内嵌播放器的实现方法
  7. 如果编程界推行中文标准的话
  8. 四个小兔斯基太可爱了
  9. 遍历未知key的map:
  10. 饥荒联机linux服务器,生存类游戏 Don't Starve Together(饥荒联机版)Linux 专用服务器的搭建【...