CACHE的一些名词术语

CACHE的一些名词术语
CACHE的一些名词术语

CACHE的一些名词术语

Allocation

在CACHE中发现一个位置,并把新的cache数据存到这个位置的过程。这个处理过程可能包括evicting(驱逐)cache中已存在的数据,从而为新的数据腾出空间。

Associativity

指每个Set(集)里包含的line frames(行帧)数。也就是cache的way(路)数。

Capacity miss容量失效

因为cache的容量限制,导致不能包括一个程序的整个working set(工作集),从而造成cache失效。这是三个cache失效原因(容量、强制、冲突)之一。Clean干净

一个有效的cache行,它的内容没有被更高层内存或CPU修改写过,我们称这个cache行是“干净”的,显然相反状态是dirty(“脏”)

Coherence一致性

如果读内存任意地址的数据返回的总是这个地址的数据最近的更新,我们说内存系统是一致的。存取指CPU和EDMA等的存取。

Compulsory miss强制失效

有时称为首次引用失效。强制失效是一种肯定发生的一种失效,因为数据事先从没有使用过也就没有机会被cache。但有些情况也被称为强制失效,尽管它们不是第一被引用的数据,比如对非写定位的cache进行同一位置的重复写,以及对一个不被cache内存区域的存取。这是三个cache失效原因(容量、强制、冲突)之一。

Conflict miss 冲突失效

由于Associativity的限制导致的而非容量限制造成的cache失效。

Direct-mapped cache直接映射cache

直接映射cache映射低层内存的每个地址到cache的一个单一位置。这样低层内存的多个地址可能被映射到cache中的同一位置上。它相当于1-way

set-associative cache。

Dirty脏

对writeback回写cache,写到达多级存储结构的某一层,并更新这一层内容,但并不更新更低层的内存,这样,当一个cache行有效并包含更新后的数据,但却不更新下一更低层的内存,我们说这个cache是“脏”的,显然一个有效行的相反状态是“干净”。

DMA直接内存存取

直接内存存取,通常一个DMA操作copy一个内存块从一个区域到另一个区域,或在外设和内存之间传输数据。对C64x DSP,DMA传输使用EDAM,这些DMA传输与程序执行是并行的。从cache一致性角度,EDMA的存取可以看成是另外一个并行处理器。

Eviction驱逐

从cache移出一个line从而为新的数据腾出空间的过程我们成为Eviction。Eviction可以由用户发出的writeback-invalidate产生,被驱逐的line我们称为victim line。当victim line是dirty(“脏”)的时候,数据必须回写道下一级存储器中以维持内存的一致性。

Execute packet执行包

在一个周期里并行执行的一个指令块,一个执行包可以包含1-8个指令。Fetch packet取指包

1个周期里存取的包含8条指令的指令块。显然一个取指包可以包含多个执行包,这样可能消耗多个周期。

First-reference miss首次引用失效

是强制失效的一种形式。见强制失效。

Fully-associative cache全关联cache

任何内存地址都可以被存储在cache的任何位置。这样的cache非常灵活,但通常硬件上不可实现。这种cache同直接映射cache和集关联cache形成鲜明对比,这两种cache在定位策略方面都有更多的限制,全关联cache只具有概念上的意义,当分析直接映射cache和集相关cache性能时对区分冲突失效和容量失效是有用的,全关联cache等价于这样一个集关联cache:它有line frame个way,仅有一个set。

Higher-level memory高层内存

在多级内存系统中,距离CPU较近的内存称为高层内存。在C64x系统中,最高层内存通常是L1层CACHE,这一层的内存直接同CPU相连。较高层内存通常充当较低层内存的CACHE。

Hit命中

当请求的内存地址的数据在cache中,我们说cache命中。命中的反义词是miss(失效)。Cache的命中使cpu的阻塞时间最短,因为才cache中去数据要比从原始位置取更快。在某一层内存的“失效”可能在较低层“命中”。Invalidate无效

将一个有效的行标记为无效行的过程。这相当于废弃了这一行的内容,但并不回写任何更新的数据。当与writeback组合时,会先将dirty数据更新到保存有这个地址的下一层内存。这通常用于维持内存的一致性。

Least Recently Used(LRU)allocation

对于set-associative和fully-associative cache,最近最少使用原则被用来一个set里选择一个line frame作为被驱逐的line,用来保存新的cache数据。

Line行

是cache处理的最小单位块。显然一个cache行的尺寸要比CPU或高层内存存取的数据尺寸要大。例如尽管CPU可以进行单字节的存取,但如果发生一次读失效,则cache会将整个cache行的数据读入。

Line frame行帧

Cache的一个位置,包含被cache的数据(一行)、一个关联的tag地址,这个行的状态信息。状态信息包括这一行是否valid(有效)、dirty(脏)、LRU 状态

Line size行尺寸

一个行的尺寸,单位字节。

Load through

当CPU请求在第一级和第二级cache中都失效时,数据从外部内存获得,同时会存储在第一级和第二级内存中,如果一个cache,它保存数据并同时把数据送到高一层cache中,这种cache我们称之为load-through cache。相对于那种首先存储数据到低层然后第二步再把数据送到高层的cache,这种cache可以减少阻塞时间。

Long-distance access长距离存取

CPU对不被cache内存区域数据的存取。显然,由于这种存取,不会影响cache 的状态,但速度会比较慢。

Lower-level memory 低层内存

在多级内存系统中,距离CPU较远的内存称为低层内存。在C64x系统中,最低层内存包括L2以下的外部系统内存和内存映射的外设。

LRU

表示cache line的最近最少使用的状态信息。

Memory ordering内存访问排序

定义在内存里以什么样的顺序看内存操作的结果,有时称为consistency(连贯性)。在分级结构的特定层的强内存访问排序表示在这一层上不可能以不同与程序序的顺序来观察内存存取的结果。松散内存访问排序允许内存分级体系结构以不同的顺序看内存操作的结果,注意强排序并不要求系统内存以程序序顺序操作,而仅仅是使操作的结果在其它请求者看来是与程序序一致的。

Miss失效

当请求的内存地址的数据不在cache中,就是说发生了cache失效。一个cache 失效,会引起阻塞请求者直到line frame被定位,数据从低层内存中获得为止。在某些情况下,比如CPU对L1D出现写失效,阻塞CPU是不必要的。Cache失效通常分为三种类型:强制失效、冲突失效和容量失效。

Miss pipelining

