共享内存架构中的缓存一致性

15 篇文章 0 订阅
9 篇文章 0 订阅

摘自曼彻斯特大学伊恩·沃森的讲座

概述

  • 我们已经讨论过在单核上的性能优化
    • 局部性
    • 向量
  • 现在让我们优化一个共享内存程序
  • 两种架构:
    • 基于总线的共享内存机器(小规模)
    • 基于目录的共享内存机器(大规模)

基于总线共享内存的体制

基本情况很简单:
1

体制

  • 总线通常是简单物理连接(导线)
  • 总线带宽限制了cpu数量
  • 可能是多个内存元素
  • 当前,假定每个cpu仅有一级缓存

内存一致性面临的问题

  • 假定仅一级缓存与主内存
  • 处理器写入它缓存的位置
  • 其他缓存可能保存了共享的副本-副本将要过期
  • 仅仅更新主内存是不够的

案例

2

处理器1读取X:从内存中读取X值为24并缓存它
处理器2读取X:从内存中读取X值为24并缓存它
处理器1写入X值32:仅更新了它的本地缓存副本
处理器3读取X:应该读取到什么值呢?
内存与处理器2认为X值为24
处理器1认为X值为32
注意:写入缓存是不够好的

总线嗅探

  • 每一个cpu(缓存系统)‘嗅探’(即:不断的观察)它缓存数据地址相关的写动作
  • 假定总线结构是全局的,即所有的通信都对所有处理器可见
  • 更具扩展性的解决方案是:‘基于目录’的一致性方案

嗅探协议

  • 写无效
    • cpu想要写一个地址,抢占一个总线周期并发送一个‘写无效’消息
    • 所有处理器嗅探到缓存‘写无效’消息后,将他们副本相应的缓存行置为无效
    • cpu写入它缓存副本(将定现在它也写入了内存)
    • 其他cpu的任何共享读现在都将miss,并重新获取新数据
  • 写更新
    • 想要写数据的cpu抢占一个总线周期,并在更新自己副本时广播新数据
    • 所有嗅探缓存的处理器更新他们的副本
  • 注意在这两种方案中,同时写的问题都由总线仲裁解决 - 同一时间仅有一个cpu可以使用总线

更新或无效

  • 更新看起来最简单,最明显,最快,但是:
    • 对同一个数据(字)多次写入(无中间读)仅需要一个无效消息,但是需要对每个监听消息的处理器更新
    • 写入(通常)多字缓存块中的同一块只需要一个invalidate,但需要多次更新。
  • 由于空间与时间都具有局部性,上述的场景经常发生
  • 在共享内存多处理器中,总线带宽是一种宝贵的资源
  • 经验表明,invalidate协议使用的带宽要少得多相对于写更新
  • 将只考虑invalidate方案的实现细节

实现问题

  • 在这两种方案中,如果知道缓存值未共享(在另一个缓存中复制)可以避免发送任何消息
  • invalidate表示认为缓存值更新已写入内存。如果我们使用一个‘copy back’方案,其他处理器可能再次获取到旧值在缓存miss情况下。
  • 我们需要一个协议来处理所有的这些问题

MESI协议

  • 一个实用的多处理器invalidate协议,它试图最小化实用总线
  • 允许实用‘write back’方案-即在‘dirty’缓存行被替换之前主存没有更新
  • 常规缓存标签的扩展,即无效标签与‘dirty’标签在普通回写缓存中。

缓存行可能是四种状态之一(2bits)

  • 已变更 - 缓存行已经被修改,与主存不一致 - 仅存在当前缓存副本(多处理器‘dirty’)

  • 独有的 - 缓存行与主存一致,并且仅存在当前缓存副本

  • 共享的 - 与主存一致,但是副本也存在其他缓存中

  • 无效的 - 缓存行是无效的(如果在普通缓存中)

  • 缓存行状态随着内存访问事件的变化而变化

  • 事件可以是

    • 由本地处理器动作引起的(即缓存访问)
    • 由总线动作引起的 - 作为一次嗅探的结果
  • 缓存行只有在地址匹配时才受自己状态的影响

  • 操作可以非正式的描述,看作本地处理器的动作

    • 读命中
    • 读未命中
    • 写命中
    • 写未命中
  • 可以通过状态转换图更正式的描述

