Files
Inbox/系统基座文件/2/2.3/2.3.5 系统负载保护与热节流控制 (System Load Protection & Thermal Throttling).md
2025-12-11 07:24:36 +08:00

131 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
tags: []
date created: 星期五, 十一月 21日 2025, 3:15:00 下午
date modified: 星期一, 十一月 24日 2025, 4:31:51 下午
---
# 2.3.5 系统负载保护与热节流控制 (System Load Protection & Thermal Throttling)
## 一、 约束输入与对齐 (Constraints & Alignment)
基于变更后的架构目标,我们需对齐以下硬性约束:
1. **触发源单一性**:仅响应**物理传感器告警**(温度、功耗)。显控 UI 操作不再作为触发源。
2. **响应滞后性 (Hysteresis)**:热惯性是缓慢的。控制逻辑必须包含**迟滞Hysteresis**机制防止在阈值附近频繁切换导致系统震荡Flapping
3. **执行确定性**:节流动作必须是**确定性的降速**如每帧固定休眠而非不确定的丢包。丢包应由上游的背压机制Backpressure自然处理而不是由计算模块主动丢弃。
---
## 二、 权衡分析与选项呈现 (Trade-off Matrix)
### 议题 1降级执行策略 (Throttling Execution)
|**选项**|**A. 丢弃任务 (Task Dropping)**|**B. 动态降频 (DVFS / Clock Gating)**|**C. 软件占空比控制 (Software Duty Cycle) (推荐)**|
|---|---|---|---|
|**机制**|直接丢弃输入的 `DataContext`,不进行计算。|调用驱动 API (`ixsmi`) 强制降低 GPU 时钟频率。|在主处理循环中插入 `sleep()`,人为制造流水线气泡。|
|**热效应**|**极好**。GPU 完全空闲。|**好**。降低电压和频率。|**可控**。通过调整休眠时长精确控制负载率。|
|**副作用**|**数据断层**。破坏目标跟踪的连续性。|**依赖驱动**。智铠 SDK 可能未开放用户态调频接口,且响应慢。|**延迟增加**。但数据流保持连续,仅吞吐下降。|
|**适用性**|仅限 Level 3 (紧急停机)。|固件层保护(最后一道防线)。|**应用层首选**。通用、简单、不丢数据。|
### 议题 2控制回路设计 (Control Loop)
|**选项**|**A. 简单阈值 (Simple Threshold)**|**B. 迟滞比较器 (Hysteresis Comparator) (推荐)**|
|---|---|---|
|**机制**|>90°C 降速,<90°C 恢复。|>90°C 降速 (Trigger)<80°C 恢复 (Release)。|
|**稳定性**|****。会在 90°C 附近反复震荡导致风扇啸叫和电流波动。|****。确保系统冷却到安全区间后才恢复全速。|
---
## 三、 基线确立与实施规范
为了在极端工况下保护硬件同时维持最低限度的业务连续性我们确立 **C. 软件占空比控制** + **B. 迟滞比较器** 为基线
### 1. 交互协议基线 (Protocol)
定义一套闭环的保护协议
- **告警事件 (Alert)** - `MonitoringModule` 发布
- `SystemOverloadEvent { Type: THERMAL | POWER; Level: WARNING | CRITICAL; Value: float; }`
- _WARNING_: 接近阈值 85°C)。
- _CRITICAL_: 超过阈值 95°C)。
- **指令事件 (Command)** - `ResourceCoordinator` 发布
- `SetComputeThrottleEvent { ThrottleLevel level; TraceID trace_id; }`
### 2. 节流分级定义 (Throttle Levels)
|**等级**|**定义 (Level)**|**行为规范 (Behavior)**|**目标负载 (GPU Usage)**|**触发场景**|
|---|---|---|---|---|
|**L0**|**NO_THROTTLE**|全速运行无额外休眠。|100% (Max)|温度 < 80°C|
|**L1**|**LIGHT**|每帧处理后休眠 **5ms**。|~80%|80°C < 温度 < 90°C|
|**L2**|**HEAVY**|每帧处理后休眠 **20ms**。|~50%|温度 > 90°C|
|**L3**|**SUSPEND**|**暂停计算**。停止从队列取数据(触发背压)。|0% (Idle)|温度 > 95°C (濒临宕机)|
### 3. 迟滞控制逻辑 (Hysteresis Logic)
- **位置**`TaskScheduler` 中的 `ResourceCoordinator` 组件。
- **逻辑**
```cpp
// 伪代码:迟滞状态机
void onTemperatureUpdate(float temp) {
static State state = NORMAL;
switch (state) {
case NORMAL:
if (temp > 90.0) { state = THRORRLE_L2; publish(LEVEL_2); }
else if (temp > 85.0) { state = THRORRLE_L1; publish(LEVEL_1); }
break;
case THRORRLE_L1:
if (temp > 90.0) { state = THRORRLE_L2; publish(LEVEL_2); }
else if (temp < 75.0) { state = NORMAL; publish(LEVEL_0); } // 迟滞回落
break;
case THRORRLE_L2:
if (temp < 80.0) { state = THRORRLE_L1; publish(LEVEL_1); } // 迟滞回落
break;
}
}
```
### 4. 模块侧实现规范
- **组件**:在 `SignalProcessor` 中新增 `ThrottleController` 类。
- **侵入点**`ExecutionEngine` 的主循环末尾。
- **实现**
```cpp
void ExecutionEngine::run() {
while (running_) {
// 1. 获取数据 & 2. 提交计算 (…原逻辑…)
// 3. 节流控制点 (新增)
throttle_controller_.applyDelay();
}
}
void ThrottleController::applyDelay() {
// 读取原子变量,避免锁竞争
auto level = current_level_.load(std::memory_order_relaxed);
if (level == L1) std::this_thread::sleep_for(5ms);
else if (level == L2) std::this_thread::sleep_for(20ms);
else if (level == L3) std::this_thread::sleep_for(100ms); // 轮询等待
}
```
---
## 总结与下一步行动
我们确立了 **2.3.5 系统负载保护** 的基线:
1. **机制****软件级休眠 (Duty Cycle)**,牺牲延迟换取降温。
2. **策略****四级节流 + 迟滞控制**,防止系统震荡。
3. **触发**:仅限 **物理过载**
下一步建议:
控制面的“指挥”和“保护”都做好了。现在我们要解决最具挑战性的“动态调整”问题 —— 2.3.6 两阶段配置热更新协议。
比如,如何在雷达正在运转时,安全地把 CFAR 检测阈值从 15dB 改为 13dB或者切换波束扫描策略而不需要重启整个进程这需要一套严密的事务协议。
**提问**:您是否确认 **“四级节流 + 迟滞控制”** 的保护基线?确认后我们将深入 2.3.6。