服务单一的cache失效的过程需要多个流水周期。如果对连续的失效处理进行流水线操作,显然就增加对失效处理的效率,降低了阻塞周期。

Read allocate

读失效cache是仅在发生读失效时才在cache中定位空间并把数据读入。写失效发生时不会产生数据读入到cache中,而是直接把写数据送到下一层cache 中。

Set集

Line frames的一个集合。直接映射的cache一个set包含一个line frame,

N-way set-associative cache每个set包含N个line frame。Full-associative cache 仅有一个set,这个唯一的set包含所有的line frames。

Set-associative cache集相关cache

一个set-associative cache包含多个line frames用于cache低层内存。当为一个新的line数据定位一个空间时,选择哪个line frame是基于cache的定位策略的。C64x是基于LRU策略的。

Snoop侦测

是lower-level memory(低层内存)查询higher-level memory(高层内存)以确定高层内存是否包含给定地址的数据的一种方法。Snoop的主要目的是通过允许低层内存请求高层内存进行数据更新来维持内存的一致性,snoop操作可以触发writeback(回写),或更普通的writeback-invalidate(回写并无效),触发writeback-invalidate(回写并无效)操作的snoop有时又称为snoop-invalidates。Tag标签

地址高位作为一个Tag存储在line中,在决定cache是否命中的时候,cache 控制器会查询Tag。

Thrash

当存取操作引起cache性能遭受严重损坏,我们说thrash cache了。Thrash 的原因可以有很多:一个可能是算法在短时间存取太多的数据而很少或根本不重复使用。也就是说working set太大。这样的算法将引起非常严重的容量失效。另一种情况是算法重复存取一小组不同地址的数据,这些数据映射到cache的相同set,这样就人为造成严的冲突失效。

Touch

对一个给定地址的存储器操作,我们称之为touch那个地址。Touch也可以指读数组元素或存储器地址的其它范围,定位它们在一个特定层cache的唯一目的。一个CPU中心环用作touch一个范围的内存是为了定位它到cache经常被引用作为一个touch环。Touching一个数组是软件控制预取数据的一种形式。Valid有效

当一个cache line保存从下一级内存取的数据,那么这个line frame就是有效的。无效状态发生在line frame不保存任何数据,或者说还没有被cache的数据,或先前cache的数据由于某种原因(内存一直性要求、程序要求等)被无效。有效的状态并不表示数据是否已经被修改(其实这有另外的状态来表示,即dirty 或clean)。

Victim

从cache移出一个line从而为新的数据腾出空间的过程我们成为Eviction。Eviction可以由用户发出的writeback-invalidate产生,被驱逐的line我们称为victim。当victim line是dirty(“脏”)的时候,数据必须回写到下一级存储器中以维持内存的一致性。

Victim Buffer

保存victim直到它们背回写的特殊buffer。Victim lines被移到victim buffer,这样位新的数据腾出空间。

Victim Writeback

当victim line是dirty(“脏”)的时候,数据必须回写道下一级存储器中以维持内存的一致性。我们称这个过程为Victim Writeback

Way

对set-associative cache,每个set包含多个line frames。每个set包含的line frames数被称为way。以set做为行,line frame作为列,那么一列的line frames 集合称为一个way。例如,一个4-way set-associative cache有4个way,每个set 有4个关联的line frames,结果,对于一个可cache的内存地址,在cache中有4个可能的映射位置。

Working Set

程序或算法就是数据和指令代码的集合。在一个特定时间内被引用的这个集合我们称为working set(工作集)。通常,对于一个算法,我们需要考虑高层内存的工作集,对于整个程序我们需要考虑底层内存的工作集。

Write allocate

对于一个write allocate cache,如果发生写失效,就会定位一个空间并将失效的数据读入到cache中。空间定位按照LRU原则。一旦数据被读入到cache中,

就进行写操作,对write allocate cache,仅更新当前层的内存,写的数据并不立刻送到下一层更低的内存。

Writeback回写

将一个有效的但为脏的cache line回写到较低层内存的过程。回写后的这个cache line我们称之为clean(“干净”)。回写后的cache line状态依然为有效。Writeback cache回写cache

回写cache仅修改它自己的写命中的数据,它不会立刻更新下一级较低层内存的内容。数据在将来某时被回写,如:当这个cache line被驱逐时,或当低层内存向高层内存snoop这个地址时,当然也可以直接通过程序发送writeback命令。一个写命中,会引起对应的line被标记为dirty(“脏”),也就是说数据被更新了,但还没来得及更新低层内存。

Writeback-invalidate回写后使无效

将一个有效的但为脏的cache line回写到较低层内存并置这些cache line为无效状态的过程。对C64x,对一组cache line进行Writeback-invalidate时,仅回写那些有效且为脏的cache lines,但却置那一组中的所有cache lines为无效。Write merging

Write merging是组合多个独立的写操作成一个、位宽更大的写操作。显然这可以改善了内存系统的性能。例如,对C64x CPU,L1D写缓冲在某些情况下(如果它们是对同一个双字地址的写)能合并多个写。

Write-through cache

对于一个write-through cache,能把所有的写直接旁路到较低层内存。Cache 中永远不包含更新的数据,这样做的结果是cache line永远不会是dirty。C64x的cache并不使用这种cache。

分析影响cache命中率的因素

分析影响cache命中率的因素 摘要: 存储器是计算机的核心部件之一。由于CPU和主存在速度上的存在着巨大差异,现代计算机都在CPU和主存之间设置一个高速、小容量的缓冲存储器cache。而它完全是是由硬件实现,所以它不但对应用程序员透明,而且对系统程序员也是透明的。Cache对于提高整个计算机系统的性能有着重要的意义,几乎是一个不可缺少的部件。 关键字:cache容量;失效率;块大小;相联度;替换策略。 一、概述 存储器是计算机的核心部件之一。其性能直接关系到整个计算机系统性能的高低。如何以合理的价格,设计容量和速度都满足计算机系统要求的存储器系统,始终是计算机系统结构设计的中关键的问题之一。 计算机软件设计者和计算机用户对于存储器容量的需求是没有止境的,他们希望容量越大越好,而且要求速度快、价格低。仅用单一的存储器是很难达到这一需求目标的。较好的方法是采用存储层次,用多种存储器构成存储器的层次结构。 其中“cache-主存”和“主存-辅存”层次是常见的两种层次结构,几乎所有现代的计算机都同时具有这两种层次。我们都知道,程序在执行前,需先调入主存。在这里主要讨论的是“cache-主存”层次。 “cache-主存”是在为了弥补主存速度的不足,这个层次的工作一般来说,完全是由硬件实现,所以它不但对应用程序员透明,而且对系统程序员也是透明的。 如前所述,为了弥补CPU和主存在速度上的巨大差异,现代计算机都在CPU和主存之间设置一个高速、小容量的缓冲存储器cache。Cache对于提高整个计算机系统的性能有着重要的意义,几乎是一个不可缺少的部件。 Cache是按块进行管理的。Cache和主存均被分割成大小相同的块。信息以块为单位调入cache。相应的,CPU的访存地址被分割成两部分:块地址和块内位移。

