ARM系列之cache(一)

一、背景

        Cache一词是从法语中动词“cacher”(隐藏)借鉴而来的。顾名思义,用于存储处理器所需的指令和数据的cache,对编程人员和系统是隐藏的,在很多情况下,cache可以说是透明的,或者是隐藏的。但是理解cache的操作细节依然是非常重要的。

       第一代ARM架构被开发出来时,处理器时钟速度和memory访问速度差不多,但是如今ARM处理器速度已经非常快了,而外部总线频率和memory设备并没有达到与处理器匹配的速度。虽然片上SRAM可以达到与处理器匹配的速度,但是RAM与大很多倍的标准DRAM相比,价格非常昂贵,在基于ARM处理器系统中,CPU访问外部memory需要花费几十个,甚至上百个处理器指令周期。

二、cache简介

                                                        

        本质上,cache是一个小而快的memory块,一般位于CPU与主存之间。它一般存放一些主存数据的备份。访问cache远快于访问主存,由于cache存放的内容是主存内容的子集,所以它需要存储地址及对应的数据。当CPU需要读写某个地址时,它首先在cache里查找,如果在cache里找到了,CPU将直接使用cache里与该地址对应的数据,而不必再访问主存,这样就减少了对外部慢速memory设备访问时间,从而大大提升了系统性能。同时也避免了驱动外部信号,减少系统功耗。

       Cache,相对于系统整体memory来说,是比较小的,cache大小越大,将使芯片价格越贵。另外,芯片内的cache大小也会影响处理器最大速度。如何高效使用cache将是写一个高效应用程序的关键。

       Cache可以用片上SRAM来实现,临时存储主存里指令和数据的备份。代码和数据都有局部性原理,也就是说,一段时间内,程序很可能会再次使用同样的地址,或者其相近的地址。比如代码经常包含循环,这就意味着同样的代码,或者函数会被重复执行,数据访问也具有局部性,比如栈,由于访问RAM更多地具有局部性,并非随机,而使cache变得非常有意义。

       Write buffer是一个用于解耦的硬件模块,有了它,当CPU执行store指令时,它不再需要等待写外部memory操作完成,而是将store指令相关的地址,控制以及要写入的数据放到Write buffer后,就可以继续执行下一条指令。和cache一样,它也位于CPU和主存之间。

三、cache如何提升系统性能

       如我们所见,由于程序执行不是随机的,因此cache可以加快处理速度。程序倾向于重复访问相同的数据集,并重复执行相同的指令集。 通过在首次访问时将代码或数据移动到更快的内存中,对代码或数据的后续访问变得更快。 将数据提供给缓存的初始访问没有比平常快。 以后对缓存数据的任何访问都会更快,而性能的提升正是源于此。 核心硬件将检查高速缓存中的所有指令提取和数据读取或写入,尽管显然您必须将内存的某些部分(例如那些包含外围设备的部分)标记为不可缓存。 由于缓存仅保存主内存的一个子集,因此您需要一种方法(快速)来确定要查找的地址是否在缓存中。

四、cache引入的问题

       虽然cache和write buffer可以加快程序执行速度,但是它们也会导致一些问题。这些问题在没有cache的CPU中是不存在的,其中一个问题是程序执行时间可能变得不确定。

       这是因为,由于cache很小并且仅保留主内存的一个子集,因此它在程序执行时会迅速被填充。当cache已满时,必须删除现有代码或数据以为新代码或者数据腾出空间。因此,在任何给定时间,应用程序通常无法确定在cache中是否能找到特定的指令或数据项。

       这意味着特定代码段的执行时间可能会有很大差异。在需要强烈确定性行为的硬实时系统中,这可能是个问题。

       此外,您需要一种方法来控制cache和write buffer如何访问内存的不同部分。在某些情况下,您希望CPU从外围设备(例如外围设备)读取最新数据。例如,使用定时器外设的缓存值是不明智的。有时,您希望CPU停止运行并等待存储完成。因此,cache和write buffer也增添了一些额外的工作

       有时,cache和外部memory的内容可能不相同,这是因为处理器可以更新尚未写回到主存储器的cache内容。或者,其他CPU可以在当前CPU获取自己的副本后更新主存。这是一个常见问题。当您有多个内核或内存代理(例如外部DMA控制器)时,这可能是一个特殊的问题。一致性问题将在本书的后面进行介绍。

五、存储金字塔

       在计算机科学里,有一个存储金字塔概念,这是因为,越是靠近CPU的存储容量越小,但速度越快,相反,越是远离CPU的存储容量越大,但速度越慢。在许多计算机系统里,一般有两层存储,第一层是主存储设备,如flash,SRAM和DRAM,第二层是辅助存储设备,如硬盘。但是在嵌入式领域,我们一般只区分片上存储和片外存储,且片上存储速度更快。

       在ARM系统里,L1 cache通常是与CPU逻辑电路直接相连的,用来预取指令和处理load和store指令。一般大小为16KB或者32KB。如果用在哈弗架构中,一般会将L1 cache拆分为相互独立的指令cache和data cache。

      L2 cache,比L1 cache容量大,一般大小为256KB,512KB,或者1MB。速度比较慢,且是统一的(即使用在哈弗架构中,依然同时存储指令和data)。L2 cache既可以放在芯片内部,也可以放在芯片外部,位于CPU和主存之间。ARM L2C-310就是放在芯片外部的。

       参考文档:https://developer.arm.com/documentation/den0013/d/caches?lang=en

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值