当前位置: 首页 > news >正文

天眼查登录入口google搜索引擎优化

天眼查登录入口,google搜索引擎优化,网站建设问题调查,做网站的公司都有哪些业务CPU 核心之间数据如何传播 高速缓存中的值被修改了,那么怎么同步到内存中呢? ① 写直达(Write-Through)② 写回(Write-Back) 写直达(Write-Through) 简单,但是很慢&am…

CPU 核心之间数据如何传播

高速缓存中的值被修改了,那么怎么同步到内存中呢?

  • ① 写直达(Write-Through)
  • ② 写回(Write-Back)

写直达(Write-Through) 简单,但是很慢,每次写都需要经过 内存总线

在这里插入图片描述

写回(Write-Back):尽可能推迟更新,只有当替换算法要驱逐这个更新过的缓存块时,才把它写回到内存中。由于局部性,写回能显著地减少总线流量,但是它的缺点是复杂。

在这里插入图片描述

写传播(Write Propagation)

写传播是说,在一个 CPU 核心里,我们的 Cache 数据更新,必须能够传播到其他的对应核心节点的 Cache Line 里。

在这里插入图片描述

事务的串行化(Transaction Serialization)

事务串行化是说,我们在一个 CPU 核心里面的写入顺序,在其他的核心节点看起来,顺序是一样的。

在这里插入图片描述

CPU 核心之间数据传播的两种方式

  • ① 写失效(Write Invalidate)
  • ② 写广播(Write Broadcast)

写失效(Write Invalidate):只有一个 CPU 核心负责写入数据,其他的核心对应缓存行失效,需要这个数据的时候,才同步读取到这个写入。

在这里插入图片描述

写广播(Write Broadcast):一个写入请求广播到所有的 CPU 核心,同时更新各个核心里的 Cache。

在这里插入图片描述
在这里插入图片描述

写失效 VS 写广播

  • 写广播在实现上自然很简单,但是写广播需要占用更多的总线带宽

  • 写失效只需要告诉其他的 CPU 核心,哪一个内存地址的缓存失效了,但是写广播还需要把对应的数据传输给其他 CPU 核心。

各种缓存请求

处理器高速缓存发出的请求包括:

  • PrRd:处理器请求读取一个缓存块。
  • PrWr:处理器请求改写一个缓存块。

总线方面的请求:

  • BusRd:当处理器的请求缓存的读操作出现未命中,它会向总线发送一个BusRd请求
  • BusRdX:当处理器请求缓存的写操作出现未命中,它会向总线发送一个BusRdX请求
  • BusUpgr:当处理器请求缓存的写操作命中时,它它会向总线发送一个BusUpgr
  • Flush:该请求表明一个缓存块正在被写回内存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MSI协议和MESI协议

MSI协议

在这里插入图片描述

在这里插入图片描述

MESI 协议

MESI 协议通过引入 E 状态,来减少没有用的总线事务

E独占状态(Exclusive)

缓存行只在当前缓存中,但是干净的(clean) —— 缓存数据同于主存数据。当别的缓存读取它时,状态变为共享;当前写数据时,变为已修改状态。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MESI 属于硬件级别的协议

不管是信号的发送、传输、总线仲裁、缓存行的修改等都属于硬件级别的。所谓的硬件,本质上就是一堆电子电路而已。也就是说一般的话,CPU 高速缓存的一致性是由硬件保证的不同的架构的CPU,提供不同的缓存一致性协议MESI 是属于经典的,常用的缓存一致性协议,其他很多协议都是在 MESI 基础之上的优化。

内存屏障

在这里插入图片描述

写内存屏障 - Store Memory Barrier

屏障之后的写操作必须等待屏障之前的写操作完成才可以执行。

在这里插入图片描述

引入 Store Buffer 的目的:提升 CPU 写操作的性能,导致 Store Buffer高速缓存中的数据不一致,CPU 每次先从 Store Buffer 读数据,没有的话再去高速缓存,可以解决数据不一致问题,但是解决不了 Memory Ordering 引起的问题 (内存访问顺序和程序设置的顺序不一致)。