linux内核之内存管理

Linux内核之内存管理 作者:harvey wang 邮箱:harvey.perfect@https://www.360docs.net/doc/1e11975261.html, 新浪博客地址:https://www.360docs.net/doc/1e11975261.html,/harveyperfect,有关于减肥和学习英语相关的博文,欢迎交流 把linux内存管理分为下面四个层面 (一)硬件辅助的虚实地址转换 (二)内核管理的内存相关 (三)单个进程的内存管理 (四)malloc软件 (一)处理器硬件辅助的虚实地址转换(以x86为例) 在x86中虚实地址转换分为段式转换和页转换。段转换过程是由逻辑地址(或称为虚拟地址)转换为线性地址;页转换过程则是将线性地址转换为物理地址。段转换示意图如下 X86支持两种段,gdt和ldt(全局描述段表和局部描述符段表),在linux中只使用了4个全局描述符表,内核空间和用户空间分别两个gdt,分别对应各自的代码段和数据段。也可以认为在linux中变相地disable了x86的段式转换功能。 页转换示意图如下

在linux中x86 的cr3寄存器(页表基地址寄存器)保存在进程的上下文中,在进程切换时会保存或回复该寄存器的内容,这样每个进程都有自己的转换页表,从而保证了每个进程有自己的虚拟空间。 (二)内核管理的内存相关 从几个概念展开内存管理:node、zone、buddy、slab 1、Node SGI Altix3000系统的两个结点 如上图,NUMA系统的结点通常是由一组CPU(如,SGI Altix 3000是2个Itanium2 CPU)和本地内存组成。由于每个结点都有自己的本地内存,因此全系统的内存在物理上是分布的,每个结点访问本地内存和访问其它结点的远地内存的延迟是不同的,为了优化对NUMA 系统的支持,引进了Node 来将NUMA 物理内存进行划分为不同的Node。而操作系统也必须能感知硬件的拓扑结构,优化系统的访存。

性能测试报告-模板

Xxx系统性能测试报告 拟制:****日期:****审核:日期: 批准:日期:

1.概述 1.1.编写目的 本次测试报告为xxx系统的性能测试总结报告,目的在于总结性能测试工作,并分析测试结果,描述系统是否符合xxx系统的性能需求。 预期参考人员包括用户、测试人员、开发人员、项目管理者、质量管理人员和需要阅读本报告的高层经理。 1.2.项目背景 腾讯公司为员工提供一个网上查询班车的入口,分析出哪些路线/站点比较紧张或宽松,以进行一些合理调配。 1.3.测试目标 (简要列出进行本次压力测试的主要目标)完善班车管理系统,满足腾讯内部员工的班车查询需求,满足500个用户并发访问本系统。 1.4.名词解释 测试时间:一轮测试从开始到结束所使用的时间 并发线程数:测试时同时访问被测系统的线程数。注意,由于测试过程中,每个线程都是以尽可能快的速度发请求,与实际用户的使用有极大差别,所以,此数据不等同于实际使用时的并发用户数。 每次时间间隔:测试线程发出一个请求,并得到被测系统的响应后,间隔多少时间发出下一次请求。 平均响应时间:测试线程向被测系统发请求,所有请求的响应时间的平均值。 处理能力:在某一特定环境下,系统处理请求的速度。 cache影响系数:测试数据未必如实际使用时分散,cache在测试过程中会比实际使用时发挥更大作用,从而使测试出的最高处理能力偏高,考虑到这个因素而引入的系数。 用户习惯操作频率:根据用户使用习惯估算出来的,单个用户在一段时间内,使用此类功能的次数。通常以一天内某段固定的高峰使用时间来统计,如果一天内没有哪段时间是固定的高峰使用时间,则以一天的工作时间来统计。

高档计算机系统中Cache性能分析_潘继强 (1)

