文档库 最新最全的文档下载
当前位置:文档库 › ARM处理器CACHE详解

ARM处理器CACHE详解

ARM处理器CACHE详解
ARM处理器CACHE详解

ARM920T的MMU与Cache

目录

虚拟地址和物理地址的概念

虚拟内存管理

ARM920T的CP15协处理器

MMU

Cache

操作MMU和Cache的内核启动代码

参考资料索引

虚拟地址和物理地址的概念

CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU (Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。

图 1. 物理地址示意图

如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。

图 2. 虚拟地址示意图

MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU 通常一页为4K。例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。

虚拟内存管理

现代操作系统充分利用MMU提供的VA到PA的映射机制来做内存管理,以下称为虚拟内存管理(Virtual Memory Management)。首先看下面的例子:

例 1. 进程的地址空间

这是bash进程的虚拟地址空间,32位CPU的虚拟地址空间是4GB,也就是

0x0000 0000-0xffff ffff,该进程占用的地址范围近似为0x0000 0000-0xbfff ffff,地址范围0xc000 0000-0xffff ffff由内核占用,用户进程不允许访问。在这个bash进程的地址空间中,从0x0804 8000开始的668K的权限为r-x--,

表示代码段,从0x080e f000开始的24K的权限是rw---,表示数据段,从0x080f 5000开始的2056K的权限也是rw---,但是没有对应任何磁盘文件,而是用[ anon ](anonymous,匿名)来表示,这是堆所占的空间,从0xb7c6 d000开始是共享库和资源文件的映射空间,每个共享库也分为代码段和数据段,用不同的权限表示,可以看到,从堆空间到下面的共享库映射空间之间有很大的地址空洞,最末从0xbfad 4000开始的84K是栈空间。

为什么需要虚拟内存管理呢?可以从以下几个方面来理解。

第一,让每个进程有独立的地址空间是引入虚拟内存管理的最主要目的。所谓独立的地址空间是指,不同进程中的同一个VA被MMU映射到不同的PA,并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据,这样使得任何一个进程由于程序BUG或恶意代码所导致的非法内存访问都不会意外改写其它进程的数据,不会影响其它进程的运行,从而保证了整个系统的稳定性。另一方面,每个进程都认为自己独占4GB的地址空间,编写程序会比较方便,不必为每个进程分配一个地址范围,而是每个进程都可以使用一个完整的地址空间中的任何地址。

我们继续用上面的例子来理解,再打开一个shell窗口,用pmap命令看一下这个新的bash进程的地址空间,可以发现和刚才的地址空间布局差不多:

该进程也占用了0x0000 0000-0xbfff ffff的地址空间,代码段也是从0x0804 8000开始的668K,数据段也是从0x080e f000开始的24K,共享库的内存布局也差不多。这个进程和刚才的例子是同一个系统中同时运行着的两个进程,它们都认为自己占有0x0000 0000-0xbfff ffff的地址空间,并且它们的数据段的地址范围是重合的,但是两个进程各自干各自的事情,显然数据段中的数据是不同的,正是因为不同进程中的同一个VA被映射到了不同的PA,所以两个进程的数据段其实是在不同的物理地址上,如下图所示。

图 4. 进程地址空间是独立的

从图中还可以看到,两个进程都是bash进程,代码段是一样的,并且代码段是只读的,不会被改写,因此操作系统会安排两个进程的代码段共享相同的物理内存。由于每个进程都有自己的一套VA到PA的映射表,整个地址空间中的任何VA都在每个进程自己的映射表中查找相应的物理地址,因此不可能访问到其它进程的地址,也就没有可能意外改写其它进程的数据。

第二,引入VA到PA的映射也会给分配和释放内存带来方便,物理上不连续的空间可以映射为逻辑上连续的虚拟地址空间。比如要malloc一块很大的内存空间,而物理内存虽然有足够的空闲内存,却没有足够大的连续空闲内存,这时就可以分配多个不连续的物理页面,而映射为连续的虚拟地址范围。如下图所示。

图 5. 不连续的PA可以映射为连续的VA

第三,一个系统如果同时运行着很多进程,为各进程分配的内存之和可能会大于实际可用的物理内存,虚拟内存管理使得这种情况下各进程仍然能够正常运行。因为各进程分配的只不过是虚拟内存的页,这个页的内容可以映射到物理内存的页框,也可以临时保存到磁盘上而不占用物理内存的页框,磁盘上这一部分称为交换设备(Swap Device),可能是一个磁盘分区,也可能是一个磁盘文件。当物理内存不够时将物理内存中不常用的页框临时保存到磁盘上,而当用到这些页框时再从磁盘加载回内存,这称为换页(Paging)因此:

系统中可分配的内存总量 = 物理内存的大小 + 交换设备的大小

如下图所示。第一张图是换出(Page out),将物理页面的内容保存到磁盘,并解除地址映射,释放物理页面。第二张图是换入(Page in),从空闲的物理页面中分配一个,将磁盘暂存的页面加载回内存,并建立地址映射。

图 6. 换页

第四,虚拟内存管理可以控制物理页面的访问权限。物理内存本身是不限制访问的,任何地址都可以读写,而操作系统要求实现各种不同的访问权限,在先前的例子中我们已经看到,代码段要求是rx的,数据段要求是rw的,用户进程不能访问属于内核的地址空间,这些都是操作系统和MMU配合实现的。

MMU中还实现了一种访问限制是关于Cache的。Cache(高速缓存)是CPU 内的一小块高速RAM,用来缓存最近访问过的内存数据,CPU访问Cache的速度是访问内存速度的数十倍,所以有效地利用Cache可以大大提高计算机的整体性能。CPU核要访问数据时首先发出VA,Cache利用VA查找相应的数据有没有被缓存[2],如果有就通知CPU核,如果是读操作就直接将Cache中的数据传给CPU 核中的寄存器,如果是写操作就直接改写Cache中的数据,而不需要访问物理内存。但是,有些VA所对应的PA并不是物理内存中的地址而是设备寄存器的地址,对这些寄存器进行读写并不是为了保存数据,而是对设备做特殊操作,这种VA 通常是不允许缓存的,因为如果缓存了,对VA的读写将只在Cache中起作用,而不会传到设备寄存器对设备进行操作。以串口的收发寄存器为例,如果收发寄存器地址被缓存了会出现什么问题呢?如下图所示。

如果发送寄存器的地址被缓存起来,CPU核往发送寄存器的地址做写操作都写到Cache中去了,发送寄存器并没有及时得到数据,也就不能及时发送,此外,CPU核先后发出的1、2、3三个数据都会写到Cache中的同一个地址,最后Cache 中只保存了第3个数据,如果这时Cache的数据写回到发送寄存器去,只能把第3个数据发送出去,前两个数据就丢失了。与此类似,如果接收寄存器的地址被缓存起来,CPU核在读第1个数据时,Cache会从接收寄存器读进来缓存,然而接收寄存器后面收到2、3两个数据Cache并不知道,因为Cache把接收寄存器当作内存,并且相信内存中的数据是不会自己变的,所以以后每次CPU核读接收寄存器时,Cache都提供给CPU核第1个数据。

ARM920T的CP15协处理器

ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,本节首先从总体上介绍MMU、Cache和CPU核是如何协同工作的,后面两节分别讲解MMU和Cache的细节。三星公司的S3C2410是一种很常见的采用ARM920T的芯片,涉及到具体的芯片时我们以S3C2410为例。

以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]),和CPU核的r0到r15寄存器一样,协处理器寄存器也是用0到15来编号,在指令中用4个bit来表示寄存器编号,有些协处理器寄存器有影子寄存器,这种情况下对同一个编号的寄存器使用不同的选项读或者写实际上访问的是不同的寄存器,后文用到某个寄存器时会详细说明它的功能。

