3. 星载缓存管理基础

星载数据压缩系统面对的不是“随时可写、容量无限”的理想存储,而是“写入速率受载荷节拍约束、读出速率受下行窗口约束、存储介质有擦写寿命”的受限环境。缓存管理要解决的核心矛盾是:压缩与打包产生的数据速率是波动的,而下行链路只在过境窗口内可用,二者在时间上不匹配。缓存就是用来吸收这种时间错配的中间层。

缓存到底解决什么问题

以一台推扫式高光谱相机为例,假设其原始数据率为 320 Mbps,压缩比约 4:1,压缩后约 80 Mbps。若星地链路在单圈内只有 8 分钟可用,下行速率 100 Mbps,则单圈可下传约 6 GB。而相机在轨工作 90 分钟可产生约 54 GB 压缩数据。显然,数据产生远快于下传,必须先把数据写入星载存储器,再在下行窗口内按序读出。缓存的作用可归纳为三点:

  • 速率匹配:把突发式、高瞬时速率的数据流平滑为适合下行链路的稳定流。
  • 时间解耦:把“产生时刻”和“下传时刻”分离,允许在无链路时持续采集。
  • 优先级调度:在多载荷、多任务竞争时,决定哪些数据先写、哪些先下传、哪些可覆盖。

分级存储结构

星载存储通常不是单一介质,而是按速度、容量、寿命和可靠性分层。典型结构如下:

层级典型介质容量量级访问速度主要作用
L0 寄存器/片内 RAMSRAM/寄存器KB~MBns 级压缩流水线行缓存、FIFO 弹性缓冲
L1 高速缓存SRAM/SDRAMMB~百 MB十 ns 级压缩块暂存、DMA 搬运缓冲
L2 主存储NAND Flash / MRAMGB~TBμs~ms 级压缩数据长期驻留、按文件管理
L3 下行缓冲双端口 RAM / 队列MB 级ns~μs 级码率整形、帧封装、链路速率适配

分级的本质是“用速度换容量、用容量换时间”。L0/L1 负责吸收压缩算法内部的瞬时抖动,L2 负责跨圈次的数据驻留,L3 负责把数据以恒定码率推给发射机。若把 L2 直接接到下行链路,NAND 的页读取延迟和坏块管理会引入不可预测的停顿,导致下行帧断裂。

星载分级缓存与读写调度关系 载荷采集 320 Mbps 原始 L0 行缓存 FIFO 弹性缓冲 L1 压缩块缓存 SDRAM 暂存 L2 主存储 NAND Flash 文件区 L3 下行缓冲 码率整形 发射机 100 Mbps 读写调度器 写优先:压缩块满 → 触发 DMA 写入 L2 读优先:下行窗口开启 → 按文件序号预取至 L3 寿命约束 NAND 擦写次数 ≈ 10⁵ 次/块 磨损均衡:逻辑块轮转映射 坏块管理:预留 5% 备用块 写放大控制:顺序写、大块写 命中率与预取 命中率 = 命中次数 / 总访问次数 预取深度:2~4 个文件块 替换策略:优先级 + 最早过期 目标:下行缓冲不空、不溢出 关键判断指标 写入带宽 ≥ 压缩输出速率 读出带宽 ≥ 下行链路速率 剩余寿命 ≥ 任务总写入量 缓冲占用率维持在 30%~70%

读写调度:写优先还是读优先

缓存调度不是简单的“先来先服务”。星载场景下,写入来自载荷,具有硬实时性——如果 L0/L1 被写满而无法及时落盘,压缩流水线就会阻塞,导致丢帧。读出则受下行窗口约束,窗口一旦开启,必须保证有数据可发。因此调度策略通常是“写优先、读预取”:

  1. 写路径:压缩块在 L1 中按固定大小(例如 64 KB)聚合,达到阈值后由 DMA 以顺序大块方式写入 L2。顺序写可减少 NAND 页编程次数,降低写放大。
  2. 读路径:根据轨道预报,在下行窗口开启前 30~60 秒,调度器按文件优先级把待下传数据从 L2 预取到 L3。预取深度通常取 2~4 个文件块,既能掩盖 NAND 读取延迟,又不会占满 L3。
  3. 冲突处理:当读写同时请求 L2 时,写请求优先获得总线,但读预取可提前完成,因此实际冲突概率较低。若 L3 水位低于 20%,则提升读优先级,防止下行断流。

命中率与寿命约束的量化关系

命中率在这里不是 CPU 缓存意义上的“命中”,而是指下行窗口内“所需数据已在 L3 中”的比例。设单圈下行窗口需要下传 N 个文件块,预取命中 H 个,则命中率 P = H / N。若 P 低于约 0.95,下行链路就会出现等待 NAND 读取的空隙,等效降低链路利用率。提高命中率的手段包括:增大预取深度、按优先级排序文件、在下行前完成碎片整理。

寿命约束则从另一侧限制缓存策略。以某型 NAND Flash 为例,单块擦写寿命约 105 次,总可用块数 4096,预留 5% 备用块。若任务周期内总写入量为 2 TB,块大小为 4 MB,则总擦写次数约为 2 TB / 4 MB = 5×105 次,平均每块约 122 次,远低于寿命上限。但如果调度不当,例如反复改写同一逻辑块,局部擦写次数可能迅速逼近上限。因此必须配合磨损均衡,把逻辑地址轮转映射到物理块。

工程判断示例:假设压缩输出 80 Mbps,L2 写入带宽实测 120 Mbps,下行链路 100 Mbps,L3 容量 256 MB。若预取深度为 3 个 64 MB 文件块,则 L3 占用约 192 MB,水位 75%,处于安全区间。若预取深度增至 5,L3 占用将超过容量,导致预取失败。因此预取深度必须与 L3 容量、文件块大小联合确定。

一个可执行的缓存参数检查清单

在任务设计阶段,可用以下清单快速核对缓存配置是否自洽:

检查项判断条件不满足时的调整方向
写入带宽L2 顺序写带宽 ≥ 压缩输出峰值速率 × 1.2增大 L1 聚合块、改用多通道 NAND
读出带宽L2 读带宽 ≥ 下行链路速率 × 1.1提高预取深度、使用双缓冲
L3 水位预取数据量 ≤ L3 容量 × 0.8减小预取深度或增大 L3
寿命余量任务总写入量 / 总块数 ≤ 单块寿命 × 0.5启用磨损均衡、减少无效改写
命中率下行窗口内命中率 ≥ 0.95优化文件排序、提前预取

缓存管理的最终目标不是“把数据存下来”,而是在写入实时性、读出连续性、介质寿命和容量成本之间取得平衡。理解分级结构、调度优先级和量化约束,才能在压缩比、存储容量和下行窗口之间做出可验证的设计选择。