数据库与信息管理本栏目责任编辑:代影Computer Knowledge and Technology 电脑知识与技术第7卷第22期(2011年8月)高档计算机系统中Cache 性能分析 潘继强 (陕西理工学院计算机科学与技术系,陕西汉中723000) 摘要:现代计算机体系结构中广泛采用Cache 来缓解处理器运行和存储器访问的速度增长之间的巨大差距,使得Cache 已经成为影响处理器性能、功耗、价值的重要因素之一。文章根据Cache 基本工作原理和引入Cache 后计算机系统的性能分析,介绍了一些改进Cache 性能的方法。 关键词:高速缓存;命中率;局部性原理;静态随机存储器 中图分类号:TP302文献标识码:A 文章编号:1009-3044(2011)22-5285-02 随着计算机技术的不断发展和进步,CPU(中央处理器)主频的不断提高对计算机系统性能的提升起到了极大的作用,但是作为一个完整的计算机系统,计算机系统性能的提高并不是仅取决于CPU 的主频,还与其他因素密切相关,例如,计算机系统结构、数据在各部件间的传送速度、存储部件的存取速度等,其中CPU 和主存之间的存取速度与计算机系统性能的提高有很大关系。可是主存速度的提高始终跟不上CPU 的发展,据统计,CPU 的速度平均每年改进60%,而组成主存的动态RAM(随机存储器)速度平均每年只改进7%,结果是CPU 和主存之间的速度间隙平均每年大增50%。处理器运行和存储器访问的速度增长之间存在的差距越来越大,这种现象己经成为影响计算机系统性能最主要的瓶颈之一。假设一台计算机的CPU 工作速度很快,而配备的主存访问速度相对较慢,这样就会造成CPU 在访存时等待,降低了处理器的工作速度,进而影响计算机的整体性能。 解决CPU 与主存的速度差距问题在于保持CPU 的能力,提高主存的速度。使用硬件技术提高存储芯片的存取速度是一个有效的手段,可是在慢速的主存和快速CPU 之间插入一个容量较小的高速存储器起缓冲作用(即Cache 技术)也是解决问题的一个行之有效的方法,使得速度和成本之间的矛盾得到较合理的解决。自从1985年Intel80386问世以来,在后续的微处理器中都采用了Cache 。1Cache 的工作原理 在现代计算机系统中,高速缓存Cache 已经逐渐成为计算机不可缺少的一部分。在计算机系统中设置Cache 是为了解决高速处理器和低速主存之间速度不匹配的问题,从而可以提高整机的性能。因此要分析Cache 对计算机性能的影响,必须要了解其工作原理。 Cache 的工作原理是基于程序和数据访问的局部性。任何程序或数据要为CPU 所使用,必须先放到主存中。CPU 只与主存交换数据,所以主存的速度在很大程度上决定了系统的运行速度。对大量典型程序运行情况的分析结果表明,程序运行期间,在一个较短的时间间隔内,由程序产生的内存访问地址往往集中在主存很小范围的地址空间内。这一点不难理解。指令地址本来就是连续分布的,再加上循环程序段和子程序段要多次重复执行。因此,对这些地址中的内容的访问就自然具有时间上集中分布的倾向。数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及内存变量的安排都使存储器地址相对集中。这种在单位时间内对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。 由此可以想到,如果把在一段时间内、一定地址范围内被频繁访问的信息集合成批地从主存中读到一个能高速存取的小容量存储器中存放起来,供程序在这段时间内随时使用,从而减少或不再去访问速度较慢的主存,就可以加快程序的运行速度。这就是Cache 的设计思想,在主存和CPU 之间设置一个小容量的高速存储器就是高速缓存Cache(其结构如图1所示),通常由SRAM(静态随机存储器)构成。它的存取速度比构成主存的动态RAM 要快的多,故CPU 在需要访问主存中的程序和数据时,就不必多次直接访问速度较慢的主存,而是从高速缓存中以更快的速度得到必要的程序和数据,从而可以缓解CPU 和主存速度不匹配的矛盾,进而提高计算机系统的性能。但是SRAM 的价格比较昂贵,若干设置大容量的高速缓存,就会增加计算机的成本,故Cache 的容量一般相对主存来说都比较小。 在Cache 系统中,将主存和Cache 都分成若干同样大小的块,每块内又包含若干个 字,主存总是以块为单位映射到Cache 中。根据程序访问的局部性原理,在程序运行期 间系统不断地将与当前访问块相关联的后继存储单元块从主存读入到Cache ,其实质 就是把主存中的程序和数据分块复制到Cache 中,然后再和CPU 进行高速传送。当 CPU 需要访问主存时就会在地址总线上发出访存地址,首先通过主存—Cache 地址变 换机构判定访存地址所对应的存储单元块是否已在Cache 中。如果在Cache 中(称为 Cache 命中),则经地址变换机构将主存地址变换成Cache 地址去访问Cache 。如果不在 Cache 中(称为Cache 不命中),此时就要把要访问的字直接从主存送往CPU ,同时把包括该字的主存块调入Cache 供CPU 使用。当然Cache 的容量是有限的,如果此刻Cache 处于未被装满的状态,则可将新的主存块直接调入Cache 。倘若Cache 原来已被装满,即已无法将新的主存块调入Cache 时,就得采用替换策略,从Cache 中换出一个旧块,并将新块替换进Cache 。 收稿日期:2011-05-28 作者简介:潘继强(1978-),男,陕西汉中人,讲师,研究方向为计算机基础理论教学。 图1缓存—主存层次结构图E-mail:jslt@https://www.360docs.net/doc/1e11975261.html, https://www.360docs.net/doc/1e11975261.html, Tel:+86-551-56909635690964ISSN 1009-3044 Computer Knowledge and Technology 电脑知识与技术Vol.7,No.22,August 2011.5285

Cache的工作原理

前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关。 若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力。 如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥出来? 如何减少CPU与内存之间的速度差异?有4种办法: 一种是在基本总线周期中插入等待,但这样会浪费CPU的能力。 另一种方法是采用存取时间较快的SRAM作存储器,这样虽然解决了CPU与存储器间速度不匹配的问题,但却大幅提升了系统成本。 第3种方法是在慢速的DRAM和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用;使CPU既可以以较快速度存取SRAM中的数据,又不使系统成本上升过高,这就是Cache法。 还有一种方法,采用新型存储器。 目前,一般采用第3种方法。它是PC系统在不大增加成本的前提下,使性能提升的一个非常有效的技术。 本文简介了Cache的概念、原理、结构设计以及在PC及CPU中的实现。 Cache的工作原理 Cache的工作原理是基于程序访问的局部性。 对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来

就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。 数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。 根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。 系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。 CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。即CPU在任一时刻从Cache中可靠获取数据的几率。 命中率越高,正确获取数据的可靠性就越大。一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。 只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache 的命中率还是相当高的。 一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存。在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从内存获取。获取的同时,也把它拷进Cache,以备下次访问。

cache性能分析实验报告

计算机系统结构实验报告 名称: Cache性能分析学院:信息工程 姓名:陈明 学号:S121055 专业:计算机系统结构年级:研一

实验目的 1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解; 2.了解Cache的容量、相联度、块大小对Cache性能的影响; 3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处; 4.理解Cache失效的产生原因以及Cache的三种失效; 5.理解LRU与随机法的基本思想,及它们对Cache性能的影响; 实验平台 Vmware 虚拟机,redhat 9.0 linux 操作系统,SimpleScalar模拟器 实验步骤 1.运行SimpleScalar模拟器; 2.在基本配置情况下运行程序(请指明所选的测试程序),统计Cache总失效 次数、三种不同种类的失效次数; 3.改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的测试程序), 统计各种失效的次数,并分析Cache容量对Cache性能的影响; 4.改变Cache的相联度(1路,2路,4路,8路,64路),运行程序(指明所 选的测试程序),统计各种失效的次数,并分析相联度对Cache性能的影响; 5.改变Cache块大小(*2,*4,*8,*64),运行程序(指明所选的测试程 序),统计各种失效的次数,并分析Cache块大小对Cache性能的影响; 6.分别采用LRU与随机法,在不同的Cache容量、不同的相联度下,运行程序 (指明所选的测试程序)统计Cache总失效次数,计算失效率。分析不同的替换算法对Cache性能的影响。 预备知识 1. SimpleScalar模拟器的相关知识。详见相关的文档。 2. 复习和掌握教材中相应的内容 (1)可以从三个方面改进Cache的性能:降低失效率、减少失效开销、减少Cache命中时间。 (2)按照产生失效的原因不同,可以把Cache失效分为三类: ①强制性失效(Compulsory miss)