表 1. CP15协处理器的寄存器列表

对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。下图是协处理器的指令格式(摘自[S3C2410用户手册])。

图 8. 协处理器指令格式

和其它ARM指令一样,Cond是条件码,bit 20是L位,表示该指令是读还是写,如果L=1就表示Load,从外面读到CPU核中,也就是mrc指令,如果L=0就表示Store,也就是mcr指令。[11:8]这四个位是协处理器编号,CP15的编号是15,因此是4个1。CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4个位。对于CP15协处理器,规定opcode1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。

虽然这里介绍了协处理器的寄存器编号和相关指令,但读者只需了解对协处理器是这样进行操作的就可以了,我们的重点是讲解MMU和Cache的基本概念,具体各种操作的指令该怎么写可以参考[S3C2410用户手册]。

MMU是如何把VA映射成PA的呢?从图 4 “进程地址空间是独立的”来看,好像是有一张VA转PA的表,给一个VA查表就可以查到PA,实际上并不是这么简单,通常要有一个多级的查表过程,对于ARM体系结构是两级查表,对于一些64位体系结构则需要更多级。看下面的图示。

图 9. Translation Table Walk

首先将32位的VA[3]分成三段,前两段[31:20]和[19:12]作为两次查表的索引,第三段[11:0]作为页内的偏移。查表的步骤如下:

1 CP15协处理器的TTB寄存器(看看表 1 “CP15协处理器的寄存器列表”中这是第几个寄存器?C2)中保存着第一级页表(Translation Table)的基地址,这个基地址指的是PA,也就是说页表是直接按这个地址存在物理内存中的。

2 以TTB中的内容为基地址,以VA[31:20]为索引在表中查出一项(想一下这个表中一共有多少项?4096项),这个表项中保存着第二级页表(Coarse Page Table)的基地址,同样是物理地址,也就是说第二级页表也是直接按这个地址存在物理内存中的。

3 以VA[19:12]为索引在第二级页表中查出一项(想一下这个表中一共有多少项?256项),这个表项中就保存着物理页面的基地址,先前我们说虚拟内存管理是以页为单位的,一个虚拟内存的页映射到一个物理内存的页框,从这里就可以得到印证,因为查表是以页为单位来查的。

4 有了物理页面的基地址之后,加上VA[11:0]这个偏移量就可以取出相应地址上的数据(想一下一个页是多少字节?4K)。

这个过程称为Translation Table Walk,Walk这个词用得非常形象。从TTB 走到一级页表,又走到二级页表,又走到物理页面,一次寻址其实是三次访问物理内存。注意这个“走”的过程完全是硬件做的,每次CPU寻址时MMU就自动完成以上四步,不需要编写指令指示MMU去做,前提是操作系统要维护页表项的正确性,每次分配内存时填写相应的页表项,每次释放内存时清除相应的页表项,在必要的时候分配或释放整个页表。

有了以上基本概念,我们来看CPU访问内存时的硬件操作顺序(摘自[ARM 参考手册])。

图 10. CPU访问内存时的硬件操作顺序

