cpu缓存

缓存的基础概念解读

被刻印的时光 ゝ 提交于 2019-11-29 08:25:25
高速缓存(Cache,简称缓存),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。Cache是位于CPU和DRAM之间,通常由SRAM构成的规模小存取速度快的存储器。 目前,缓存的概念已被扩充,不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘缓存),乃至在硬盘与网络之间也有某种意义上的Cache──称为Internet临时文件夹或网络内容缓存等。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache。 工作原理 1、预读取:当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中,当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速率远远高于磁头读写的速率,所以能够达到明显改善性能的目的。 2、写入:当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。 3、临时存储:某些数据是会经常需要访问的

缓存的基础概念解读

早过忘川 提交于 2019-11-29 08:25:19
高速缓存( Cache,简称缓存),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM 技术。 Cache 是位于 CPU和DRAM之间,通常由SRAM构成的规模小存取速度快的存储器 。 目前,缓存的概念已被扩充,不仅在 CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘缓存),乃至在硬盘与网络之间也有某种意义上的Cache──称为Internet临时文件夹或网络内容缓存等。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache。 工作原理 1、 预读取:当硬盘受到 CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中,当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速率远远高于磁头读写的速率,所以能够达到明显改善性能的目的。 2、 写入:当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个 “数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。 3、临时存储

CPU缓存一致性协议MESI

情到浓时终转凉″ 提交于 2019-11-29 06:33:06
CPU缓存一致性协议MESI CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。 在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。 时间局部性(Temporal Locality) :如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。 比如循环、递归、方法的反复调用等。 空间局部性(Spatial Locality) :如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。 比如顺序执行的代码、连续创建的两个对象、数组等。 带有高速缓存的CPU执行计算的流程 程序以及数据被加载到主内存 指令和数据被加载到CPU的高速缓存 CPU执行指令,把结果写到高速缓存 高速缓存中的数据写回主内存 目前流行的多级缓存结构 由于CPU的运算速度超越了1级缓存的数据I\O能力,CPU厂商又引入了多级的缓存结构。 多级缓存结构 多核CPU多级缓存一致性协议MESI 多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致

FalseSharing

走远了吗. 提交于 2019-11-29 04:13:42
文章目录 FalseSharing CPU缓存架构 CPU缓存行 伪共享 避免伪共享 在两个 long 类型的变量之间再加 7 个 long 类型 重新创建自己的 long 类型,而不是 java 自带的 long 使用 @sun.misc.Contended 注解(java8) 参考链接 FalseSharing CPU缓存架构 CPU 和主内存间有好几级缓存, 直接访问主内存很慢 若对一块数据做相同的运算多次,执行运算时把它加载到离 CPU 很近的地方 如循环计数,不想每次循环都跑到主内存去取这个数据来增长它吧。 L1 很小很快,紧靠着在使用它的 CPU 内核。 L2 大些,慢些,只能被一个单独的核使用。 L3 在现代多核机器中更普遍,更大,更慢,且被单个插槽上的所有CPU核共享。 主存保存着程序运行的所有数据,更大,更慢, 由全部插槽上的所有 CPU 核共享。 CPU运算时,先去L1找,再去L2,然后L3, 最后如果这些缓存中都没有,所需的数据就要去主内存拿。 走得越远,运算耗时就越长。 so 若进行很频繁的运算,要确保数据在 L1 缓存。 CPU缓存行 缓存由缓存行组成,常64字节(旧的处理器缓存行32) 它有效地引用主内存中的一块地址。 一个缓存行中可存 8 个 java的long 程序运行时,缓存每次更新都从主内存中加载连续64 设想有个long型a,是单独的变量

大型网站背后的高性能系统架构设计,互联网架构师JAVA架构师,java架构设计,java大型网站架构设计

℡╲_俬逩灬. 提交于 2019-11-29 02:12:45
大型网站背后的高性能系统架构设计,互联网架构师JAVA架构师,java架构设计,java大型网站架构设计 1. 性能测试 1.1. 性能指标 网站性能测试的主要指标有: 响应时间 - 响应时间(RT)是指从客户端发一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。 并发数 - 系统同时处理的请求、事务数。 吞吐量 - TPS(每秒事务数)、HPS(每秒 HTTP 请求数)、QPS(每秒查询数)。 性能计数器 - 系统负载、对象与线程数、内存使用、CPU 使用、磁盘与网络 IO 等。这些指标也是系统监控的重要参数。 1.2. 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 1.3. 性能测试报告 性能测试报告示例: 1.4. 性能优化策略 性能分析 - 如果请求响应慢,存在性能问题。需要对请求经历的各个环节逐一分析,排查可能出现性能瓶颈的地方,定位问题。检查监控数据,分析影响性能的主要因素:内存、磁盘、网络、CPU,可能是代码或架构设计不合理,又或者是系统资源确实不足。 性能优化 - 性能优化根据网站分层架构,大致可分为前端性能优化、应用服务性能优化、存储服务性能优化。 2. 前端性能优化 2.1. 浏览器访问优化 减少 HTTP 请求 - HTTP 请求需要建立通信链路,进行数据传输

Java并发系列-深入理解volatile

 ̄綄美尐妖づ 提交于 2019-11-28 22:14:24