CACHE的一些名词术语

CACHE的一些名词术语 Allocation 在CACHE中发现一个位置,并把新的cache数据存到这个位置的过程。这个处理过程可能包括evicting(驱逐)cache中已存在的数据,从而为新的数据腾出空间。 Associativity 指每个Set(集)里包含的line frames(行帧)数。也就是cache的way(路)数。 Capacity miss容量失效 因为cache的容量限制,导致不能包括一个程序的整个working set(工作集),从而造成cache失效。这是三个cache失效原因(容量、强制、冲突)之一。Clean干净 一个有效的cache行,它的内容没有被更高层内存或CPU修改写过,我们称这个cache行是“干净”的,显然相反状态是dirty(“脏”) Coherence一致性 如果读内存任意地址的数据返回的总是这个地址的数据最近的更新,我们说内存系统是一致的。存取指CPU和EDMA等的存取。 Compulsory miss强制失效 有时称为首次引用失效。强制失效是一种肯定发生的一种失效,因为数据事先从没有使用过也就没有机会被cache。但有些情况也被称为强制失效,尽管它们不是第一被引用的数据,比如对非写定位的cache进行同一位置的重复写,以及对一个不被cache内存区域的存取。这是三个cache失效原因(容量、强制、冲突)之一。 Conflict miss 冲突失效 由于Associativity的限制导致的而非容量限制造成的cache失效。 Direct-mapped cache直接映射cache 直接映射cache映射低层内存的每个地址到cache的一个单一位置。这样低层内存的多个地址可能被映射到cache中的同一位置上。它相当于1-way set-associative cache。 Dirty脏 对writeback回写cache,写到达多级存储结构的某一层,并更新这一层内容,但并不更新更低层的内存,这样,当一个cache行有效并包含更新后的数据,但却不更新下一更低层的内存,我们说这个cache是“脏”的,显然一个有效行的相反状态是“干净”。 DMA直接内存存取

体系结构试验报告(cache存储过程)

体系结构实验报告 实验目的 通过程序,模拟cache存储过程,并通过控制变量法模拟分析Cache性能实验步骤: 我们要通过老师所给程序进行模拟,并通过操作系统试验中老师所给算法生成出project.txt ,并通过project.txt 里面的数据来模拟程序的局部性等特性。 实验结果 1、比较关联方式,控制blockSize, CacheSize 不变: (1)、Direct_mapped (2) 、Set_associate:

(3) 、Fully_associate 通过上述三个比较可以看出,各种映射有自己的优点。 但是不难看出,增大关联度会减小miss rate,但是增加到一定程度又会有抑制作用。 2.比较Cache大小对于性能的影响。 (1)、Direct_mapped,Cache容量为64 时:

