C COMPIN BLOG

COMPIN TECHNICAL NOTE

新手教材(8/13)|第八编:链路变差时的三级自主降档

从 RGB、Gray、Edge 的数据量出发,推导链路状态怎样触发节点本地真实格式转换与绕行。

本文是《从 IP 到 SRv6 计算编排》新手教材第 8/13 编。 总目录 · 上一篇:第七编:SPP、图像 Tile 与部分成功 · 下一篇:第九编:HEFT 全链联合编排

55. 三级降档不是链路丢包,也不是控制命令

当AF_XDP fabric报告本地出端当前可用速率下降时,节点可对符合业务契约的SPP图像执行 自主降档。它不是控制器命令,也不是前端控制。

这里的**Degradation(降档)**是业务表示变换:同一Tile从信息更多的RGB变成Gray或Edge, 以减少后续链路字节。它不同于:

  • connectivity drop:链路不通,包根本不能进入该边;
  • congestion drop:有限出口队列已满;
  • token wait:链路连通但包等待令牌;
  • BNN DROP:模型判断该Tile不是火焰候选;
  • 控制器重路由:控制面传播事实后节点重新计算FIB。

规则只读取包当前格式和即将使用的有向链路速率比例,不读取任务最终是否成功,也不 等待某个验收时刻。不同方向可以有不同队列和统计,因此A -> B的降档判断不能偷用 B -> A状态。

55.1 三种格式为什么恰好形成三级

一个16×16 Tile的当前payload大小为:

等级格式每像素信息Payload大小
0RGB24R、G、B各8 bit768 byte
1GRAY8一个8-bit亮度256 byte
2EDGE1一个二值边缘bit32 byte

RGB到Gray把payload缩小为三分之一;RGB到Edge缩小为二十四分之一。体积减少不是免费收益: Gray丢失颜色,Edge只保留二值结构。系统必须同时记录网络收益和业务信息损失。

55.2 当前阈值规则

当前阈值规则是:

current_rate/design_rate(当前速率/设计速率)目标格式
> 80%RGB24
> 40%且<= 80%GRAY8
<= 40%EDGE1

边界必须精确:等于80%进入Gray,等于40%进入Edge。若包已经是更低格式,只能保持或继续 下降,不能升级。

这里的current_rate是当前环境作用后的速率,design_rate是链路基线。假设设计速率 1 Mbit/s:

900 kbit/s -> 90% -> 保持RGB
800 kbit/s -> 80% -> 降为Gray
400 kbit/s -> 40% -> 降为Edge

格式等级只能单调增加,即信息只能保持或继续减少:

RGB -> Gray -> Edge
RGB -------> Edge
Gray ------> Edge

已经成为Gray的包后来走到高速链路也不会恢复RGB,因为丢失的颜色信息已经不存在。fabric 更不能凭空“升档”制造原始像素。

55.3 为什么XDP程序本身仍然不做降档

挂在宿主veth上的XDP/eBPF程序仍然只验证Ethernet目的MAC并redirect到按source索引的 AF_XDP socket。它不解析IPv6、SRH或SPP,也不运行Gray/Edge算法。

唯一受限例外位于AF_XDP用户态fabric。link worker已经拥有当前source -> destination 链路的rate与design rate,因而可以在发送边界:

  1. 验证Ethernet、outer IPv6、SRH、inner IPv6、UDP和SPP边界;
  2. 读取当前SPP format,计算是否需要更低等级;
  3. 只构造一次本地SRv6 detour(绕行);
  4. 把包回注source节点,让Linux和真实算子完成变换。

把最小解析放在用户态,不等于允许fabric直接处理图片。链路worker只决定“需要哪一级”, 实际pixel算法仍属于算子namespace。

55.4 本地算子detour怎样保持原路径

假设一个包正在节点17准备发往节点18,outer IPv6的当前active segment是S。链路要求 Gray时,fabric构造的逻辑执行顺序是:

Gray@node-17具体SID -> resume segment S -> 原有其余segment

实现必须保存当时真正的outer Destination Address,并在需要时移动当前uSID指令,形成 单调前进的SRH;不能回到最初静态列表猜当前位置。包被回注lfc017以后:

节点17 Linux命中本地Gray SID
→ End.X交给Gray namespace
→ Gray AF_XDP worker执行真实RGB24到GRAY8变换
→ 更新SPP format、payload length和UDP checksum
→ 回注并恢复resume segment S
→ 沿原物理路径继续到节点18

Edge同理。detour不改变原source、destination、task、object或Tile身份,也不保存另一套全网 路由;它只在当前节点插入一个已经存在的具体算子SID。

55.5 为什么每个网络节点都部署Gray和Edge

链路变差可能发生在任意一条有向边的source节点。如果只有少数节点具备Gray/Edge,其他 节点检测到降档需求时无法形成本地闭环。因此启用三级降档的场景把“每个网络节点都有本地 Gray和Edge”作为部署前提。

这是一条普适能力规则,不是按业务路径预先挑出几个正确节点。算子仍常驻运行,不能等包 到来再临时启动;其他五类算子继续按异构profile分布。

55.6 怎样证明一次降档真的完成

一次完整证据链至少包括:

AF_XDP观察到有向链路比例并决定target format
→ detour被构造并回注source节点
→ 本地Gray或Edge具体SID被执行
→ 算子记录输入/输出格式和同一task/object/tile
→ 包恢复原SRv6路径
→ 目的端收到相同身份且格式已降低的Tile

仅有前端显示Gray图、仅有fabric detour计数,或者仅有目的端某个GRAY8包,都不能单独证明 这条闭环。分析器必须按task身份区分三级降档业务与其他同样经过Gray/Edge的HEFT或Anycast 业务,避免把全局算子计数错误配对。

前端从真实事件显示RGB、Gray、Edge数量以及原图、中间图、目的图。它不能点击按钮触发 降档,也不能因为观察器失败而停止链路、算子或业务。

降档是业务行为。它可以降低带宽和增加信息损失,成功与否应由Tile格式、算子事件、目的端 接收和报告共同证明。

56. 第五至八编阶段自测

  1. 算子类型与实例有什么区别?
  2. fd42:3:14::100和fd42:7::100各表示什么?
  3. 为什么有状态算子的缓存键必须包含task、object和epoch?
  4. Morton码为6的示例坐标是什么?
  5. 100个Tile到达90个时,为什么不是任务0%?
  6. Anycast为什么可能让网络无丢包却产生不完整窗口?
  7. 三级降档为什么不能从EDGE1恢复到RGB24?

总目录 · 上一篇:第七编:SPP、图像 Tile 与部分成功 · 下一篇:第九编:HEFT 全链联合编排