1. 存储系统概述:瑞芯微平台存储架构全景
大家好,我是你们的嵌入式存储讲师。今天咱们聊聊瑞芯微平台的存储系统。说实话,这块内容我讲了不下几十遍了,但每次备课还是能发现新东西。存储系统就像芯片的「血管」,数据流不通,再强的CPU也白搭。
瑞芯微的芯片,从RK3288到RK3588,存储架构其实有个共同的血统。我习惯把它们分成三个层级来看:Cache、RAM、Flash。这三个层级,说白了就是速度、容量、成本的博弈。
1.1 存储层级全景图
先看一张我手绘的层级图(嗯,你们脑补一下):
CPU Core
↓
L1 Cache (32KB-64KB) —— 1ns 级延迟
↓
L2 Cache (256KB-512KB) —— 3-5ns 延迟
↓
L3 Cache (1MB-2MB) —— 10-15ns 延迟
↓
DDR RAM (2GB-16GB) —— 50-100ns 延迟
↓
eMMC/NAND Flash (8GB-256GB) —— 100μs-1ms 延迟
为什么这么分层?我举个例子。你在写视频编码程序时,CPU要频繁读取像素数据。如果每次都去Flash里拿,那速度慢得你怀疑人生。所以Cache就是CPU的「随身笔记本」,RAM是「办公桌」,Flash是「档案室」。
核心观点: 瑞芯微的存储设计,本质是用「局部性原理」来掩盖存储器的速度差异。你写代码时如果能利用好这个特性,性能能翻倍。
1.2 Cache:芯片的「高速缓存」
瑞芯微的Cache设计,我个人觉得挺有特色的。以RK3588为例,它用的是Cortex-A76和A55的大小核架构。大核的L1 Cache是64KB指令+64KB数据,L2是512KB。小核的L1是32KB+32KB,L2是256KB。
我在项目中遇到过一个问题:有个客户做AI推理,发现大核跑得还没小核快。排查了半天,发现是Cache miss率太高了。为什么?因为他的数据访问模式是随机的,Cache根本没法预取。
避坑指南: 我曾经在RK3399上调试一个图像处理算法,发现L2 Cache miss率高达40%。后来把数据按行访问改成按块访问,miss率降到了5%以下。记住:顺序访问永远比随机访问快。
1.3 RAM:DDR内存的选型与配置
瑞芯微平台支持的内存类型挺多的:DDR3、DDR4、LPDDR4、LPDDR4X、LPDDR5。你想想看,选哪种?这得看你的应用场景。
| 内存类型 | 带宽(理论) | 典型延迟 | 瑞芯微支持芯片 |
|---|---|---|---|
| DDR3 | 12.8 GB/s | 50-70 ns | RK3288, RK3399 |
| LPDDR4 | 34.1 GB/s | 60-80 ns | RK3568, RK3588 |
| LPDDR5 | 51.2 GB/s | 50-70 ns | RK3588 |
我建议做产品时,优先选LPDDR4或LPDDR5。为什么?因为瑞芯微的DDR控制器对LPDDR系列优化得更好。我记得有一次帮客户调RK3568的DDR频率,从1600MHz调到2133MHz,带宽直接提升了30%。但要注意,频率高了功耗也上去了,这是个trade-off。
警告: 别盲目追求高频率DDR。我曾经在RK3588上试过LPDDR5 6400MHz,结果因为PCB走线太长,信号完整性出了问题,系统频繁死机。后来降频到5500MHz才稳定。记住:稳定比速度更重要。
1.4 Flash:eMMC与NAND的选择
瑞芯微的Flash接口,主流是eMMC 5.1和SD/MMC控制器。eMMC说白了就是NAND Flash加了个控制器,对外接口统一。但这里有个坑:eMMC的寿命问题。
我做过一个测试:在RK3568上连续写eMMC,每秒写10MB,大概写了3个月,eMMC就挂了。为什么?因为eMMC的写寿命是有限的,一般只有3000-5000次P/E循环。如果你的应用需要频繁写日志,建议用SLC模式的NAND,或者加个RAM做写缓冲。
性能指标速查:
- 带宽: eMMC 5.1 理论400MB/s,实际200-300MB/s;NAND Flash 理论800MB/s,实际500-600MB/s
- 延迟: 读延迟约100μs,写延迟约200μs(4KB随机)
- IOPS: 随机读约5000-10000 IOPS,随机写约2000-5000 IOPS
1.5 性能指标:带宽、延迟、IOPS
这三个指标,我习惯用「水管」来比喻:
- 带宽: 水管有多粗。比如DDR4 3200MHz,带宽是25.6GB/s,意味着每秒能流25.6GB的水。
- 延迟: 水龙头打开到水流出来的时间。Cache延迟1ns,DDR延迟50ns,Flash延迟100μs,差距巨大。
- IOPS: 每秒能开关多少次水龙头。Flash的IOPS低,因为每次读写都有擦除和磨损均衡的开销。
你想想看,如果你的程序是顺序读写,带宽就是瓶颈;如果是随机读写,IOPS和延迟才是关键。我在做视频监控项目时,发现DDR带宽够,但IOPS不够,因为要同时处理多路视频流。后来用了DMA和双缓冲,才把问题解决。
个人经验: 调存储性能时,我习惯先用perf stat看Cache miss率,再用dd测Flash带宽,最后用lmbench测DDR延迟。三步走,基本能定位90%的问题。
1.6 小结
嗯,这一章我们聊了瑞芯微的存储架构全景。说白了就是:Cache快但小,RAM居中,Flash慢但大。设计时要想清楚你的数据流怎么走,别让CPU等着数据从Flash里慢慢爬出来。
下一章,我们会深入Cache的替换策略和预取机制。到时候我会分享一个我在RK3588上优化Cache命中率的实战案例,保证让你有收获。
对了,如果你在实际项目中遇到存储相关的问题,欢迎来公众号找我。咱们下期见。
公众号:蓝海资料掘金营,微信deep3321