MESI本地读命中

  • 缓存行状态一定是MES三者之一
  • 读命中的值一定是正确的本地值(如果是M状态,它一定被本地修改了)
  • 简单的返回值
  • 没有状态变更

MESI本地读未命中

  • 没有其他缓存副本

    • 处理器通过总线请求主存
    • 主存的value读至本地缓存,标记状态为E
  • 已经存在E状态副本

    • 处理器通过总线请求主存
    • 嗅探缓存将值放入总线
    • 主存访问被抛弃
    • 本地处理器缓存值
    • 二者的缓存行状态至为S
  • 多个缓存已经有了S状态副本

    • 处理器通过总线请求主存
    • 嗅探缓存之一将值放入总线(总线仲裁)
    • 主存访问被抛弃
    • 本地处理器缓存值
    • 本地副本设置为S状态
    • 其他副本保持S状态
  • 一个缓存副本状态为M

    • 处理器通过总线请求主存
    • 嗅探缓存将值放入总线
    • 主存访问被抛弃
    • 本地处理器缓存值
    • 本地副本标记为S
    • 原值(M)复制回主存
    • 原值状态变更M->S

MESI本地写命中

缓存行必须是MES状态之一

  • M
    • 缓存行是独有的,并且已经为‘脏’行
    • 更新本地缓存值
    • 没有状态变更
  • E
    • 更新本地缓存值
    • 状态变更E->M
  • S
    • 处理器在总线上广播一个invalidate消息
    • 拥有副本状态为S的嗅探处理器变更状态S->I
    • 本地缓存值更新
    • 本地状态变更S->M

MESI本地写未命中

具体操作取决于其他处理器中的副本

  • 没有其他副本
    • 从主存中读取值至本地缓存(?)
    • 更新值
    • 本地副本状态变更为M
  • 存在其他副本,存在一个副本状态为E,或者多个副本状态为S
    • 从主存中读取值至本地缓存,总线事务标记为RWITM(read with intent to modify)
    • 嗅探处理器看到该动作则将他们的本地副本置为无效状态I
    • 本地副本更新并变更状态为M

另一个副本状态为M

  • 处理器发布总线事务标记为RWITM
  • 嗅探处理器看到该动作
    • 阻塞RWITM请求
    • 获取总线控制权
    • 将它的副本写回主存
    • 设置它的副本状态为无效I
  • 原本地处理器再次发布RWITM请求
  • 当前是简单的无副本场景
    • 从主存读取值至本地缓存
    • 本地副本值更新
    • 本地副本状态变更为M

把所有动作放在一起

  • 上述所有信息可以用一个简洁的状态变更图表达
  • 图展示了缓存行在处理器中发生了什么,由于
    • 由处理器产生的主存访问(读命中/未命中,写命中/未命中)
    • 由其他处理器进行的内存访问会导致由这个snoopy缓存观察到的总线事务(主存读,RWITM,Invalidate)

MESI – 本地启动的访问

3

MESI – 远端启动的访问

4

MESI 注意事项

  • 有一些少数的变种(写未命中场景的特殊做法)
  • 如果缓存行状态为M,那么当缓存线被逐出时,正常的“回写”就完成了
  • 多级缓存
    • 如果缓存是包含的,那么只有最低级别的缓存需要在总线上窥探

目录方案(Directory Schemes)

  • 嗅探方案不能扩展,因为它们依赖与广播
  • 基于目录的方案允许扩展
    • avoid broadcasts by keeping track of all PEs caching a memory block, and then using point-to-point messages to maintain coherence
    • they allow the flexibility to use any scalable point-to-point network

5

