Skip to content

Latest commit

 

History

History
367 lines (277 loc) · 9.56 KB

File metadata and controls

367 lines (277 loc) · 9.56 KB

TSN Scheduler - 需求规格说明书

📋 文档概述

本文档详细定义了 OpenNeuro TSN (Time-Sensitive Networking) 调度器的功能需求、性能指标、约束条件和系统接口。

文档版本: v1.0
创建日期: 2026年1月20日
预计完成: 2026年2月16日


1. 功能需求

1.1 核心功能

F1: 流量分类与优先级管理

  • 需求: 支持对网络流量进行分类和优先级设置
  • 详细说明:
    • 支持 4-8 个优先级等级 (Priority 0-7)
    • 根据 802.1p CoS (Class of Service) 字段进行分类
    • 支持 VLAN 标签识别
    • 可为每个优先级定义带宽预留

验收标准:

✓ 能够对网络报文进行 0-7 优先级标记
✓ 同一优先级的报文在队列中保持顺序
✓ 带宽预留误差 < 5%

F2: 时间感知门控 (Time-Aware Gate Control)

  • 需求: 基于精确时间戳实现确定性的报文转发
  • 详细说明:
    • 使用 PTP 时间同步作为参考时钟
    • 配置时间表 (Schedule) 控制每个优先级的开闭
    • 周期性地开闭不同优先级的"门"
    • 支持 1ms ~ 1s 的调度周期

验收标准:

✓ 门控精度 < 100µs
✓ 漏包率 < 0.1%
✓ 支持多达 128 个调度事件/周期

F3: 确定性延迟保证

  • 需求: 为实时流量提供可预测的网络延迟
  • 详细说明:
    • 对不同优先级的报文承诺最大延迟时间
    • 高优先级 (RT 流): < 100µs
    • 中等优先级 (Control): < 1ms
    • 低优先级 (Best Effort): 尽力而为

验收标准:

✓ 99.99% 的报文满足延迟承诺
✓ 无超期报文被丢弃
✓ 带宽不超配

F4: Linux tc/taprio 驱动集成

  • 需求: 与 Linux 内核的标准 QoS 工具集成
  • 详细说明:
    • 通过 tc (traffic control) 命令配置调度
    • 支持 taprio qdisc (Time-Aware Priority Queuing)
    • 导出当前配置为可读格式
    • 支持热重载 (不中断现有流量)

验收标准:

✓ tc qdisc add 命令能成功配置调度
✓ 配置修改在 100ms 内生效
✓ 现有连接不中断

1.2 可选功能

F5: 硬件交换机支持

  • 需求: 与支持 TSN 的硬件交换机集成
  • 支持交换机: Marvell 88E6190X, Microchip, 等
  • 通过 IEEE 802.1Qbv 标准化接口配置

F6: Web 管理界面

  • 需求: 提供图形化的调度配置界面
  • 实时显示网络拓扑和流量
  • 调度表可视化
  • 性能监控仪表板

F7: 监测与诊断

  • 需求: 实时监测 TSN 调度的运行状态
  • 每个优先级的报文计数
  • 延迟直方图
  • 丢包统计
  • 拥塞告警

2. 性能需求

2.1 延迟性能

流量类型 最大延迟 抖动 (Jitter) 丢包率
实时控制 (Priority 7) <100µs <20µs <0.01%
视频流 (Priority 5-6) <1ms <100µs <0.1%
音频流 (Priority 4) <10ms <1ms <0.1%
最佳努力 (Priority 0-3) 无保证 无保证 <1%

2.2 吞吐量性能

  • 总吞吐量: 2 Gbps (对于双 Gigabit 接口)
  • 带宽可用性: 95% (5% 用于开销)
  • 每个优先级可配置独立带宽

2.3 扩展性

  • 支持优先级数: 4-8 个
  • 支持端口数: 2-4 个有线接口
  • 调度表大小: 最少 128 个事件/周期
  • 配置修改时间: <100ms (热重载)

2.4 可靠性

  • 运行时间: 支持连续运行 30+ 天无故障
  • 平均故障间隔 (MTBF): >10,000 小时
  • 故障自恢复: 配置缓存确保重启后恢复

3. 接口规范

3.1 网络接口

物理接口

  • 接口类型: Gigabit Ethernet (1000 Base-T)
  • 连接器: RJ-45
  • 协议: IEEE 802.3
  • 同步时钟: PTP (IEEE 1588 v2)

逻辑接口

  • MTU (Maximum Transmission Unit): 1500 字节
  • VLAN 支持: 802.1Q (带标签)
  • CoS 标签: 802.1p (3 bits)
  • 时间戳精度: ±10µs

3.2 配置接口

Linux tc 命令

# 添加 taprio 调度器
tc qdisc add dev eth0 parent root \
  taprio num_tc 4 map 0 1 2 3 \
  queues 1@0 1@1 1@2 1@3 \
  base-time 0 clockid CLOCK_TAI \
  sched-entry S 0f 100000000 \
  sched-entry S 0e 100000000 \
  sched-entry S 0c 100000000 \
  sched-entry S 00 100000000

# 查看当前配置
tc -d qdisc show dev eth0

# 删除调度器
tc qdisc del dev eth0 parent root

编程接口 (C/Python)

// C API
typedef struct {
    uint8_t  num_queues;           // 队列数量
    uint8_t  num_gates;            // 门控数量
    uint64_t base_time;            // 基准时间 (nanoseconds)
    uint64_t cycle_time;           // 周期时间
    struct {
        uint8_t  priority;         // 优先级
        uint32_t gate_mask;        // 开闭门控位掩码
        uint32_t duration;         // 时间段持续时间 (ns)
    } gates[128];
} tsn_config_t;

