Write Combining Buffer
现代CPU使用了很多技术来降低对内存存取数据的延时,因为CPU执行的速度实在是太快了,在从内存存取数据的约120ns中,可以执行数百条指令。
其中多级的缓存架构就是为了减少这种延时,来提高CPU的利用率。
在SMP系统使消息传递协议来保证缓存的一致性。但是CPU运行实在是太快了,人类总是很贪婪,想尽各种办法榨取CPU的性能,因此在缓存体系统,还存在的其它一些不怎么被人熟悉的Buffer。
这其中有Write back buffer, Line fill buffer, 而本文要介绍的是Write combining Buffer, 至于另外两个Buffer,来日方长,待我想明白怎么表白了再来写。
CPU缓存是高效的非链式Hash Map, 每一块通常是64个字节,常称为缓存行。缓存行是与内存操作的基本单元。内存中某一地址的内容,通过Hash 映射到缓存中的某一个缓存行。
当CPU需要操作内存中的一块数据,而这块数据又不在缓存中,而缓存中相应位置存储的其它内存块的内容则需要被释放。长江后浪推前浪,老数据还是要为新数据让道。
当CPU执行一个Store操作时,它将会把数据写到离CPU最近的L1的数据缓存,如果这个时候发生Write miss, 则CPU将会去L2缓存。这个时候,Write Combining Buffer就来了,为了减少Write Miss带来的性能开销,Intel和其它很多型号的CPU都引入了Write Combining 技术。Write Combining Buffer不是编程时内存里的Buffer,而是CPU里面真实的存储单元,是硬件。
当发生L1 Write Miss时,WC 可以把多个对同一缓存行Store操作的数据放在WC中,在程序对相应缓存行(或者理解为这些数据)读之前先合并,等到需要读取时再一次性写入来减少写的次数和总线的压力。此时,CPU可以在把数据放入WC后继续执行指令,减少了很多时钟周期的浪费。不同的CPU, WC的数量可能是不一样的。Intel的CPU中,其实只有4个WC可以真正被我们同时使用。
这几个Buffer 非常有意思的是要求后续的写操作都要对同一缓存行进行写操作,这样后续的写操作才可以被放到一起提交到L2 缓存。WC中的每个字节有64位来表示其状态,以供后续需要写到缓存时知道哪些字节是需要传送到L2的。
Write Combining Buffer的更多相关文章
- PatentTips - Write Combining Buffer for Sequentially Addressed Partial Line Operations
SUMMARY OF THE INVENTION The present invention pertains to a write combining buffer for use in a mic ...
- PatentTips - Optimizing Write Combining Performance
BACKGROUND OF THE INVENTION The use of a cache memory with a processor facilitates the reduction of ...
- Intel x86_64 Architecture Background 3
多层次的cache结构解决了CPU和DRAM之间处理速度不一致的问题,在Intel体系架构下,CPU核心和主存DRAM之间有着三层的cache.其中一层缓存L1和二层缓存L2在CPU核心(core)中 ...
- Java程序员需要了解的底层知识(一)
硬件基础知识 - Java相关硬件 汇编语言的执行过程(时钟发生器 寄存器 程序计数器) 计算机启动过程 进程线程纤程的基本概念面试高频 - 纤程的实现 内存管理 进程管理与线程管理(进程与线程 ...
- 【Java虚拟机5】Java内存模型(硬件层面的并发优化基础知识--指令乱序问题)
前言 其实之前大家都了解过volatile,它的第一个作用是保证内存可见,第二个作用是禁止指令重排序.今天系统学习下为什么CPU会指令重排. 存储器的层次结构图 1.CPU乱序执行指令的根源 CPU读 ...
- Translation Lookaside Buffer
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In principle, then, e ...
- Speculative store buffer
A speculative store buffer is speculatively updated in response to speculative store memory operatio ...
- Combining an audio file with video file in python
Combining an audio file with video file in python - Stack Overflow https://stackoverflow.com/questio ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
随机推荐
- Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从
1. kubernetes介绍 1.1 kubernetes简介 kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理.目的是实现资源管理的自动 ...
- Linux之shell入门
一.编写规范 代码规范: #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器] shell相关指令 文件命名规范: 文件名.sh .sh是linux下bash shell 的默 ...
- Android的基本资源引用(字符串、颜色、尺寸、数组)【转】
感谢大佬:https://blog.csdn.net/wenge1477/article/details/81295763 Android的基本资源引用(字符串.颜色.尺寸.数组)[转] 一.Andr ...
- mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法
详细讲mac 连接mac的git操作 首先在服务端上 第一:新建一个仓库 1, cd /Users/userName/projects 用linux命令进入一个你想要创建与他人共享的文件夹. 2,su ...
- 描述nginx中worker_processes、worker_cpu_affinity、worker_rlimit_nofile、worker_connections配置项的含义
worker_processes worker进程的数量,应小于等于cpu核心数,auto为当前主机cpu核心数 work_processes 4 worker_cpu_affinity 配置CPU亲 ...
- Linux中使用systemctl操作服务、新建自定义服务
Linux有12种Unit,对于个人来讲,用的最多的是Service Unit,下面的Unit均指Service Unit(服务单元) # 启动Unit systemctl start appname ...
- PyCharm编程软件详细安装教程
PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...
- 2、Golang基础--包的使用、if-else语句、循环、switch语句、数组、切片、可变函数参数、map类型
1 包的使用 // 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理 // 定义包 -新建一个文件夹 -内部有很多go文件 -在每个go文件的第一行,都要声明包名,并且包名必须一致 -在一 ...
- HMS Core积极探索基于硬件耳返的功能,帮助唱吧整体唱歌延迟率降低60%
唱吧的使命是让唱歌更简单.让生活更美好,其布局的K歌业务专注于让曲库更全.音质更好,开创了同框合唱.弹唱等有意思的游戏类K歌玩法.为了让用户拥有更加沉浸的娱乐体验,唱吧与HMS Core积极探索基于硬 ...
- 【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船
春节期间我们更换了 kubernetes 生产集群,旧集群的 kubernetes 版本是 1.17.0,新集群版本是 1.23.3,新集群上部署了 dapr,最近准备将更多独立部署的服务器部署到 k ...