3. 星载缓存管理基础
星载数据压缩系统面对的不是“随时可写、容量无限”的理想存储,而是“写入速率受载荷节拍约束、读出速率受下行窗口约束、存储介质有擦写寿命”的受限环境。缓存管理要解决的核心矛盾是:压缩与打包产生的数据速率是波动的,而下行链路只在过境窗口内可用,二者在时间上不匹配。缓存就是用来吸收这种时间错配的中间层。
缓存到底解决什么问题
以一台推扫式高光谱相机为例,假设其原始数据率为 320 Mbps,压缩比约 4:1,压缩后约 80 Mbps。若星地链路在单圈内只有 8 分钟可用,下行速率 100 Mbps,则单圈可下传约 6 GB。而相机在轨工作 90 分钟可产生约 54 GB 压缩数据。显然,数据产生远快于下传,必须先把数据写入星载存储器,再在下行窗口内按序读出。缓存的作用可归纳为三点:
- 速率匹配:把突发式、高瞬时速率的数据流平滑为适合下行链路的稳定流。
- 时间解耦:把“产生时刻”和“下传时刻”分离,允许在无链路时持续采集。
- 优先级调度:在多载荷、多任务竞争时,决定哪些数据先写、哪些先下传、哪些可覆盖。
分级存储结构
星载存储通常不是单一介质,而是按速度、容量、寿命和可靠性分层。典型结构如下:
| 层级 | 典型介质 | 容量量级 | 访问速度 | 主要作用 |
|---|---|---|---|---|
| L0 寄存器/片内 RAM | SRAM/寄存器 | KB~MB | ns 级 | 压缩流水线行缓存、FIFO 弹性缓冲 |
| L1 高速缓存 | SRAM/SDRAM | MB~百 MB | 十 ns 级 | 压缩块暂存、DMA 搬运缓冲 |
| L2 主存储 | NAND Flash / MRAM | GB~TB | μs~ms 级 | 压缩数据长期驻留、按文件管理 |
| L3 下行缓冲 | 双端口 RAM / 队列 | MB 级 | ns~μs 级 | 码率整形、帧封装、链路速率适配 |
分级的本质是“用速度换容量、用容量换时间”。L0/L1 负责吸收压缩算法内部的瞬时抖动,L2 负责跨圈次的数据驻留,L3 负责把数据以恒定码率推给发射机。若把 L2 直接接到下行链路,NAND 的页读取延迟和坏块管理会引入不可预测的停顿,导致下行帧断裂。
读写调度:写优先还是读优先
缓存调度不是简单的“先来先服务”。星载场景下,写入来自载荷,具有硬实时性——如果 L0/L1 被写满而无法及时落盘,压缩流水线就会阻塞,导致丢帧。读出则受下行窗口约束,窗口一旦开启,必须保证有数据可发。因此调度策略通常是“写优先、读预取”:
- 写路径:压缩块在 L1 中按固定大小(例如 64 KB)聚合,达到阈值后由 DMA 以顺序大块方式写入 L2。顺序写可减少 NAND 页编程次数,降低写放大。
- 读路径:根据轨道预报,在下行窗口开启前 30~60 秒,调度器按文件优先级把待下传数据从 L2 预取到 L3。预取深度通常取 2~4 个文件块,既能掩盖 NAND 读取延迟,又不会占满 L3。
- 冲突处理:当读写同时请求 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 次,远低于寿命上限。但如果调度不当,例如反复改写同一逻辑块,局部擦写次数可能迅速逼近上限。因此必须配合磨损均衡,把逻辑地址轮转映射到物理块。
一个可执行的缓存参数检查清单
在任务设计阶段,可用以下清单快速核对缓存配置是否自洽:
| 检查项 | 判断条件 | 不满足时的调整方向 |
|---|---|---|
| 写入带宽 | L2 顺序写带宽 ≥ 压缩输出峰值速率 × 1.2 | 增大 L1 聚合块、改用多通道 NAND |
| 读出带宽 | L2 读带宽 ≥ 下行链路速率 × 1.1 | 提高预取深度、使用双缓冲 |
| L3 水位 | 预取数据量 ≤ L3 容量 × 0.8 | 减小预取深度或增大 L3 |
| 寿命余量 | 任务总写入量 / 总块数 ≤ 单块寿命 × 0.5 | 启用磨损均衡、减少无效改写 |
| 命中率 | 下行窗口内命中率 ≥ 0.95 | 优化文件排序、提前预取 |
缓存管理的最终目标不是“把数据存下来”,而是在写入实时性、读出连续性、介质寿命和容量成本之间取得平衡。理解分级结构、调度优先级和量化约束,才能在压缩比、存储容量和下行窗口之间做出可验证的设计选择。