int tsn_configure(const char *ifname, const tsn_config_t *config);
int tsn_get_config(const char *ifname, tsn_config_t *config);
int tsn_apply_config(const char *ifname);

3.3 监测接口

// 查询流量统计
typedef struct {
    uint64_t packets_in;           // 入站报文数
    uint64_t packets_out;          // 出站报文数
    uint64_t bytes_in;             // 入站字节数
    uint64_t bytes_out;            // 出站字节数
    uint64_t packets_dropped;      // 丢弃的报文数
    uint32_t avg_latency_us;       // 平均延迟 (微秒)
    uint32_t max_latency_us;       // 最大延迟
    uint32_t min_latency_us;       // 最小延迟
} tsn_stats_t;

int tsn_get_stats(const char *ifname, uint8_t priority, 
                  tsn_stats_t *stats);

4. 约束条件

4.1 硬件约束

  • 最小支持平台: RK3588 或等效 ARM 处理器
  • 最小内存: 256MB RAM (运行时)
  • 网络接口: 至少 1 个 Gigabit Ethernet (建议 2 个)
  • 时钟精度: 支持 PTP 同步至 <10µs 精度

4.2 软件约束

  • 操作系统: Linux 5.15+
  • 内核支持: CONFIG_NET_SCHED_TAPRIO
  • PTP 同步: 需要 ptp4l 或等效服务运行
  • 依赖库: libnl, libnetlink

4.3 网络约束

  • 网络拓扑: 星形或环形
  • 网络设备: 支持 802.1Qbv 的交换机 (可选)
  • 时间同步精度: ±10µs (由 PTP 提供)

4.4 应用约束

  • 最大端口数: 4
  • 最大优先级数: 8
  • 调度周期: 1ms - 1s
  • 最多调度事件: 128 个/周期

5. 使用场景

场景 1: 机器人多轴协动

背景: 多臂机器人需要各轴电机在微秒级精度同步

需求:

  • 4 个实时控制流 (电机指令),延迟 <100µs
  • 1 个视频流 (视觉反馈),延迟 <10ms
  • 1 个管理流 (不需时间保证)

配置示例:

优先级 7: 电机控制 (100µs, 独占 200 Mbps)
优先级 6: 传感器反馈 (1ms, 独占 100 Mbps)
优先级 4: 视频流 (10ms, 独占 500 Mbps)
优先级 0: 最佳努力 (剩余 700 Mbps)

场景 2: 音视频编解码系统

需求:

  • 音频流:< 1ms 延迟,确定性
  • 视频流:< 33ms 延迟 (30fps)
  • 网络控制:<10ms 延迟

场景 3: 工业控制网络

需求:

  • EtherCAT 实时流:< 100µs
  • 传感器数据:< 10ms
  • 诊断和配置:最佳努力

6. 测试需求

6.1 功能测试

  • 流量分类的正确性
  • 优先级隔离 (高优先级不影响低优先级)
  • 带宽预留的准确性
  • 门控时序的精度

6.2 性能测试

  • 延迟分布测量 (使用 iPerf 或自定义工具)
  • 吞吐量测试 (最大承载能力)
  • 长期稳定性 (24h+ 连续运行)
  • 热重载性能 (配置修改时的影响)

6.3 可靠性测试

  • 网络抖动恢复能力
  • 时钟突变时的行为
  • 异常流量处理 (超配、爆发)

7. 文档要求

7.1 开发文档

  • 架构设计文档
  • API 参考手册
  • 算法设计说明 (调度算法、流量管理)
  • 代码注释 (>80% 覆盖率)

7.2 用户文档

  • 快速开始指南
  • 配置参考手册
  • 故障排除指南
  • 性能优化建议

7.3 测试文档

  • 测试计划
  • 测试用例集
  • 性能基准报告

8. 验收标准

需求 验收标准 状态
流量分类 支持 4+ 优先级,准确率 100% ✅ 计划
延迟性能 RT 流 <100µs,99.99% 满足 ✅ 计划
吞吐量 2 Gbps 95% 可用 ✅ 计划
Linux 集成 tc/taprio 命令完全支持 ✅ 计划
文档完整性 API 文档 + 用户手册 ✅ 计划
测试覆盖 单元测试 + 集成测试 + 性能测试 ✅ 计划

9. 开发里程碑

任务 交付物
W1-W2 需求分析 + 系统设计 本文档
W3-W4 需求评审 + 算法设计 算法说明文档
W5-W6 核心模块开发 流量分类 + 带宽管理
W7-W8 Linux 驱动集成 tc/taprio 接口
W9 硬件交换机支持 (可选) 交换机驱动
W10-W12 集成与测试 完整系统验证
W13-W15 性能优化与文档 最终文档 + 性能报告

10. 风险与缓解

风险 影响 概率 缓解措施
PTP 时钟漂移 延迟精度下降 改进 PTP 算法,增加同步频率
Linux 内核不支持 无法部署 升级内核或自定义驱动
网络抖动大 无法满足延迟承诺 使用高质量网络设备
流量突增 优先级隔离失效 实现流量整形和告警机制

下一步: 组织需求评审会议 (2026年1月27日),计划 2026年2月2日启动详细设计。

评审清单:

  • 需求的完整性和明确性
  • 性能指标的可达成性
  • 约束条件的合理性
  • 风险识别的充分性