3. 缓存层次与存储介质选型
任务载荷的数据流具有明显的“突发写入、分级消费”特征:传感器前端以固定节拍产生原始帧,预处理单元需要低延迟读取,算法模块需要中等容量的中间结果,而任务记录与回传则要求大容量、掉电不丢失。若把所有数据都放在同一种介质上,要么带宽不够,要么功耗和成本失控。因此缓存层次设计的本质,是把“访问频率、时延容忍度、数据生命周期、可靠性要求”四个维度映射到不同存储介质上。
介质特性对比
先看五类介质在关键指标上的差异。下表为面向星载任务载荷的典型量级参考,具体数值随工艺、容量和器件等级变化,仅用于选型时的相对比较。
| 介质 | 典型带宽 | 容量范围 | 访问时延 | 功耗特征 | 抗辐照能力 | 相对成本 |
|---|---|---|---|---|---|---|
| 寄存器 | 极高(Tbps级片内) | KB级 | 单周期 | 动态功耗高,静态低 | 随工艺敏感,需加固 | 极高 |
| SRAM | 高(百Gbps~Tbps) | KB~MB | 几纳秒 | 静态功耗偏高 | 易单粒子翻转,需ECC | 高 |
| DRAM | 中高(十~百Gbps) | MB~GB | 几十纳秒 | 刷新功耗持续 | 需EDAC与刷新加固 | 中 |
| Flash | 低(百MBps~GBps) | GB~TB | 微秒~毫秒 | 写入功耗高,静态低 | 需坏块管理与纠错 | 低 |
| NVMe | 中高(GBps级) | GB~TB | 几十微秒 | 读写功耗较高 | 依赖控制器与FTL加固 | 中高 |
从表中可以看出,带宽与容量、成本之间基本呈反向关系,而抗辐照能力并不随性能线性变化。寄存器与SRAM速度快但容量小、单位成本高;DRAM容量和成本折中,但需要持续刷新且对单粒子效应敏感;Flash容量大、成本低,但写入慢、擦写寿命有限;NVMe在带宽和容量之间取得较好平衡,但控制器复杂度高,空间应用需额外考虑FTL的可靠性与掉电保护。
缓存层次设计原则
面向任务载荷的缓存层次,建议遵循以下五条原则。
- 按访问频率分层,而非按数据量分层。最热的数据放在最靠近计算单元的层级。例如帧同步头、系数表、状态机上下文放在寄存器或SRAM;整帧原始数据放在DRAM;归档数据放在Flash或NVMe。
- 让每一层只承担一种主要职责。L0寄存器负责流水线暂存与握手,L1 SRAM负责低延迟中间结果,L2 DRAM负责帧级缓冲与多模块共享,L3非易失介质负责持久化与回传队列。职责混杂会导致带宽争用和时序不可预测。
- 带宽逐层递减、容量逐层递增。若上层带宽低于下层产生速率,就会形成背压。设计时应保证每一层的持续写入带宽大于其上游平均产生速率,并留出至少30%的突发余量。
- 可靠性随层级加深而加强。SRAM用ECC,DRAM用EDAC加定期巡检,Flash用坏块管理加纠错,NVMe需关注掉电保护与写放大。抗辐照要求高的轨道,优先选择经过辐照验证的器件或采用三模冗余。
- 功耗预算按占空比分配。DRAM刷新和NVMe读写是持续功耗大户,Flash写入是脉冲功耗大户。应根据任务剖面计算各介质的工作占空比,避免峰值功耗叠加超过电源预算。
一个可落地的分层示例
假设某光学载荷前端以每秒200帧、每帧4MB输出原始数据,预处理后每帧压缩为512KB,任务记录需要保存最近30分钟的数据。可以按如下方式组织缓存层次:
L0 寄存器:帧同步字、行有效标志、DMA描述符指针
L1 SRAM:2MB,存放当前帧的预处理中间结果与系数表
L2 DRAM:512MB,双缓冲存放原始帧与压缩帧,供算法与记录模块共享
L3 NVMe:1TB,持久化压缩帧,按时间分区循环覆盖
L4 Flash:64GB,存放星务日志、参数表与关键事件快照
按此配置,L2 DRAM需要同时承受原始帧写入(200×4MB/s=800MB/s)和压缩帧写入(200×0.5MB/s=100MB/s),合计约900MB/s。若选用带宽为3.2GB/s的DRAM,余量约3.5倍,可覆盖突发。L3 NVMe的持续写入需求为100MB/s,选用写入带宽500MB/s以上的模块即可,但需确认其掉电保护电容能在断电后完成当前块写入。
介质选型的判断路径
下图给出从数据特征到介质选择的判断关系。它不替代具体计算,但可以帮助快速定位候选介质,避免在错误层级上反复权衡。
该判断路径的核心逻辑是:先看时延是否苛刻,再看容量是否超出片上存储,最后看是否需要掉电保持。实际工程中,三个判断往往需要同时满足,因此最终方案通常是多级组合,而不是单一介质。例如一帧数据可能先写入SRAM做流水线对齐,再搬入DRAM做帧缓冲,压缩后写入NVMe归档,同时把关键状态写入Flash日志。
选型时需要额外确认的工程项
除了带宽、容量、功耗、抗辐照和成本,还有几项容易在后期暴露问题:
- 擦写寿命与写放大。Flash和NVMe的寿命按P/E周期计算。若每天写入100GB、模块寿命为1DWPD(每日一次全盘写入),1TB模块约可支撑10年;若写入量翻倍,寿命减半。任务记录循环覆盖时,应计算实际写入量并留出余量。
- 刷新与巡检开销。DRAM刷新会占用带宽,EDAC巡检会占用CPU周期。高负载场景下,这部分开销可能达到5%~10%,需在带宽预算中扣除。
- 温度对保持时间的影响。Flash在高温下数据保持时间显著缩短,DRAM在低温下刷新需求变化。应根据载荷热控条件调整刷新率和巡检周期。
- 单粒子效应与恢复策略。SRAM和DRAM需配置ECC/EDAC,并明确纠错失败后的降级策略,例如丢弃当前帧、切换备份区或进入安全模式。
综合来看,面向任务载荷的缓存层次设计可以归纳为一句话:把最热的数据放在最快但最小的介质上,把最冷的数据放在最慢但最大的介质上,并确保每一层的持续带宽和可靠性都覆盖其上游的最坏情况。寄存器与SRAM承担时延敏感路径,DRAM承担容量与共享缓冲,NVMe与Flash承担持久化与归档。五类介质不是互相替代,而是按访问频率和生命周期形成互补的层次结构。