(2r Direcflmapped 〉Cache 朿* R 128 手 (3r Direcflmapped 〉Cache 助* R 256 口 F 一pwsef 峑 s 2O J I 0 \^J.e e K ^g 63-L w g

cache性能分析报告

《计算机系统结构课内实验》 实验报告

一、实验目的及要求 1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理 解; 2.了解Cache的容量、相联度、块大小对Cache性能的影响; 3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能 提高的好处; 4.理解Cache失效的产生原因以及Cache的三种失效; 5.理解LRU与随机法的基本思想,及它们对Cache性能的影响; 二、实验环境 Vmware 虚拟机,redhat 9.0 linux 操作系统,SimpleScalar模拟器 三、实验内容 1.运行SimpleScalar模拟器; 2.在基本配置情况下运行程序(请指明所选的测试程序),统计 Cache总失效次数、三种不同种类的失效次数; 3.改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的 测试程序),统计各种失效的次数,并分析Cache容量对Cach e性能的影响; 4.改变Cache的相联度(1路,2路,4路,8路,64路),运行 程序(指明所选的测试程序),统计各种失效的次数,并分析相联度对Cache性能的影响; 5.改变Cache块大小(*2,*4,*8,*64),运行程序(指明所选 的测试程序),统计各种失效的次数,并分析Cache块大小对Cache性能的影响;

6.分别采用LRU与随机法,在不同的Cache容量、不同的相联度 下,运行程序(指明所选的测试程序)统计Cache总失效次数,计算失效率。分析不同的替换算法对Cache性能的影响。 四、实验步骤 1、关于simplescalar的简要说明 SimpleScalar包括多个仿真器:sim-fast ,sim-safe,sim-cache,sim-cheetah,sim-pro和sim-outorder。 本次实验使用的是sim-cache,下面说明一下sim-cache。sim-cache:在这个仿真中加入了cache,用户可以对cache及TLB 进行设置,支持两级的cache和一级的TLB,第一级cache和TLB 均分为数据和指令两部分。(摘自百度百科) 下面简要说明一下有关cache的信息: 一般来说,Cache的结构参数主要包括以下几个方面:容量、块大小、相联度、替换算法等。在SimpleScalar模拟器中,采用了两级Cache结构,同时数据和指令Cache分开。SimpleScalar的Cache参数配置命令为::::: :Cache的名称,其中: dl1:一级数据Cache; dl2:二级数据Cache; il1:一级指令Cache; il2:二级指令Cache;

系统性能评估

第7章 1.工程工作站:具有实现工程计算、程序编制和调试、作图、通信、资源共享的计算机环 境。 2.早期CAD环境:“大型机(超级小型机)+多路终端 3.工作站从应用对象、范围和功能需求上都不同于普通PC机 4.工作站与PC在配置上的一般区别:1. 图形处理能力:专业图形卡2. 可靠性: 采用多种 可靠性措施3. 性能: 采用高性能器件4. 扩展能力: 内存、多处理器等5. 软件配置: 操作系统、高性能图形处理软件等。 5.系统性能评价技术:从技术上, 主要有分析、模拟、测量三种技术 6.常采用的分析技术有:常采用排队论、随机过程、均值分析等方法进行近似求解,比如 流水线性能、多处理器系统性能分析、软件可靠性静态评估等。 7.分析技术的特点:特点是理论严密, 对基础理论的掌握要求较高。优点是节约人力/物 力, 可应用于设计中的系统。 8.模拟技术的特点:既可以应用于设计中或实际应用中的系统, 也可以与分析技术相结 合, 构成一个混合系统。 9.测量技术的特点: 10.模拟技术是基于试验数据的系统建模, 主要有: (1) 按系统的运行特性建立系统模型; (2) 按系统工作负载情况建立工作负载模型; (3) 编写模拟程序, 模拟被评价系统的运 行。 11.测量技术:该技术是对已投入使用的系统进行测量, 通常采用不同层次的基准测试程序 评估。不同层次指的是:核心程序、实际应用程序、合成测试程序 12.几乎所有基于模拟的评价方法都依赖于测试数据或实验值 13.总结:分为三种性能评价技术,分别是分析、模拟、测量,这三种技术分别对用不同成 熟度的系统。分析技术对应理论研究,特点是理论严密,基础知识掌握度高。模拟技术是对正在设计以及已经用于实际应用的系统进行建模,建模数据来源是实验数据。而测量技术的应用是对已经投入使用的系统进行测量。通常采用不同层次的基准测试程序,不同层次值的是:核心程序、实际应用程序、合成测试程序。 14.系统性能评价对象:内存、I?O、网络、操作系统、编译器的性能。 15.与程序执行的时间相关的两大因素:(1) 时钟频率(MHz);(2) 执行程序使用的总时钟周期 数。 16.CPU时间= 总时钟周期数?时钟周期= 总时钟周期数/ 时钟频率 17.IC(程序执行的指令数)和CPI(每条指令所需时钟数 18.CPU时间= CPI?IC ?时钟周期= CPI?IC /时钟频率 19.(1) 时钟频率: 反映计算机实现、工艺和组织技术; 20.(2) CPI: 反映计算机实现、指令集结构和组织; 21.(3) IC: 反映计算机指令集结构和编译技术。 22.系统性能评价标准:(1) 时钟频率(主频): 用于同类处理机之间(2) 指令执行速度法 (MIPS —定点运算) (3) 等效指令速度:吉普森(Gibson)法4)数据处理速率PDR(processing data rate)法(5) 基准程序测试法 23.MIPS指标的主要缺点是不能反映以下情况: ①不能反映不同指令对速度的影响②不能 反映指令使用频率差异的影响③不能反映程序量对程序执行速度的影响 24.吉普森(Gibson)法的主要缺点:(1) 同类指令在不同的应用中被使用的频率不同;(2) 程序 量和数据量对Cache 影响; (3) 流水线结构中指令执行顺序对速度的影响;(4) 编译程序对系统性能的影响。

如何提高CPU Cache性能 By E课网

CPU CacheII -William Gu 在本期的文章里,作者从Cache性能出发,帮助大家进一步了解CPU Cache这一设计实现。 通常比较合适用来评价Cache性能的参数指标为平均访问时间,其定义如下: 平均访问时间=命中时间+缺失率x缺失代价 由以上公式,可以从三个方面进行改进: ?降低缺失率 ?减小缺失代价 ?减小命中时间 1.1 三种类型的缺失(3C) 强制缺失(Compulsory miss):当第一次访问一个块时,该块不在cache中,需要从下一级存储器中调入Cache ?优化方法:增加块大小,预取 容量缺失(Capacity miss):程序运行时所需的块不能全部调入Cache中,当某些块被替换后,若被重新访问就会发生容量缺失 ?优化方法:增加缓存容量 冲突缺失(Conflict miss):在组相联或直接映射的Cache中,若太多的块映射到同一组中,则会出现该组中某个块被别的块所代替(即使别的组或块有空闲位置),然

后又被重新访问。 ?优化方法:提高相联度(理想情况:全相联) 1.2 基本的Cache优化方法: ?降低缺失率——较大的块,较大的缓存,较高的关联度 ?降低缺失代价——多级缓存,为读取操作设设定高于写入操作的优先级 ?缩短在缓存中命中的时间——在索引缓存时避免地址转换 1.2.1 增加块的大小以降低缺失率 当Cache的容量一定时,块的大小对命中率的影响非常大。下图表示随着Cache块由小到大的变化,命中率H上升和下降的规律。 命中率随着块大小的变化曲线 1.2.2 提高相联度 相联度越高,Cache的空间利用率就越高,块冲突概率就越低,因而Cache的缺失率就会降低。但是提高相联度可能会增加命中时间。

Cache 管理

1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与Windows、UNIX 一起占据了操作系统领域几乎所有的市场份额。特别是在高性能计算领域,Linux 已经成为一个占主导地位的操作系统,在2005年6月全球TOP500 计算机中,有301 台部署的是Linux 操作系统。因此,研究和使用Linux 已经成为开发者的不可回避的问题了。 下面我们介绍一下Linux 内核中文件Cache 管理的机制。本文以 2.6 系列内核为基准,主要讲述工作原理、数据结构和算法,不涉及具体代码。 2 操作系统和文件Cache 管理 操作系统是计算机上最重要的系统软件,它负责管理各种物理资源,并向应用程序提供各种抽象接口以便其使用这些物理资源。从应用程序的角度看,操作系统提供了一个统一的虚拟机,在该虚拟机中没有各种机器的具体细节,只有进程、文件、地址空间以及进程间通信等逻辑概念。这种抽象虚拟机使得应用程序的开发变得相对容易:开发者只需与虚拟机中的各种逻辑对象交互,而不需要了解各种机器的具体细节。此外,这些抽象的逻辑对象使得操作系统能够很容易隔离并保护各个应用程序。 对于存储设备上的数据,操作系统向应用程序提供的逻辑概念就是"文件"。应用程序要存储或访问数据时,只需读或者写"文件"的一维地址空间即可,而这个地址空间与存储设备上存储块之间的对应关系则由操作系统维护。 在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。文件Cache 管理指的就是对这些由操作系统分配,并用来存储文件数据的内存的管理。Cache 管理的优劣通过两个指标衡量:一是Cache 命中率,Cache 命中时数据可以直接从内存中获取,不再需要访问低速外设,因而可以显著提高性能;二是有效Cache 的比率,有效Cache 是指真正会被访问到的Cache 项,如果有效Cache 的比率偏低,则相当部分磁盘带宽会被浪费到读取无用Cache 上,而且无用Cache 会间接导致系统内存紧张,最后可能会严重影响性能。 下面分别介绍文件Cache 管理在Linux 操作系统中的地位和作用、Linux 中文件Cache 相关的数据结构、Linux 中文件Cache 的预读和替换、Linux 中文件Cache 相关API 及其实现。 2 文件Cache 的地位和作用 文件Cache 是文件数据在内存中的副本,因此文件Cache 管理与内存管理系统和文件系统都相关:一方面文件Cache 作为物理内存的一部分,需要参与物理内存的分配回收过程,另一方面文件Cache 中的数据来源于存储设备上的文件,需要通过文件系统与存储设备进行读写交互。从操作系统的角度考虑,文件Cache 可以看做是内存管理系统与文件系统之间的联系纽带。因此,文件Cache 管理是操作系统的一个重要组成部分,它的性能直接影响着文件系统和内存管理系统的性能。 图1描述了Linux 操作系统中文件Cache 管理与内存管理以及文件系统的关系示意图。从图中可以看到,在Linux 中,具体文件系统,如ext2/ext3、jfs、ntfs 等,负责在文件Cache 和存储设备之间交换数据,位于具体文件系统之上的虚拟文件系统VFS负责在应用程序和文件Cache 之间通过read/write 等接口交换数据,而内存管理系统负责文件Cache 的分配和回收,同时虚拟内存管理系统(VMM)则允许应用程序和文件Cache 之间通过memory

计算机组成原理cache课程报告

计算机组成原理课程报告 学号: 班级: 姓名:

Cache的发展历程及应用 在计算机组成原理课学过Cache之后我才发现原来我对Cache了解的如此之少,以前在买电脑时经常看到一级缓存、二级缓存和三级缓存,然而当时并不懂这是什么东西,现在学过Cache之后才知道了缓存在电脑中的地位。原来Cache 在提高计算机速度方面有如此大的作用。那么就让我们来了解一下Cache的发展历程。 经过我查资料得知,Cache一词来源于法语,其原意是“藏匿处,隐秘的地方”,而自从被应用于计算机科学之后,就已经成为了英语中的一个计算机体系结构专有名词。Sun Microsystems的前首席科学家Billy Joy,作为BSD unix,csh,vi,NFS,java,TCP/IP等的发明者,他曾经说过,在计算机科学领域,如果没有了cache的发明,其他的一切发明都将失去意义。而正是他,将给予分页的虚拟内存系统引入了Unix,影响了之后所有的新操作系统开发。Cache的出现正是为了解决CPU日益增长的核心时钟频率以及系统主内存日益落后的速度之间的矛盾①。这就是Cache解决的主要问题。那么,这个问题是怎样显现出来以及Cache 是如何出现的呢? 纵观PC系统和CPU二十年的发展,随着半导体加工工艺水平的不断提高,集成电路技术的不断进步,导致生产成本不断降低,CPU的功能不断增强,运算速度越来越快,CPU和存储器的性能都有了很大的提高。CPU频率的提高,必然要求系统中存储器的存取速度要提高,还要求其容量要增大。主存储器DRAM容量的提高还是比较快的,但是DRAM读取时间的提高却很慢。从而在速度上与CPU主频的提高产生了极不相配的情况,这样会影响整个系统的性能。二十年来,CPU设计的问题之一就是解决高速CPU和低速DRAM之间的平衡或匹配问题,以求系统性能的整体提高。在它们之间加入高速缓冲存储器Cache,就是这个问题的解决方案之一。 Cache随CPU的发展而不断改变,可以概括为:从无到有,由小到大,先外后内,纵深配备,软硬兼施。初期的CPU没有Cache,在80386时期出现外部Cache;80486时期开始有内部仅8kB的Cache。Cache的分级也由L1和L2级,发展到L0和L3级的纵深配备;Cache的大小由当初的8kB,直到Merced的1~

缓存框架所要解决的基本问题

缓存框架所要解决的基本问题

Cache 框架,顾名思义即数据的暂存场所和管理。那么该系统的两个核心功能就开始上演了,即存放数据的一个容器和管理缓存容器。就像数据库服务器软件一样,他有一个和新的数据存放场所,同时还有一个管理数据的管理系统。在这个管理系统中就出现了一系列的事务处理,比如说添加,删除,更新以及刷新,删除不成功时如何操作等等。那么该缓存框架需要完成的基本任务就是如何来实例化这么一个数据存储的仓库以及如何有效的来管理仓库中的这些数据,除了上述的这些操作外,还有当仓库中的数据当容量值是再次放入一个缓存实体时该如何有效的淘汰已存在的缓存实体以及该缓存仓库中的数据是否持久有效还是分区管理等等。那么又该如何实例化这么一个缓存仓库呢?首先要考虑的第一问题就是采用何种数据结构来高效的存储这些数据? 1、如何来管理缓存中的对象?----OScache中是通过AbstractConcurrentReadCache和Cache强强联手来管理的 2、如何来管理内存容量的问题? 3、给缓存中添加一个新的缓存实体时,需要注意哪些问题? 当向缓存中添加一个实体时,应该完成哪些必要的业务逻辑呢?我们可以把缓存看做是一个组件,添加一个新的实体是促发该组件的一个事件,该组件能够对该事件进行捕捉并能够进行相应的处理。 4、如何有效的来淘汰缓冲池中对象? 5、如何来管理缓存实体的刷新问题? 实体的更新状态信息具体分应该分为以下几种:分别是还没更新、处于更新状态中、更新完成、更新取消。其中用一个变量来保存当前的更新状态,也即跟踪每一个缓存缓存对象当前处于一种什么状态。同时用什么来表明一个缓存实体过期的标识呢?这里有两种方案:其一就是线程拥有的数量,当线程拥有的数量变为0时,就从缓存容器中释放。其二就是设置一个TTL 发呆的最大

TCP的发送系列 — 发送缓存的管理(一)

TCP的发送系列—发送缓存的管理(一) 数据结构 TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理, 另一个层面是整个TCP层的内存管理。 单个socket的发送缓存所涉及的变量。 [java] struct sock { ... /* 预分配缓存大小,是已经分配但尚未使用的部分 */ int sk_forward_alloc; ... /* 提交给IP层的发送数据大小(累加skb->truesize) */ atomic_t sk_wmem_alloc; ... int sk_sndbuf; /* 发送缓冲区大小的上限 */ struct sk_buff_head sk_write_queue; /* 发送队列 */ ... /* 发送队列的总大小,包含发送队列中skb负荷大小, * 以及sk_buff、sk_shared_info结构体、协议头的额外开销。 */

int sk_wmem_queued; ... }; 整个TCP层的内存相关变量。 [java] struct proto tcp_prot = { .name = "TCP", .owner = THIS_MODULE, ... /* 设置TCP的内存压力标志,把tcp_memory_pressure置为1 */ .enter_memory_pressure = tcp_enter_memory_pressure, /* 检查sock是否有剩余的发送缓存(sk_wmem_queued < sk_sndbuf)。 * 值得注意的是,用户可以使用TCP_NOTSENT_LOWAT选项来避免占用过多的发送缓存。 */ .stream_memory_free = tcp_stream_memory_free, ... /* TCP目前已经分配的内存 */ .memory_allocated = &tcp_memory_allocated, /* TCP内存压力标志,超过tcp_mem[1]后设置,低于tcp_mem[0]后清除 */ .memory_pressure = &tcp_memory_pressure, /* TCP内存使用的最小值、压力值、最大值,单位为页 */

Cache性能分析

Cache 性能分析 一、性能分析 1.不同容量下Cache 命中率: 设置:选择不同的cache 容量,2k ,4k ,8k ,16k ,32k ,64k ,128k ,256k 块大小:16k 相联度:直接相连 替换策略:LRU 预取策略:不预取 写策略:写回 写不命中的调快策略:按写分配 文件:cc1.din 表1 不同容量下Cache 命中率 图1 结论:在其他条件一定的情况下,随着cache 容量的增加,不命中率逐渐减小 2.相联度对不命中率的影响: 设置:Cache 容量:64K/256KB 块大小;16B 相联度设置:1,2,4, 8,16,32 替换策LRU 预取策略:不预取 写策略:写回 写不命中的调快策略:按写分配 文件:cc1.din Cache 容量为64KB 时: 表2 当容量为64K 时的不命中率 相联度 1 2 4 8 16 32 不命中率(%) 2.71 1.80 1.61 1.55 1.54 1.54 Cache 容量为256KB 时: 表3 当容量为256K 时的不命中率 相联度 1 2 4 8 16 32 不命中率(%) 1.58 1.34 1.28 1.26 1.24 1.24 结论: Cache 的容量(KB ) 2 4 8 16 32 64 128 256 不命中率(%) 18.61 14.09 10.12 6.34 3.81 2.71 1.95 1.58

图2 结论:(1)当Cache容量一定时,随着相联度的不断增加,不命中率逐渐减小,但是当相联度增加到一定程度时,不命中率保持不变。 (2)当关联度相同时,Cache容量越大,不命中率越小,当关联度增加到一定程度时,不命中率和Cache容量大小无关。 3.Cache块大小对命中率的影响: 设置:Cahce块大小(B):16,32,64,128,256 Cache容量设置(KB):2,8,32,128,512 相联度:直接相联预取策略:不预取写策略:写回写不命中的调快策略:按写分配文件:eg.din 表4 不同Cache行大小情况下Cache的不命中率 块大小(B) Cache的容量(KB) 2 8 32 128 512 16 7.80% 7.40% 7.20% 7.20% 7.20% 32 5.40% 5.00% 4.70% 4.70% 4.70% 64 4.00% 3.40% 3.10% 3.10% 3.10% 128 4.40% 3.30% 2.40% 2.40% 2.40% 256 6.50% 5.10% 2.30% 1.90% 1.90% 图3 结论:(1)在Cache容量一定时,Cache 不命中率随着Cache行的增加先减小后增加。 (2)在Cache行一定的情况下,Cache不命中率随着Cache容量的增加不断减小。

Linux内核的页缓存概述

Linux内核的页缓存概述 页缓存是Linux内核一种重要的磁盘高速缓存,它通过软件机制实现。但页缓存和硬件cache的原理基本相同,将容量大而低速设备中的部分数据存放到容量小而快速的设备中,这样速度快的设备将作为低速设备的缓存,当访问低速设备中的数据时,可以直接从缓存中获取数据而不需再访问低速设备,从而节省了整体的访问时间。 页缓存以页为大小进行数据缓存,它将磁盘中最常用和最重要的数据存放到部分物理内存中,使得系统访问块设备时可以直接从主存中获取块设备数据,而不需从磁盘中获取数据。 在大多数情况下,内核在读写磁盘时都会使用页缓存。内核在读文件时,首先在已有的页缓存中查找所读取的数据是否已经存在。如果该页缓存不存在,则一个新的页将被添加到高速缓存中,然后用从磁盘读取的数据填充它。如果当前物理内存足够空闲,那么该页将长期保留在高速缓存中,使得其他进程再使用该页中的数据时不再访问磁盘。写操作与读操作时类似,直接在页缓存中修改数据,但是页缓存中修改的数据(该页此时被称为Dirty Page)并不是马上就被写入磁盘,而是延迟几秒钟,以防止进程对该页缓存中的数据再次修改。 页缓存的设计需求 页缓存至少需要满足以下两种需求。首先,它必须可以快速定位含有给定数据的特定页。其次,由于页高速缓存中的数据来源不同,比如普通文件、块设备等,内核必须根据不同的数据来源来选择对页缓存的适当操作。

内核通过抽象出address_space数据结构来满足上述两种设计需求。address_space结构 address_space 结构是页高速缓存机制中的核心数据结构,该结构并不是对某一个页高速缓存进行描述,而是以页高速缓存的所有者(owner)为单位,对其所拥有的缓存进行抽象描述。页高速缓存中每个页包含的数据肯定属于某个文件,该文件对应的inode对象就称为页高速缓存的所有者。 页缓存与文件系统和内存管理都有联系。每个inode结构中都嵌套一个address_space结构,即inode字段中的i_data;同时inode中还有i_maping 字段指向所嵌套address_spaces结构。而address_space结构通过host字段反指向页高速缓存的所有者。页缓存的本质就是一个物理页框,因此每个页描述符中通过mmaping和index两个字段与高速缓存进行关联。mmaping指向页缓存所有者中的address_space对象。index表示以页大小为单位的偏移量,该偏移量表示页框内数据在磁盘文件中的偏移量。 address_space 结构中的i_mmap字段指向一个radix优先搜索树。该树将一个文件所有者中的所有页缓存组织在一起,这样可以快速搜索到指定的页缓存。内核中关于radix树有一套标准的使用方法,它不与特定的数据联系(与内核双联表类似),这样使得使用范围更加灵活。具体操作如下: radix_tree_lookup():在radix树中对指定节点进行查找; radix_tree_insert():在radix树中插入新节点;

相关文档
最新文档