读内存屏障

CPU 执行的任何的 load 操作都需要等到失效队列中所有标记信息完成对 cacheline 的操作之后才能进行。

在这里插入图片描述

内存屏障总结

  • 写内存屏障:解决 CPU 写操作乱序问题,或者叫存储 (Store) 操作乱序问题

  • 读内存屏障:解决 CPU 读操作乱序问题,或者叫加载(Load) 操作乱序问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

内存屏障 (memory barriar) 指令

  • 写内存屏障:smp_wmb() 汇编指令:sfence (x86 )
  • 读内存屏障:smp_rmb() 汇编指令:lfence (x86 )
  • 读写内存屏障:smp_mb() 汇编指令:mfence (x86 )

屏障之前的读 / 写操作必须在屏障之后的读 / 写操作之前被执行。

在这里插入图片描述

锁内存总线

lock 前缀的底层实现

  • 在多处理器下,为了保证一些操作的原子性,需要在这些操作前加上lock,比如:lock addl ....lock cmpxchglock inc ....

在这里插入图片描述

锁内存总线的缺点:其他处理器不能访问其他的内存地址中的数据了,所以锁内存总线的开销挺大的。

锁缓存行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

  • Memory Ordering 问题:内存访问顺序和程序设置顺序不一致(指令重排序)

  • 写内存屏障:解决 CPU 写操作乱序,或者叫存储(Store)操作乱序问题,屏障之后的写操作必须等屏障之前的写操作完成之后才可以执行

  • 读内存屏障:解决 CPU 读操作乱序,或者叫加载(Load)操作乱序问题,屏障之后的读操作必须等屏障之前的读操作完成之后才可以执行

  • 底层汇编指令前面加 lock 前缀可以起到内存屏障的作用,带有 lock 前缀的指令是原子操作

  • lock 在底层的实现原理是让某个 CPU 核心“锁定”内存总线,从而独占共享内存,但是此时其他 CPU 核心就不能访问内存数据了,所以锁内存总线的开销是很大的

  • MESI 协议是锁缓存行的协议,它从硬件层面保证缓存行的数据一致,无需锁内存总线,锁缓存行比锁内存总线的开销小

http://www.hengruixuexiao.com/news/14410.html

相关文章:

  • 上海市工商网站官网seo专业知识培训
  • 做网站二级域名随便用吗百度热点榜单
  • 融资网站建设方案爱站网关键词挖掘机
  • 什么网站可以做数据调查问卷自学seo大概需要多久
  • 网站建设技术是干嘛的neotv
  • 家庭电脑做网站p站关键词排名
  • 西安做网站程序杭州网站运营十年乐云seo
  • b2b网站建设怎么做万能引流软件
  • 企业服务包括哪些方面搜索引擎排名优化seo课后题
  • 汉字市城乡建设规划局官方网站长沙网站seo方法
  • 淇县住房和城乡建设局网站海南百度推广公司有哪些
  • 网站的建设方案怎么写百度首页入口
  • 网站排名优化服务semir是什么牌子衣服
  • 西安建设工程信息网 人员信息优化问题
  • 大型网站二次开发方案网站维护费用一般多少钱
  • 网站如何做友情链接百度排行榜风云榜小说
  • 餐饮营销型网站案例分析网络销售的工作内容
  • 长沙建设企业网站郑州seo技术代理
  • wordpress apple主题合肥网站优化公司
  • 做自己看视频的网站百度手机管家
  • 淘宝客网站用什么软件做百度推广账户登录
  • 做网站用java还是php哪里注册域名最便宜
  • 什么网站做免单衣服深圳优化seo排名
  • 为什麼建网站要先做数据库今日特大新闻
  • 河北保定网站建设成人短期技能培训学校
  • 网站文章超链接怎么做百度竞价渠道户
  • 网页设计实训报告实训小结韶关网站seo
  • 重庆网站设计制作网站免费注册网址
  • 什么网站做ppt赚钱百度推广的优化软件
  • 找生意做那个网站靠谱汕头网站推广