我们以CPU读内存为例解释一下图中的步骤,各步骤在图中有对应的标号。

1 CPU核(图中的“ARM”框)发出VA请求读数据,TLB(Translation Lookaside Buffer)接收到该地址。TLB是MMU中的一块高速缓存(也是一种Cache),它缓存最近查找过的VA对应的页表项,如果TLB里缓存了当前VA的

页表项就不必做Translation Table Walk了,否则去物理内存中读出页表项保存在TLB中,TLB缓存可以减少访问物理内存的次数。

2 页表项中不仅保存着物理页面的基地址,还保存着权限位和是否允许Cache的标志。MMU首先检查权限位,如果没有访问权限,就引发一个异常给CPU 核。然后检查是否允许Cache,如果允许Cache就启用Cache和CPU核互操作,图中的“C, B bits”可以理解为直写和回写线,后面再详细解释这两个位的作用。

3 如果不允许Cache,则直接发出PA从物理内存中读取数据到CPU核。

4 如果允许Cache,则以VA为索引到Cache中查找是否缓存了要读取的数据,如果Cache中已经缓存了该数据(称为Cache Hit)则直接返回给CPU核,如果Cache中没有缓存该数据(称为Cache Miss),则发出PA从物理内存中读取数据并缓存到Cache中,同时返回给CPU核。然而Cache并不是只取CPU核所要的数据,而是把相邻的数据都取上来缓存,这称为一个Cache Line。ARM920T 的Cache Line是32字节,例如CPU核要读取地址0x134-0x137的4字节数据,Cache会把地址0x120-0x13f(对齐到32字节地址边界)的32字节都取上来缓存。

MMU

我们已经简单了解了一下查页表的过程,实际上ARM920T支持多种尺寸规格的页表,图 9

“Translation Table Walk”所示的只是其中一种情况。下图示意了所有可能的情况(本节的图表均摘自[S3C2410用户手册])。

图 11. 查页表的过程

回顾一下查表的过程,首先从CP15的TTB寄存器找到一级页表的基地址,再把VA[31:20](共4096项)作为索引从表中找出一项,这个表项称为一级页描述符(Level 1 Descriptor),一个这样的表项占4个字节,可以是以下四种格式之一:

图 12. 一级页描述符

如果描述符的最低两位是00,属于Fault格式,表示该范围的VA没有映射到PA。如果描述符的最低两位是10,属于Section格式,这种格式没有二级页表而是直接映射到物理页面,一个Section是1M的大页面,描述符中[31:20]位就是这个页面的基地址,基地址的[19:0]低位全为0,对齐到1M地址边界,描述符中的Domain和AP位控制访问权限,C、B两位控制缓存,后面再详细解释每个位的含义。如果描述符的最低两位是01或11,则分别对应两种不同规格的二级页表(VA[19:12则为256项])。根据地址对齐的规律想一下,这两种页表分别是多大?从一级描述符中取出二级页表的基地址,再把VA的一部分作为索引去查二级描述符(Level 2 Descriptor)(如果是Coarse Page Table则VA[19:12]是索引,如果是Fine Page Table则VA[19:10]是索引),二级描述符可以是以下四种格式之一:

图 13. 二级页描述符

描述符最低两位是00属于Fault格式,其它三种情况分别对应三种不同规格的物理页面。Large Page和Small Page有四组AP权限位,每组两个bit,这样可以为每1/4个物理页面分别设置不同的权限,也就是说,Large Page可以为每16K设置不同的权限,Small Page可以为每1K设置不同的权限。

ARM920T提供了多种页表和页面规格,但操作系统只采用其中一种,Linux 采用的就是图9 “Translation Table Walk”所示的规格,一级描述符是Coarse Page Table格式,二级描述符是Small Page格式,每个物理页面4K。我们以此为例,结合前面的的解释和页描述符的格式,再看一下Translation Table Walk 的详细过程:

图 14. Translation Table Walk的详细过程

从上到下依次解释如下:

1 VA被划分为三段用于地址映射过程,各段的长度取决于页描述符的格式。

2 TTB寄存器中只有[31:14]位有效,低14位全为0,因此一级页表的基地址对齐到16K地址边界,而一级页表的大小也是16K。

3 一级页表的基地址加上VA[31:20]左移两位组装成一个物理地址。想一想为什么VA[31:20]要左移两位占据[13:2]的位置,而空出[1:0]两位呢?类型?

4 用这个组装的物理地址从物理内存中读取一级页描述符,这是一个Coarse Page Table格式的描述符。

5 通过Domain权限检查后,Coarse Page Table的基地址再加上VA[19:12]左移两位组装成一个物理地址。

6 用这个组装的物理地址从物理内存中读取二级页描述符,这是一个Small Page格式的描述符。

7 通过AP权限检查后,Small Page的基地址再加上VA[11:0]就是最终的物理地址。想一想为什么这次不左移两位了呢?

下面解释一下Domain和AP位。CP15的Domain访问控制寄存器(见表 1 “CP15协处理器的寄存器列表”寄存器3)表示了16个域(Domain),每两位表示一个Domain的访问权限,以下是该寄存器的格式:

图 15. Domain Access Control Register

