ARM cortex-A9 的L2 Cache lockdown

    在ARM cortex-A9双核平台上开发,有一段中断服务代码要求运行时间尽量短,而且时间可预测。

   首先想到的是gcc编译器的优化选项,使用推荐的O2选项,运行时间还是不太理想。

   为了进一步优化时间,对源码结构进行调整,同时把耗时的操作放到另外一个CPU处理,时间缩短了很多。

   最后想到了L2 Cache的lockdown特性,就把这个也使用上了。

  

   ARM cortex-A9双核平台有2级cache,32k 的L1 Icache 和Dcache,以及512K的L2 Cache,L1 Cache不能被lockdown,只能对L2 cache进行处理了。


    先介绍下cache的工作原理:

传送门:

 cache和write buffer

http://blog.csdn.net/yubingjunj/article/details/5063195

Cache是一种容量小、速度快的存储器阵列,它位于主存和处理器内核之间,保存着最近一段时间处理器涉及到的主存块内容,主要是为了缓解慢速存储器和处理器之间的速度不匹配造成的访问瓶颈问题。write buffer经常和Cache配合使用。用来缓解处理器和Cache等高速设备和慢速存储器之间的写速度匹配问题。除了处理器和write buffer之外,与cache相关的还有MMU、总线架构等。如如果总线是冯.诺依曼结构,因为数据和指令走同一个通道,则只有一个Cache,如果总线是哈佛结构,因为数据和指令走不同的通道,则采用2个cache。

      既然是为了缓解读写速度匹配问题,需要解决的或者需要提供的解决方案就包括:访问算法、写算法。
       1.访问算法
      访问算法涉及到处理器、Cache、慢速存储器等三个部件,具体就是在处理器和Cache中如何访问、Cache和慢速存储器之间如何访问。
     处理器和Cache间的访问算法:如果Cache中没有处理器请求的内容,则发生Cache失效,Cache控制器从主存中copy相应的内容到Cache存储器,称为Cache行填充。这个时候如果Cache是满的,则就需要进行替换,采用的不同的替换策略,就是Cache的替换算法,arm下的Cache的替换算法有轮转法和伪随机替换法。
      2.写算法
     当有计算结果需要存储时,就因为涉及到处理器、Cache、慢速存储器等三个部件,为了更好地提高写的速度,就另加了一个write buffer部件,处于与Cache并行的位置,尽可能的将慢速的串行传输数据化为并行传输数据,加快了写的节奏、拉长了写的时间。是空间和时间的平衡。
    总结算法的本质,主要是化串行为并行。评价读写算法的优劣的标准是命中率。
CACHE --
   CACHE可以分为DATA CACHE和INSTRUCTION CACHE(在有些处理器上,是统一的,数据和指令共用一小块CACHE). 和普通存储比较,CACHE的存储速度快很多.提供CACHE的目的是为了提高速度.如果CPU要取的指令和数据在CACHE里面,就不用到MEM里去取,速度会很有优势.当然,需要提供一定的机制来维护CACHE和 MEMORY的一致性.以保证数据和指令的正确性.CPU需要读某个地址的数据或者是指令的是,CPU会先看看CACHE里面有没有,如果有,直接从CACHE读.如果没有,那指定的数据指令从RAM里读取,同时,保存在CACHE里.如果下次还需要的时候,就有可能可以直接从CACHE里取.如果CACHE满了,会把一些最近没有访问的数据从CACHE里面清除出去,如果有必要,还需要回写到RAM里面去.

BUFFER -
   一般都只看到WRITE BUFFER吧,在ARM的处理器里,好像没有看到过READ BUFFER :-) . WRITE BUFFER的作用其实和CACHE一样,目的都是为了提高速度.试想,如果CPU需要把一些数据写到外设去,如果外设的速度比CPU的速度慢很多的话,那CPU会在这个写操作上消耗很多的时间,影响速度.如果能提供一个中间的BUFFER做缓冲,数据先放到BUFFER,CPU就可以去做别的事情了.然后就可以在从BUFFER写到目的地址去.

总而言之,CACHE和BUFFER的目的是一样的,为了提高性能.不过具体的应用场合不一样.
cache一般是为了加快交换速度,减少读写外部慢速存储器设计的,buffer主要是为了协调速度,如快速设备同慢速通讯。在一些情况下,他们指的是一个东西


cache解释:当CPU需要读写内存地址的数据时,首先看cache中是否有改地址的内容,有的话就不去内存访问了,没有的话就访问内存,访问后如果内存的MMU描述符的Cbit使能,那么该地址对应内存的数据会被放入cache,这个动作称为linefill,如果Cbit禁能,那么CPU直接读取内存数据,但是不会发生linefill,CPU下次访问该地址内存时,仍旧需要直接访问内存。

writebuffer解释:当CPU需要写数据到内存时,对于WT和WB内存,如果内存的MMU描述符的Bbit使能,那么数据先放入writebuffer,适当的时候写入内存,CPU只负责把数据放入writebuffer,不会等待写入内存完毕;Bbit禁能时,CPU一直等待写入内存完毕。

传送门: CACHE 写透式与回写式
http://blog.chinaunix.net/uid-12461657-id-3198510.html


如果所有的cache和内存交互由一个CPU负责,那么cache对我们来说是透明的。

如果有多个CPU或则内存在CPU不知情的条件下发生改变,则需要cache flush和cache invalidate来更新内存和使无效cache,否则导致cache和内存不一致。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值