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类,该 ...
随机推荐
- jenkins自动化pipline的ci/cd流水线
pipeline { agent any tools { //工具必须预先在jenkins中预配置 maven 'mvn' jdk 'jdk' } stages { stage('Env') { st ...
- python网络爬虫-python基础(三)
python安装 Anaconda的python科学计算环境,只需要想普通软件一样安装就可以把python的环境变量.解释器.开发环境都安装到计算机中 除此之外anaconda还提供众多的科学计算的包 ...
- java秒杀系列(1)- 秒杀方案总体思路
前言 首先,要明确一点,高并发场景下系统的瓶颈出现在哪里,其实主要就是数据库,那么就要想办法为数据库做层层防护,减轻数据库的压力. 一.简单图示 我用一个比较简单直观的图来表达大概的处理思路 二.生产 ...
- 检测当前编译器支持c++版本
if (__cplusplus > 201703L) std::cout << "C++2a\n"; else if (__cplusplus == 201703 ...
- vector概述
vector是一个能够支持任何类型的容器,本身为一个可以动态增长的数组. 1.vector基本数据结构 STL中所有的容器都包括三部分: 迭代器,遍历容器的元素,控制容器空间的边界和元素移动. 构造函 ...
- 入门 - k8s伸缩应用程序 (六)
目标 使用 kubectl 伸缩应用程序. Scaling(伸缩)应用程序 在之前的文章中,我们创建了一个 Deployment,然后通过 服务 提供访问 Pod 的方式.我们发布的 Deployme ...
- 对战平台虚拟War3局域网的原理对战平台虚拟War3局域网的原理
转载请注明来源:https://www.cnblogs.com/hookjc/ 以War3为例,启动魔兽后,首先是如何看见主机的问题:魔兽是通过TCP/UDP协议进行数据发送的,那如何实现看到对方?我 ...
- CSS 3D的魅力
用户1093975发表于Web项目聚集地订阅 151 在这篇文章中: 前言: demo1 demo2 结语: 本文介绍了CSS来实现3D效果,并且有详细代码和解释.建议大家只字不差的阅读.本文的作者是 ...
- Nginx+Tomcat 实现负载均衡 ,动静分离集群部署
Nginx + Tomcat 实现负载均衡,动静分离集群部署 1.Nginx实现负载均衡原理 2.Nginx配置反向代理主要参数 3.实验 1.Nginx实现负载均衡原理: Nginx服务器作为前端, ...
- 简述redis特点及其应用场景
1. Redis八大特点 1.1. 速度快 说到Redis的速度快,大家的第一反应一定是内存读取,那是肯定的,但如果面试的时候仅仅说到这点,那还是远远不够的,至少还有以下三点要补充: Redis是用C ...