每个Domain的两个位可以取值为00、01、10或11,如果取值为00或10则表示该Domain不可访问,如果取值为01则表示访问该Domain需要进一步检查AP位,如果取值为11则表示可以直接访问该Domain而无需检查AP位。回想一下,一级页描述符中的Domain字段由4个位组成,可以有16个不同的取值,就表示该描述符所描述的二级页表或Section属于这16个Domain中的哪一个。快速上下文切换、Domain和多种规格的页表是ARM特有的机制,是针对嵌入式系统软件的特点而设计的,其它处理器不一定有类似的机制,例如也许没有Domain 和快速上下文切换的概念,也许只有一种规格的页表。为了能够在多种不同的平台上移植,Linux内核代码不会利用ARM特有的这些机制。除了这些特例之外,我们在这里介绍的其它机制都具有普遍性,读者应重点把握具有普遍意义的基本原理和基本概念。

CP15的控制寄存器(见表 1 “CP15协处理器的寄存器列表”寄存器1)中的S和R位与页描述符的AP位合在一起决定访问权限,如下所示:

图 16. AP权限检查

可见,同样的AP、S、R位对用户模式和特权模式来说具有不同的意义,特权模式的权限都不低于用户模式的权限。最后将各种由内存访问产生的异常总结如下:

Alignment Fault——以Word为单位的数据访问指令地址未对齐到4字节边界,或者以Half Word为单位的数据访问指令地址未对齐到2字节边界。

Translation Fault——页描述符的[1:0]为00,属于Fault格式,无效表项。

Domain Fault——一级页描述符或Section所属Domain的权限位为00或10。

Permission Fault——根据AP位和CP15寄存器1的S、R位检查访问权限,若所属Domain的权限位为11则跳过这一步检查。

External Abort——总线异常,例如此物理地址上没有挂RAM芯片,或者其它硬件故障。

Cache

ARM920T有16K的数据Cache和16K的指令Cache,这两个Cache是基本相同的,数据Cache多了一些写回内存的机制,后面我们以数据Cache为例来介绍Cache的基本原理。我们已经知道,Cache中的存储单位是Cache Line,ARM920T的一个Cache Line是32字节,因此16K的Cache 由512条Cache Line组成。要了解Cache的基本原理,我们从如何设计Cache这个问题入手。

设计Cache的一种最朴素的想法是,把VA分成以32字节为单位,从任何一个对齐到32字节地址边界的VA开始连续的32个字节(比如0x00-0x1f,0x20-0x3f,0x40-0x5f等等)都可以缓存到512条Cache Line中的任何一条。那么一条Cache Line中的32个字节怎么知道是来自哪个VA的呢?这就需要把VA也保存在Cache中,由于这32字节的起始地址是对齐到32字节地址

边界的,末5位全为0,因此只需要保存VA[31:5]即可,这称为VA Tag[4],Tag是VA的一部分,是Cache Line中数据的标识,表明这32字节数据来自哪个VA。这样设计的Cache称为全相联Cache(Fully Associative Cache),图示如下:

图 17. 全相联Cache

给定一个VA,如何在Cache中查找对应的数据呢?首先到Cache中比较查找哪一行的Tag等于VA[31:5],找到对应的Cache Line后,再根据VA[4:0]决定要访问的是该Cache Line缓存的32个字节中的哪一个字节。由于有512条Cache Line,如果这个VA没有缓存在Cache中则需要比较512次才知道,这是最坏的情况,也是最常见的情况,下面我们要改进Cache的设计来解决这个问题。

全相联Cache的特点是任何VA都可以缓存到任何一条Cache Line,给定一个VA做查找时,由于它有可能缓存在512条Cache Line中的任何一条,就只好全部都找一遍了。如果限定某一个VA只允许缓存在某一条Cache Line中,那么查找的过程就快多了:检查一下应该缓存这个VA的那条Cache Line,看Tag一致不一致,如果一致就是Cache Hit,如果不一致就是Cache Miss,可以直接访问物理内存而不必再找其它Cache Line了。这种设计称为直接映射Cache (Direct Mapped Cache),如下图所示:

图 18. 直接映射Cache

地址0~31应该缓存在第1条Cache Line中,地址32~63应该缓存在第2

条Cache Line中,依此类推,地址16352~16383应该缓存在第512条Cache Line

中,下一个地址应该是16384(16K)了,我们又回到开头,地址16K~16K+31应该缓存在第1条Cache Line中,地址16K+32~16K+63应该缓存在第2条Cache Line中,依此类推,再次回到开头的地址应该是32K,32K~32K+31应该缓存在第1条Cache Line中,32K+32~32K+63应该缓存在第2条Cache Line中,依此类推。读者应该可以总结出规律了:给定一个VA,将它除以16K得的余数决定了它应该缓存在哪一条Cache Line中,那么除以16K的商数部分就应该是VA Tag,用以区别Cache Line中缓存的到底是0还是16K还是32K地址上的数据。那么除以16K的商数和余数怎么表示呢?VA[31:14]就是除以16K的商数,

VA[13:0]就是余数,所以上图的Tag处标着VA[31:14]。余数VA[13:0]是16K Cache里的一个字节偏移量,而Cache是按32字节一个Cache Line组织的,所以余数中的高位VA[13:5]决定了是第几条Cache Line,余数中的低位VA[4:0]决定了Cache Line内的字节偏移量。验算一下,VA[13:5]一共是9位,作为Cache Line的编号可以表示的Cache Line数目正是512条。

直接映射Cache虽然查找速度很快,但也有缺点。比如,地址0~31、

