ARM架构(六)——Cache①

1. Cache 的基本概念和使用场景

在这里插入图片描述

1.1 为什么要用cache?

ARM 架构刚开始开发时,处理器的时钟速度和内存的访问速度大致相似。今天的处理器内核要复杂得多,并且时钟频率可以快几个数量级。然而,外部总线和存储设备的频率并没有达到同样的程度。可以实现可以与内核以相同速度运行的小片上 SRAM块,但与标准 DRAM 块相比,这种 RAM 非常昂贵,标准 DRAM块的容量可能高出数千倍。在许多基于ARM 处理器的系统中访问外部存储器需要数十甚至数百个内核周期。
缓存是位于核心和主内存之间的小而快速的内存块。它在主内存中保存项目的副本。对高速缓冲存储器的访问比对主存储器的访问快得多。每当内核读取或写入特定地址时,它首先会在缓存中查找。如果它在高速缓存中找到地址,它就使用高速缓存中的数据,而不是执行对主存储器的访问。通过减少缓慢的外部存储器访问时间的影响,这显着提高了系统的潜在性能。通过避免驱动外部信号的需要,它还降低了系统的功耗

1.2 不同的Master硬件共享数据时-invalid cache

在这里插入图片描述

1.3不同的Master硬件共享数据时-flush cache

在这里插入图片描述

1.4不同的缓存策略的系统共享数据时-flush cache

在这里插入图片描述

1.5 不同的缓存策略的系统共享数据时-invalid

在这里插入图片描述

1.6 cache操作系统中软件维护——Cache一致性的API:

linux/arch/arm64/mm/cache.S
linux/arch/arm64/include/asm/cacheflush.h

void flush_icache_range(unsigned long start, unsigned long end);
int invalidate_icache_range(unsigned long start, unsigned long end);
void flush dcache area(void *addr, size_t len);
void inval dcache area(void *addr, size t len);
void clean dcache area poc(void *addr, size t len);
void clean_dcache_area_pop(void *addr, size_t len)
void clean_dcache area_pou(void *addr, size t len);
long flush cache user range(unsigned long start, unsigned long end)void sync icache aliases(void *kaddr, unsigned long len);
void flush_icache_range(unsigned long start, unsigned long end)void flush icache all(void)

1.7ATF

/arm-trusted-firmware/lib/aarch64/cache_helpers.S
在这里插入图片描述

1.8 optee

/optee/core/arch/arm/kernel/cache_helper_a64.S
在这里插入图片描述

1.9 下电时序中

/optee_os-3.20.0/core/arch/arm/plat-rockchip/psci_rk322x.c
在这里插入图片描述

思考

在这里插入图片描述
总结一下: modified的数据地址,在执行invalidate的时候,会先自动执行clean。即DCIVAC等效于DC CIVAC

软件维护cache的场景都有哪些?

  • 不同Master之间共享数据。(最常用,比如CPU与DMA直接的数据交互)
  • 相同Master不同缓存策略的软件系统共享数据
  • 下电时序
### ARM架构中的Hybrid Cache技术 #### 定义与基本概念 Hybrid Cache种混合缓存机制,在ARM架构下通常指的是结合了不同层次或类型的缓存来提升性能的种方式。这种设计旨在平衡功耗、面积成本以及访问延迟之间的关系,从而达到更优的整体表现。 #### 实现原理 在现代SoC(System on Chip)中,特别是那些基于ARM架构的产品里,Hybrid Cache可以通过多种方法实现: - **分层式结构**:采用多级缓存体系(L1, L2,甚至L3),每级都有不同的容量和速度特性[^1]。例如,在某些高端移动处理器中可以看到这样的配置——较小而快速的级缓存靠近核心处理单元(CPU core),较大但较慢的二级或三级共享缓存则位于远离CPU的位置。 - **异构化设计**:在同级别的缓存内部分区为不同类型的数据服务。比如将指令和数据分开存储(I-Cache/D-Cache),或是针对特定应用场景创建专用区域,如图形渲染任务使用的纹理贴图缓存(Texture Cache)。 - **动态调整策略**:根据工作负载的变化自动改变缓存分配情况。这意味着当应用程序运行时,系统能够识别其需求并相应地优化资源利用率;对于频繁读取的操作给予更多空间支持,而对于较少发生的写入动作减少预留位置以节省能量消耗。 ```c++ // 假设有个简单的函数用于模拟Hybrid Cache的行为 void hybridCacheSimulator() { // 初始化各级缓存参数... while (true) { // 运行循环 if (isInstructionAccess()) { accessICache(); // 访问指令缓存 } else { accessDCache(); // 或者访问数据缓存 adjustCachePolicyBasedOnWorkload(); } checkForMissesAndHandleEvictions(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值