目录 volatile关键字的语义: 首先我们先验证可见性: 如何解决缓存一致性问题? 验证有序性: > 也可关注本人个人站点关注更多内容: https://jie3615.github.io/ 在并发场景中我们经常会看到volatile的身影,它到底能解决哪些问题 ? volatile关键字的语义: 一旦一个共享变量被其修饰之后: 可见性:一个线程对这个变量的修改对其他线程可见,会立马得到最新值 有序性:被volatile修饰的变量会加入内存屏障 首先我们先验证可见性: 执行如下代码: public static void main(String[] args){ MyData myData = new MyData(); new Thread(()->{ try { sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } myData.addData(); },"线程一").start(); while (myData.i == 0) { } //资源类 class MyData{ int i =0; void addData() { this.i=i+19; } } 结果分析:主线程一直在做死循环,实际上线程一已经对data中的数据做了更改

并发编程-CAS

泄露秘密 提交于 2019-11-28 21:43:09
CAS (compareAndSwap),中文叫比较交换,一种 无锁原子算法 。 过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可以成功完成操作。 CAS是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,其实现方式是基于硬件平台的汇编指令,在intel的CPU中,使用的是cmpxchg指令,就是说 CAS是靠硬件实现的 ,从而在硬件层面提升效率。 当多个线程同时使用CAS 操作一个变量时,只有一个会胜出,并成功更新,其余均会失败。 失败的线程不会挂起 ,仅是被告知失败,并且允许再次尝试,当然也允许实现的线程放弃操作。基于这样的原理,CAS 操作即使没有锁,也可以发现其他线程对当前线程的干扰。 与锁相比,使用CAS会使程序看起来更加复杂一些,但由于其非阻塞的,它对死锁问题天生免疫,并且,线程间的相互影响也非常小。更为重要的是,使用无锁的方式完全没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销,因此,他要比基于锁的方式拥有更优越的性能。 简单的说,CAS 需要你额外给出一个期望值

浅析Java内存模型

走远了吗. 提交于 2019-11-28 19:49:57
本篇文章基本上都是概念性的知识,理解记忆为主: 1、Java内存结构 java文件,首先要经过编程成为class文件,然后通过 类装载器加载到jvm 中去执行。这个jvm(蓝色线框起来的这部分)就是 java运行时数据区 ,意思就是java代码在运行的时候,这些数据要存放在不同的内存空间里面。jvm就是指代这个的。当然了上面的运行时数据区jvm是 jdk1.7 版本的。也就是说不同的jdk版本,这个jvm的构成是不一样的。如下是Java7的内存结构: 我们可以看到一共划分了5个部分,其中java堆区和方法区还是所有线程共享的区域。那么为什么要设置成线程共享的呢?因为假设一个数据,每个线程都保留一份,那其中有一个线程将这个数据更改了。其他的线程发现自己的数据没有变,这就出现了问题了。于是设计成了所有线程共享,java内存模型出来了。 2、JMM Java的内存模型也叫做JMM。但这个模型不是像内存结构一样,是真实存在的。java内存模型是一个抽象出来的概念。意思是把一部分内存区域设计成所有线程共享的,一个线程对数据更改,其他线程就能立刻知道。 Java内存结构和Java内存模型的区别 (1)java内存结构是解决java中的数据如何存放的问题。 (2)java内存模型是解决java中多个线程共享数据的问题。 Java内存模型的来源 阶段一 在计算机发展的第一个阶段

cpu缓存和volatile

孤街醉人 提交于 2019-11-28 18:03:21
目录 CPU缓存的由来 CPU缓存的概念 CPU缓存的意义 缓存一致性协议-MESI协议 Store Buffers Store Forwarding Memory Barriers Invalidate Queues 读内存屏障 vs 写内存屏障 x86 架构下的实现 volatile与原子性 参考资料: CPU缓存的由来 我们知道CPU的处理能力要远比内存强,主内存执行一次内存读、写操作的时间可能足够处理器执行上百条的指令。为了弥补处理器与内存处理能力之间的鸿沟,在内存和处理器之间引入了高速缓存(Cache)。高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每个处理器都有其高速缓存。如下图所示 CPU的读(load)实质上就是从缓存中读取数据到寄存器(register)里,在多级缓存的架构中,如果缓存中找不到数据(cache miss),就会层层读取二级缓存三级缓存,一旦所有的缓存里都找不到对应的数据,就要去内存里寻址了。寻址到的数据首先放到寄存器里,其副本会驻留到CPU的缓存中。 CPU的写(store)也是针对缓存作写入。并不会直接和内存打交道,而是通过某种机制实现数据从缓存到内存的写回(write back)。 CPU缓存的概念 CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多

关于缓存的几点问题

百般思念 提交于 2019-11-28 16:38:08
一、什么是缓存 1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问 2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache 二、缓存的分类 1、基于web应用的系 2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存 操作系统磁盘缓存->减少磁盘机械操作 数据库缓存->减少文件系统I/O 应用程序缓存->减少对数据库的查询 Web服务器缓存->减少应用服务器请求 客户端浏览器缓存->减少对网站的访问 三、操作系统缓存 1、文件系统提供的Disk Cache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理 2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从Disk Cache当中读取文件内容,加速了文件读取速度 3、Disk Cache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当Disk Cache,加速文件读取速度 4、特殊的应用程序对文件系统Disk Cache有很高的要求,会绕开文件系统Disk Cache,直接访问磁盘分区,自己实现Disk 5、Cache策略 Oracle的raw device(裸设备) – 直接抛弃文件系统 MySQL的InnoDB: innodb_flush