16K~16K+31、32K~32K+31都应该缓存到第1条Cache Line中,假如我们程序第一次访问地址30,地址0~31的数据就从内存加载到第1条Cache Line,以便下次访问能更快一些,但是我们程序第二次访问的却是地址32770,地址

32K~32K+31的数据就要从内存加载到第1条Cache Line,把Cache Line里原来存的地址0~31的数据替换掉,以便下次访问能更快一些,但是我们程序第三次访问的却是地址16392……这样下去,Cache起不到任何加速作用,形同虚设,这种问题称为Cache抖动(Cache Thrash)。全相联Cache就不会有这种问题,因为任何VA都可以缓存到任何一条Cache Line,可以把先后几次访问的VA缓存到不同的Cache Line,就不会相互冲突。

全相联Cache和直接映射Cache各有优缺点,全相联Cache查找很慢,但没有抖动问题,直接映射Cache则正相反。为了得到更好的性能,实际CPU的Cache 设计是取两者的折衷,把所有Cache Line分成若干个组,每一组有n条Cache Line,称为n路组相联Cache(n-way Set Associative Cache)。ARM920T采用64路组相联Cache,如下图所示:

图 19. 64路组相联Cache

有了前面两种Cache概念的基础,这种Cache应该很好理解,512条Cache Line分成8组,每组64条,地址0-31、256-587、512-543等等可以缓存到第1组64条Cache Line中的任何一条,地址32-63、288-319、544-575等等可以缓存到第2组64条Cache Line中的任何一条,依此类推。为什么说组相联Cache 是全相联和直接映射Cache的一个折衷呢?如果把组分得很大,把全部Cache Line都分到一个组里面去,就变成了全相联Cache;如果把组分得很小,每组只有一个Cache Line,就变成了直接映射Cache。作为练习,请读者自己计算一下为什么VA Tag是VA[31:8],为什么组的编号用VA[7:5]表示。

那么,为什么组相联Cache的性能比直接映射Cache要好呢?一方面,组相联Cache把一条Cache Line上的冲突分散到了64条Cache Line上,起到了64倍的积极作用。而另一方面,应该缓存到同一个组的VA更多了:对于直接映射Cache,在同一个组(也就是同一条Cache Line)互相冲突的VA有4G/512个;对于组相联Cache,在同一个组(64条Cache Line)互相冲突的VA有4G/8个。从这个数量关系来看,组相联Cache又起到了64倍的消极作用。难道这两种作用不会完全抵销吗?我不打算从数学上严格证明,这不是本节的重点,读者可以通过一个生活常识的例子来理解:层数一样多的两栋楼,其中一栋楼是一部电梯,每层三户,而另一栋楼是两部电梯,每层六户,每户的平均人数一样多,你认为在哪个楼里等电梯的时间较短呢?

接下来解释一下有关Cache写回内存的问题。Cache写回内存有两种模式:

Write Back:Cache Line中的数据被CPU核修改时并不立刻写回内存,Cache Line和内存中的数据会暂时不一致,在Cache Line中有一个Dirty位标记这一情况。当一条Cache Line要被其它VA的数据替换时,如果不是Dirty的就直接替换掉,如果是Dirty的就先写回内存再替换。

Write Through:每当CPU核修改Cache Line中的数据时就立刻写回内存,Cache Line和内存中的数据总是一致的。如果有多个CPU或设备同时访问内存,

例如采用双口RAM,那么Cache中的数据和内存保持一致就非常重要了,这时相关的内存页面通常配置为Write Through模式。

通过读写CP15的相关寄存器,可以对Cache做以下操作:

Clean:将Cache Line中的数据写回内存,清除Dirty位。在程序中的某些同步点上用于确保Cache Line和内存中的数据一致。

Invalidate:在Cache Line中有一个Invalid位表示无效,将这个位置1,下次要访问时即使VA Tag匹配也重新从内存读取数据。例如进程切换时需要声明前一个进程缓存在Cache中的数据无效。

Lock:将某个地址的数据锁定在Cache中,确保不被替换掉。在实时系统中,这样做可以保证某个地址的数据能在一个确定的时间内访问到。

从Cache中查找要访问的数据时用的是VA,但是Cache写回内存要用PA,如果写回内存时还需要查一遍页表就太没有效率了,所以实际上每条Cache Line 中还保存了PA[31:5](PA Tag),完整的Cache构造如下图所示:

图 20. PA Tag

最后解决我们前面遗留的一个问题:页描述符中的C、B位具体是什么意思?

表 2. 页描述符中C、B位的含义

C位为1表示允许Cache,这种情况下用B位来表示Write Through还是Write Back。有些页面不允许Cache,置C位为0,这种情况下可以用B位来选择是否允许使用Write Buffer。Write Buffer也是一种简单的Cache,CPU核执行写指令时可以把数据交给Write Buffer,然后由Write Buffer负责写回内存,这时CPU可以执行后续指令而不必等待写回内存这个较慢的操作结束。

操作MMU和Cache的内核启动代码

bootloader加载linux内核到内存并解压之后,Linux内核首先在汇编代码中读取CPU的基本信息,对CPU做一些基本设置,创建最简单的临时页表,然后开启MMU和Cache,启用虚拟内存管理(此后CPU核发出的地址都是虚拟地址),然后跳到C代码中完成其它初始化工作,比如创建完整的页表、初始化各种内核子系统、初始化硬件设备等。本节以Linux 2.4内核的启动代码为例,了解一下操作MMU和Cache的具体指令是怎么写的,通过实例来加深对前面内容的理解。本节的内容改编自[ARM Linux演义]。

