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