关键问题

  • 内存与目录带宽的扩展
    • 不能集中主存或目录内存
    • 需要一个分布式内存和目录结构
  • 目录内存需求不能很好的扩展
    • Number of presence bits grows with number of PEs
    • Many ways to get around this problem
      • limited pointer schemes of many flavors
  • 行业标准
    • SCI: Scalable Coherent Interface,可扩展的一致性接口
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、构造运营文档的基本内容:操作指南、标准的操作流程;用户支持和技术支持的流程;知识库;技术支持人员的培训。 2、在制定项目间里程碑时,以下哪些方针可以借鉴? 由项目类型决定;考虑外部事件和风险;避免长时间没有里程碑;将里程碑与交付成果结合起来;仅使用适合项目情况的MSF 推荐的里程碑 3、关于“项目对团队成员能力的需求”以下说法正确的是:在某个项目给定范围内,能够保证工作有效进行所需要的知识、技能和绩效等级 4、使用测试的目的是确保解决方案在它所需要的环境下正常工作,其重点是从用户和运营人员的角度对解决方案进行测试。使用测试的类型包括:配置测试;兼容性测试;压力测试;性能测试;文档和帮助文件测试;可用性测试 5、MSF的哪一个角色负责客户最后签字认可过程?发布管理角色 6、覆盖测试是开发阶段最常见的测试。它有以下类型:单元测试;功能测试;签入测试;构造验证测试;回归测试 7、使用内部发布的好处:将复杂项目分解为多个可管理的任务;易于实现对计划的变更;提高了解决方案的整体质量;提供了一个相对容易实现的短期目标 8、团队模型的环形结构的六个角色是什么?程序管理;开发;测试;发布管理;用户体验;产品管理 9、MSF 开发阶段团队主要工作包括:编写代码;开发基础架构;创建培训课程和文档;开发市场和销售渠道 10、完成收尾活动将产生哪些类型的文档?主要交付成果的最终版本:远景/范围文档、功能规格说明书 ; 客户/用户满意度调查;后续步骤的总结 11、常用传递标识流的方法有:传递用户信息,重新认证;传递认证凭证;单一认证解决方案;运行在同一上下文 12、建立变更控制的重点是什么?应用于所有的变更;促进变更的合并;基于 MSF 创建“动态更新文档”的核心概念 ;尽可能早地确定文档的基准版本,尽可能晚地确定其最终版本,使团队保持灵活性 13、SOA的特性为:明确地定义系统边界;每一个Service是自治的 ;Services与它们的消费者之间共享的是Schema和Contract ;以适用为目的的设计 14、以下哪些是功能规格说明书的组成元素?远景/范围总结;背景信息;设计目标;使用场景;功能和服务的描述;组件规格说明(产品和配置);依赖关系;附件 15、下面,有关Object Spaces叙述正确的是:将业务逻辑和数据存取逻辑隔离起来/用业务对象方式操作数据 16、User Interface Process Components的作用是什么?隔离了UI与业务逻辑层/对流程的UI进行了管理/提供了状态保存和传递的机制 17、关于功能规格说明书的说法,正确的是:功能规格说明书描述了要构造的解决方案的功能,包含设计成果/创建功能规格说明书是一个逐步完善的迭代过程 /如果没有功能规格说明书,团队将不知道如何正确地构建解决方案,用户的期望也会难以确定/如果没有功能规格说明书,团队很难对项目的预算和进度表做出估计 18、关于“解决方案验证”说法正确的是:解决方案验证可以降低风险,避免在大规模投资后才发现解决方案的基础构架部分并不能在生产很好地运行 / MSF解决方案验证并不完全等同于原型,或单纯的技术验证。/确认解决方案的基础构架在实验测试环境下是可行的。 19、对于开发和测试环境,下列说法正确的是:开发和测试环境必须能反映生产环境 /生产环境同开发和测试环境必须分离/应按照开发和测试计划设置的标准配置来建立环境 /为了实现对项目的控制,需要注意同步开发和测试环境之间的状态 20、MSF 稳定阶段的交付成果包括:试运行评审/可发布版本(源代码和可执行文件、脚本和安装文档、最终用户帮助和培训材料、运营文档和发布说明)/测试和缺陷报告 / 项目文档 21、MSF如何帮助IT克服在项目过程遇到的障碍?保持交流与沟通 /有效地组织团队 /理解业务的方向 22、以下哪些是扩展团队规模的因素? 项目的复杂程度 /项目大小/风险阀值/技术难度 23、下面哪些是核心组件的示例:域控制器/邮件路由器/远程访问服务器/数据库服务器 24、八条MSF基本原则的哪几条与团队模型有关?拥有共同的远景/关注业务价值 /灵活敏捷,主动应变 /向团队成员授权/鼓励开放式沟通/职责清晰,责任共享 25、微软运营框架将配置管理定义为一个非常重要的过程,关于“配置管理”说法正确的是:实现再现或回退到前一版本的配置/需要团队在数据库或其他工具记录各种配置 /对解决方案各个版本的历史记录进行追溯和控制的正规过程 26、请从下面选出IT项目在交付解决方案的过程会遇到的障碍:目标和职能分离 /业务和技术分离/缺乏共同的语言/沟通不利 27、在项目设立里程碑有哪些好处?帮助同步工作成果/使项目团队外的人员也能看到项目进展情况和质量情况/可在项目进行纠正偏差/着重于评审项目目标和交付成果 /增加阶段性的审批环节,只有在审核通过后,才进入下一个阶段 28、MSF的基本要素——两个模型和三个准则分别是什么?团队模型和过程模型,项目管理准则、风险管理准则和就绪管理准则 29、使用平衡三要素管理项目范围时,需要考虑的三要素包括:资源/进度/功 30、构造用户体验交付成果是:用户参考资料(用户手册和帮助文件)/用户界面的图形元素/最终用户培训/可用性测试场景 31、程序管理角色的目标是什么?按项目约束交付解决方案 32、功能团队必须要包括所有角色吗?不是 33、发布管理角色需要参与驱动的计划包括:安全性计划/部署计划/采购和设施计划/试运行计划 34、好的项目远景能达到什么作用?引导团队朝共同的方向前进/简化决策的制定过程,确保决策的一致性/激励团队/强化解决方案目标/保持对解决方案质量的重视 35、测试的目标包括以下哪些内容:找出所有团队必须解决的缺陷/按照功能规格说明书验证解决方案的组件/找出设计的错误/找出由意外的用户行为而产生的错误/测试解决方案的所有组成部分 36、对于MSF 过程模型的阶段和里程碑说法正确的是?在计划阶段,团队和客户共同定 义构建和部署的内容以及构建的方式和时机/在开发阶段,团队构建并测试解决方案,具体包括代码、基础构架和文档等交付成果。/在稳定阶段,对功能齐全的解决方案进行最后的测试,使其成为稳定的解决方案,为其后的发布做准备。/在部署阶段,将稳定、完善的解决方案完全部署为真正的产品。 37、MSF部署阶段交付成果包括:运营及支持信息系统/所有版本的文档、装载设置、配置、脚本和代码 / 项目收尾报告 38、六种MSF角色,哪种角色不能与其他角色合并?开发 39、支持象限的主要目的是什么?整合过程、工具和人员,以便标识、排列(区分优先级)、指派、诊断、跟踪和解决突发事件、问题、错误、请求和质/与客户进行清晰的和精确的交流/平衡“知识可扩展”的自助帮助和人工帮助/达到内部和外部服务台的无缝连接。 41、UIP Components需要考虑的问题是什么?如何将控制流程和窗口、页面等界面元素分开//流程的每一步都需要保存状态。如何能抽象出一个统一的状态模型,可以使状态在留转过程被保存和传递//最好能够用一套处理机制,能够满足WinForm程序和Web应用的需要 //用户的在一个操作流程可能会嵌套子流程,或者会转到别的流程 //记录流程的流转的日志 //流程的维护 42、以下,哪些是针对系统安全性的威胁:标识欺骗/篡改数据 /可否认性/拒绝服务 43、主-从级联复制的优势是什么?将源从大量复制负载解放出来/添加多个目标不影响源 G:CET能够相对独立 44、下面哪些应用可以被称为Smart:A:能够利用本地资源 A:智能安装和更新 A:Connected A:对各种客户端设备支持性 45、异常可以分为:/业务异常 /技术异常 46、下面哪个是对企业体系结构4个视角的正确说法:业务、应用、技术、信息 48、有哪些类型的Smart Client应用:/标准的WinForm程序/Microsoft Office /Internet Explore 49、异步消息通讯机制的优点是:/扩展性和可用性/更容易定义SLA 50、下面,哪些是Process Service的要求:/可以方便的修改和定义 /对于业务人员来说易于掌握 /方便的工具来开发和调试 /健壮的异常处理(交易补偿) /大的Process可以包含对于一系列小的Process的调用 51、MSF 构思阶段的目标是什么?/创建一个关于项目的目标、限定条件和解决方案的概要视图 界面层的异常处理的处理方法有//重试/将问题提交给用户/停止界面流程 52、 常见的Caching技术有://ASP.NET Cache //数据库缓存 //通过静态变量缓存//Memory-Mapped Files 53、 授权包括://用户的权限//代码的执行权限 54、 在构思阶段,各种角色的职责是://根据质量目标提供反馈//提出为了保证质量而需要采取的行动 55、 移动数据拷贝需考虑的因素有哪些?//数据的有效性不再符合要求//网络或应用程序平台是不可靠的//其他应用程序要求使用不同结构的数据//网络带宽不能满足实时数据访问的性能要求//允许一定的延迟//对数据的更改一般不会存在冲突//其他应用程序只要求读访问,或者不要求保留对目标的更新 56、 使用SQL Server实现主-从事务增量复制注意事项是什么?//使用SQL Server用户账户连接到分发服务器//将所有的计算机置于一个Microsoft Windows域,或者在所有计算机上设置一个具有相同密码的公共用户。然后在分发服务器和订阅服务器之间使用Windows信任连接 57、 为什么使用Web Service?//建立在广泛的互操作基础上//支持自治的应用模型 //灵活的发现服务//灵活的绑定服务 58、 主-主行级同步的影响因素有哪些?//当断开连接时,需要能够更新拷贝//乐观的并发控制 59、 数据复制模式有哪些?//主-主行级同步模式 //使用SQL Server的主-主行级同步模式//主-从快照复制模式//捕捉事务细节模式 //主-从事务增量复制模式 60、 在收尾阶段应该进行哪些工作?//调查客户满意度 //准备收尾报告 //进行项目回顾 //得到客户的签字认可 61、 SOA指://本质上是一组服务的集合。这些服务之间相互沟通。这种沟通既可以是简单的数据传输,或者是由两个或多个服务共同参与的一些活动。SOA也包括Service之间的连通技术。 62、 以下概念哪些与目录服务管理 SMF有重要关系?//支持目录功能的应用程序 //日常支持活动,如对企业目录的监控、维护和故障排除//用户、组和资源的创建和管理//元目录 (Metadirectory) 63、 主-主复制的解决方案是怎样的?//从源端复制数据到目标端,并检测和解决自上一次复制以来出现的任何更新冲突 //由位于源和目标之间、方向相反的两个复制链接组成的复制构造块 64、 下面哪些应用可以被称为Smart :A:能够利用本地资源 A:智能安装和更新 A:Connected A:对各种客户端设备支持性
分布式缓存在微服务架构起着重要的作用。它可以提高系统的性能、可扩展性和可靠性。下面是关于微服务分布式缓存的一些常见问题和答案: 1. 什么是分布式缓存? 分布式缓存是指将缓存数据存储在多个节点上,以提供更高的性能和可扩展性。它可以减少对底层数据源的访问次数,从而提高系统的响应时间。 2. 为什么在微服务架构使用分布式缓存? 在微服务架构,每个微服务都是相互独立的,拥有自己的数据存储。使用分布式缓存可以将共享的数据存储在缓存,减少对微服务之间的数据传输和数据库访问的依赖,提高系统的性能和可扩展性。 3. 哪些场景适合使用分布式缓存? 分布式缓存适用于那些读取频率高、计算代价高、数据变化不频繁的场景。例如,用户信息、商品信息、配置信息等可以存储在分布式缓存,以减少对数据库的访问次数。 4. 常见的分布式缓存系统有哪些? 常见的分布式缓存系统包括Redis、Memcached、Hazelcast等。它们提供了高速的内存存储和读取能力,并支持分布式部署和数据复制。 5. 如何使用分布式缓存? 使用分布式缓存需要考虑数据一致性和缓存更新的问题。可以使用缓存策略、缓存失效机制和更新通知等方式来管理缓存数据的一致性,并定期清理过期的缓存数据。 6. 分布式缓存有哪些挑战? 分布式缓存面临的挑战包括缓存一致性、缓存雪崩、缓存击穿和缓存穿透等问题。需要通过合适的缓存策略和技术手段来应对这些挑战。 希望以上信息对你有所帮助!如果还有其他问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值