假设目标板的RAM物理地址是从0x0800 0000开始的(也就是说,RAM芯片连接到CPU芯片上从0x0800 0000开始的bank)。经过内核的若干初始化代码之后,寄存器的内容如下:

表 3. 寄存器的初始值

接下来的步骤是:

1 创建简单的临时页表和临时映射

2 配置与MMU和Cache相关的CP15寄存器

3 启用MMU和Cache

临时页表存放在物理内存地址0x0800 4000开始的16K(回想一下,第一级页表是16K,有4096个页描述符)。后面将会把页描述符填写成Section格式,也就是直接映射到1M的大页面,这些都是内核初始化阶段临时用的,为了是写尽可能少的汇编代码,尽快启用MMU并跳到C代码中做剩下的初始化工作,在完整的两级页表建立之后临时页表就没有用了。首先将16K的临时页表清零:

分析影响cache命中率的因素

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

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性能分析学院:信息工程 姓名:陈明 学号: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性能分析报告

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

一、实验目的及要求 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;

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容量的增加不断减小。

实验6Cache性能分析

实验6 Cache 性能分析 6.1 实验目的 1. 加深对Cache 的基本概念、基本组织结构以及基本工作原理的理解; 2. 掌握Cache 的容量、相联度、块大小对Cache 性能的影响; 3. 掌握降低Cache 不命中率的各种方法,以及这些方法对Cache 性能提高的好处; 4. 理解LRU 与随机法的基本思想以及它们对Cache 性能的影响; 6.2 实验平台 实验平台采用Cache 模拟器My Cache 。 6.3 实验内容及步骤 首先要掌握My Cache 模拟器的使用方法。 6.3.1 Cache 的容量对不命中率的影响 1. 启动MyCache 模拟器。 2. 用鼠标单击“复位”按钮,把各参数设置为默认值。 3. 选择一个地址流文件。方法:选择“访问地址”→“地址流文件”选项,然后单击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 4. 选择不同的Cache 容量,包括2KB 、4KB 、8KB 、16KB 、32KB 、64KB 、128KB 和256KB 。分 别执行模拟器(单击“执行到底”按钮即可执行),然后在表5.1中记录各种情况下的不命中率。 地址流文件名: E:\cjh\系统结构模拟器\MyCache 模拟器\地址流\all.din 5. 以容量为横坐标,画出不命中率随Cache 容量变化而变化的曲线,并指明地址流文件名。 不命中率随Cache容量变化图 0.00% 2.00%4.00%6.00%8.00%10.00%12.00%2 4 8 16 32 64 128 Cache容量(KB) 不命中率 6据结果,你能得出什么结论? 6.3.2 相联度对不命中率的影响 1. 用鼠标单击“复位”按钮,把各参数设置为默认值。此时的Cache 的容量为64KB 。 2. 选择一个地址流文件。方法:选择“访问地址”→“地址流文件”选项,然后单击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3. 选择不同的Cache 相联度,包括直接映像、2路、4路、8路、16路和32路。分别执行 模拟器(单击“执行到底”按钮即可执行),然后在表5.2中记录各种情况下的不命中

cache性能分析及优化实验报告

实验报告 实验名称:计算机原理cache性能分析及优化实验 学员:张英杰学号: 201008040092 培养类型: 4+1军人年级:任职培训队 专业:计算机科学与技术所属学院:计算机学院 指导教员:唐玉华职称:研究员 实验室:校计算机中心四号院机房实验日期: 2010.12.1—2010.12.19国防科学技术大学训练部制

《实验报告》填写说明 1.学员完成人才培养方案和课程标准要所要求的每个实验后,均须提交实验报告。 2.实验报告封面必须打印,报告内容可以手写或打印。 3.实验报告内容编排及打印应符合以下要求: (1)采用A4(21cm×29.7cm)白色复印纸,单面黑字打印。上下左右各侧的页边距均为3cm;缺省文档网格:字号为小4号,中文为宋体,英文和阿拉伯数字为Times New Roman,每页30行,每行36字;页脚距边界为2.5cm,页码置于页脚、居中,采用小5号阿拉伯数字从1开始连续编排,封面不编页码。 (2)报告正文最多可设四级标题,字体均为黑体,第一级标题字号为4号,其余各级标题为小4号;标题序号第一级用“一、”、“二、”……,第二级用“(一)”、“(二)” ……,第三级用“1.”、“2.”……,第四级用“(1)”、“(2)” ……,分别按序连续编排。 (3)正文插图、表格中的文字字号均为5号。

一实验概述 (一)实验目的 1.掌握Cache的基本概念、基本组织结构 2.掌握影响Cache性能的三个指标 3.了解相联度对Cache的影响 4.了解块大小对Cache的影响 5.了解替换算法对Cache的影响 6.了解Cache失效的分类及组成情况 7.了解一些基本的Cache性能优化方法(选做) (二)实验步骤 1.运行模拟器SimpleScalar 2.在基本配置情况下运行矩阵乘计算程序统计Cache失效次数,并统计三种 不同类型的失效 3.改变Cache容量,统计各种失效的次数,并进行分析 4.改变Cache的相联度,统计各种失效的次数,并进行分析 5.改变Cache块大小,统计各种失效的次数,并进行分析 6.改变Cache的替换策略,统计各种失效次数,并分析 7.对给出的矩阵乘计算程序进行适当改写以优化cache性能。(选做) (三)实验平台 Vmware 虚拟机,redhat 9.0 linux 操作系统,SimpleScalar模拟器。(四)实验课时 3课时 (五)参考资料 计算机体系结构教材、SimpleScalar模拟器使用指南等 二背景知识 (一)Cache基本知识 (1) 可以从三个方面改进Cache的性能:降低失效率、减少失效开销、减少Cache 命中时间; (2) 按照产生失效的原因不同,可以把Cache失效分为三类: 1)强制性失效(Compulsory miss)

