HPM6700系列——Cache
介绍
Cache是一个高速缓冲区域,主要用于CPU与Memory之间的数据访问
CPU时钟比较高,内存的访问时钟一般在133MHz,166MHz以及200MHz,这样在访问内存的时候CPU会在等待,浪费了CPU资源。因此就需要Cache来作为CPU与内存的缓存区域。
基本特性
Cache是用来存储CPU访问数据,减少访问内存时间,但是Cache的容量不大,一般只有几十到几百KB,主要还是工艺制造导致的价格贵。
Cache 与CPU和内存访问都有一个基本单位 称之为Cache line。由于Cache的内存空间小,这样就会引发一些问题,比如在短时间内,Cache中的数据被访问多次,如果没有正确写入内存会导致数据错误;还有被大量数据进行被写进Cache,会导致之前的Cache line被替换掉(这个需要看cache的替换算法),CPU在传输数据到cache这个操作cache会被标记,下一次读取的时候会直接从cache中读取数据不再访问内存,这个标记也叫Dirty。cache在将数据传输给内存之后,会可以将相应的cache line失效,为数据腾出空间。下一次CPU访问这个地址的时候就会直接访问内存,不在访问cache。
疑问
- 如何实现CPU传输到cache缓存,cache缓存到内存 — l1c_dc_enable()开启cache,l1c_dc_writeback()将数据写入内存
- 如何指定cacheline大小给固定内存
- CPU如何将内存标记为cache——cache是一个高速的缓存地址,不是内存的某种属性
验证
- 验证noncacheable是否和l1c_dc_is_enabled有关系 ————noncacheable是将一段地址设置为了一个cache无法访问的内存只能从CPU访问内存
- 验证了如果中途关掉了cache 并且没有清除将cacheline进行失效 后续对同一个地址操作,再开启cache后读取会异常,读取到底是cache里面的缓存数据。
- 验证cache line 锁住lock之后是否会被改变