Cache的工作原理4

前言 虽然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,以备下次访问。

实验4 Cache性能分析

实验4 Cache性能分析 4.1 实验目的 1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解; 2.掌握Cache的容量、相联度、块大小对Cache性能的影响; 3.掌握降低Cache不命中率的各种方法,以及这些方法对Cache性能提高的好处; 4.理解LRU与随机法的基本思想以及它们对Cache性能的影响; 4.2 实验平台 实验平台采用Cache模拟器My Cache。 4.3 实验内容及步骤 首先要掌握My Cache模拟器的使用方法。 4.3.1 Cache的容量对不命中率的影响 1.启动MyCache模拟器。 2.用鼠标单击“复位”按钮,把各参数设置为默认值。 3.选择一个地址流文件。方法:选择“访问地址”→“地址流文件”选项,然后单击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 4.选择不同的Cache容量,包括2KB、4KB、8KB、16KB、32KB、64KB、128KB和256KB。分 别执行模拟器(单击“执行到底”按钮即可执行),然后在表5.1中记录各种情况下的不命中率。 地址流文件名: 5.以容量为横坐标,画出不命中率随Cache容量变化而变化的曲线,并指明地址流文件名。 6.根据该模拟结果,你能得出什么结论? 4.3.2 相联度对不命中率的影响 1.用鼠标单击“复位”按钮,把各参数设置为默认值。此时的Cache的容量为64KB。 2.选择一个地址流文件。方法:选择“访问地址”→“地址流文件”选项,然后单击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3.选择不同的Cache相联度,包括直接映像、2路、4路、8路、16路和32路。分别执行 模拟器(单击“执行到底”按钮即可执行),然后在表5.2中记录各种情况下的不命中率。

西安邮电大学Cache性能分析实验报告

西安邮电大学Cache性能分析实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:cache性能分析 专业名称:软件工程

班级: 学生姓名: 学号(8位): 指导教师:杨锐 实验日期:5月20日 1 实验目的 (1)加深对Cache的基本概念、基本组织结构以 及基本工作原理的理解。 (2)掌握Cache容量、相联度、块大小对Cache 性能的影响。 (3)掌握降低Cache不命中率的各种方法。

2 实验平台 采用MyCache模拟器。 MyCache模拟器的使用方法: (1) 双击MyCache.exe,启动模拟器。 (2) 系统打开操作界面,如下图所示: MyCache-Cache模拟器 设置 参数 区 模拟结果显示区 执行 控制 区 (3) 能够设置的参数包括Cache的容量、块大小、相联度、替换算法、预取策略、写策略、写不命中时的调块策略。能够直接从列表中选择。 (4) 访问地址能够选择来自地址流文件,也能够选择手动输入。如果是前者,则能够经过单击“浏览”按钮,从模拟器所在文件夹下的“地址

流”文件夹中选取地址流文件(.din)文件,然后执行。执行得方式能够是单步,也能够选择一次执行结束。如果选择手动输入,就能够在“执行控制”区域中输入块地址,然后单击“访问”按钮。系统会在界面的右边显示访问类型、地址、块号以及块内地址。 (5) 模拟结果包括: ●访问总次数,总的不命中次数,总的不命中率。 ●读指令操作的次数,其不命中次数及其不命 中率。 ●读数据操作的次数,其不命中次数及其不命 中率。 ●写数据操作的次数,其不命中次数及其不命 中率。 ●手动输入单次访问的相关信息。 3 实验内容和步骤 3.1 Cache容量对不命中率的影响 (1) 启动MyCache。

实验1 Cache性能分析

实验1 Cache性能分析 1 实验目的 (1)加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。 (2)掌握Cache容量、相联度、块大小对Cache性能的影响。 (3)掌握降低Cache不命中率的各种方法。 2 实验平台 采用MyCache模拟器。 MyCache模拟器的使用方法: (1) 双击MyCache.exe,启动模拟器。 (2) 系统打开操作界面,如下图所示: (3) 写不命中时的调块策略。可以直接从列表中选择。 (4) 访问地址可以选择来自地址流文件,也可以选择手动输入。如果是前者,则可以通过单击“浏览”按钮,从模拟器所在文件夹下的“地址流”文件夹中选取地址流文件(.din)文件,然后执行。执行得方式可以是单步,也可以选择一次执行结束。如果选择手动输入,就可以在“执行控制”区域中输入块地址,然后单击“访问”按钮。系统会在界面的右边显示访问类型、地址、块号以及块内地址。 (5) 模拟结果包括: ●访问总次数,总的不命中次数,总的不命中率。 ●读指令操作的次数,其不命中次数及其不命中率。 ●读数据操作的次数,其不命中次数及其不命中率。 ●写数据操作的次数,其不命中次数及其不命中率。 ●手动输入单次访问的相关信息。 3 实验内容和步骤 3.1 Cache容量对不命中率的影响 (1) 启动MyCache。 (2) 单击“复位”按钮,将各参数设置为默认值。 (3) 选择一个地址流文件。具体方法:选择“访问地址”→“地址流文件”选项,然后单击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 (4) 选择不同的Cache容量,包括2KB,4 KB,8 KB,16 KB,32 KB,64 KB,128 KB和256 KB,分别执行模拟器(单击“执行到底”按钮就可执行),然后在表1.1中记录各种情况下的不命中率。

高速缓冲存储器Cache

高速缓冲存储器cache 10计科一班1010311110 韩家君 高速缓冲存储器(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。它是位于CPU与内存之间的临时存储器,比主存储器体积小但速度快,用于保有从主存储器得到指令的副本——很可能在下一步为处理器所需——的专用缓冲器。在Cache中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(Cache+内存)就变成了既有Cache的高速度,又有内存的大容量的存储系统了。 Cache对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与Ca che间的带宽引起的。 高速缓存的基本概念 在计算机存储系统的层次结构中,介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。某些机器甚至有二级三级缓存,每级缓存比前一级缓存速度慢且容量大。而这时,一开始的高速小容量存储器就被人称为一级缓存。高速缓存的组成结构 高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。 主要由大部分组成: Cache存储体:存放由主存调入的指令与数据块。 地址转换部件:建立目录表以实现主存地址到缓存地址的转换。 替换部件:在缓存满时按一定策略进行数据块替换,并修改地址转换部件。 高速缓存的作用介绍 在计算机技术发展过程中,主存储器存取速度一直比中央处理器操作速度慢得多,使中央处理器的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。有很多方法可用来缓和中央处理器和主存储器之间速度不匹配的矛盾,如采用多个通用寄存器、多存储体交叉存取等,在存储层次上采用高速缓冲存储器也是常用的方法之一。很多大、中型计算机以及新近的一些小型机、微型机也都采用高速缓冲存储器。 高速缓冲存储器的容量一般只有主存储器的几百分之一,但它的存取速度能与中央处理器相匹配。根据程序局部性原理,正在使用的主存储器某一单元邻近的那些单元将被用到的可能性很大。因而,当中央处理器存取主存储器某一单元时,计算机硬件就自动地将包括该单元在内的那一组单元内容调入高速缓冲存储器,中央处理器即将存取的主存储器单元很可能就在刚刚调入到高速缓冲存储器的那一组单元内。于是,中央处理器就可以直接对高速缓冲存储器进行存取。在整个处理过程中,如果中央处理器绝大多数存取主存储器的操作能为存取高速缓冲存储器所代替,计算机系统处理速度就能显著提高。 高速缓存的工作原理 1、读取顺序 CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所

实验二 Cache性能分析

实验四 Cache性能分析 4.1 实验目的 1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解; 2.掌握Cache容量、相联度、块大小对Cache性能的影响; 3.掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处; 4.理解LRU与随机法的基本思想以及它们对Cache性能的影响。 4.2 实验平台 Cache模拟器MyCache, 《计算机系统结构实验教程》附书光盘中提供,清华大学出版社。 设计:张晨曦教授(xzhang2000@https://www.wendangku.net/doc/fe16414138.html,),版权所有。 开发:程志强。 4.3 实验内容及步骤 首先要掌握MyCache模拟器的使用方法。(见4.4节) 4.3.1 Cache容量对失效率的影响 1.启动MyCache。 2.用鼠标点击“复位”按钮,把各参数设置为默认值。 3.选择一个地址流文件。方法:选择“访问地址”下的“地址流文件”选项,然后点击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 4.选择不同的Cache容量,包括:2KB,4KB,8KB,16KB,32KB,64KB,128KB,256KB, 分别执行模拟器(点击“执行到底”按钮),然后在表4.1中记录各种情况下的失效率。 地址流文件名:C:\Documents and Settings\user\桌面\Cache性能分析\MyCache模拟器\地址流\all.din 5.根据该模拟结果,你能得出什么结论? Cache容量越大,失效率越低。 4.3.2 相联度对失效率的影响

1.用鼠标点击“复位”按钮,把各参数设置为默认值。这时的Cache容量为64KB。 2.选择一个地址流文件。方法:选择“访问地址”下的“地址流文件”选项,然后点击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3.选择不同的Cache相联度,包括:直接映象,2路,4路,8路,16路,32路,分别执 行模拟器(点击“执行到底”按钮),然后在表4.2中记录各种情况下的失效率。 地址流文件名:C:\Documents and Settings\user\桌面\Cache性能分析\MyCache模拟器\地址流\cc1.din 4.把Cache的容量设置为256KB,重复上一步的工作。 地址流文件名:C:\Documents and Settings\user\桌面\Cache性能分析\MyCache模拟器\地址流\cc1.din 5.根据该模拟在64KB和256KB的情况下失效率随Cache相联度变化而变化的情况,你能 得出什么结论? Cache容量相同,相连度越高,失效率越低 4.3.3 Cache块大小对失效率的影响 1.用鼠标点击“复位”按钮,把各参数设置为默认值。 2.选择一个地址流文件。方法:选择“访问地址”下的“地址流文件”选项,然后点击“浏 览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3.选择不同的Cache块大小,包括:16B,32B,64B,128B,256B,对于Cache的各种 容量,包括:2KB,8KB,32KB,128KB,512KB,分别执行模拟器(点击“执行到底” 按钮),然后在表4.4中记录各种情况下的失效率。

相关文档