FlowMaster:SDN交换机上死流的早期驱逐策略解析
立即解锁
发布时间: 2025-08-18 00:26:57 阅读量: 2 订阅数: 17 

### FlowMaster:SDN 交换机上死流的早期驱逐策略解析
#### 1. 引言
在软件定义网络(SDN)中,流表的性能对网络整体性能有着至关重要的影响。但当前流表中存在大量死流条目,严重降低了流表的使用效率。本文将探讨如何通过有效的预测算法,减少流表中的死流条目,提高流表性能。
#### 2. 动机与背景
现代交换设备的流表采用硬件和软件两种内存系统,通常以分层方式组合使用。下图展示了交换设备转发引擎中内存子系统的逻辑结构:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(TCAM Memory<br>最高层):::process --> B(Output Arbiter):::process;
C(SRAM/DRAM<br>中间层):::process --> B;
D(Software Flow Tables<br>最低层):::process --> B;
B -->|Hit| E(Packet Editor):::process;
B -->|Miss| D;
```
在这个结构中,所有传入的数据包会在 SRAM 和 TCAM 内存系统中并行查找。若在最高层(TCAM)查找失败,会导致数周期的延迟;SRAM 查找失败会进一步增加约 5 倍的延迟;软件表查找失败则会调用交换机控制平面,产生数毫秒的延迟。
流表中并非所有条目都是活动的,从最后一次访问到从表中驱逐的这段时间(死时间),死流条目会占用宝贵的硬件资源。例如,一个由 40 台服务器组成的机架,每台服务器按中位数到达率和平均 35μs 生成请求,交换机每秒会有大约 1300 个新流条目。如果流表已满,一个存在 1 秒的死流可能会导致 1300 个流被丢弃。
为了分析流表性能,我们使用 OpenFlow 作为 SDN 的基线实现,并基于从大学收集的真实世界跟踪数据进行模拟。以下是本文使用的一些术语及其定义:
| 术语 | 定义 |
| ---- | ---- |
| 活动条目 | 尚未被最后一次引用的流条目 |
| 丢弃/废弃流 | 由于表空间不足而被丢弃的流条目 |
| 硬超时 | 硬超时值到期时,流将被驱逐 |
| 空闲超时 | 观察到的不活动时间导致流规则被驱逐(默认设置为 60 秒) |
| 唯一条目 | 数据包在流表中不存在现有条目时的情况 |
| 重访条目 | 流条目之前出现过,但因超时被驱逐 |
每个流在表中都与一个“超时”值相关联,SDN 中定义了“硬超时”和“空闲超时”两种类型。我们在模拟研究中考虑了 1 秒、30 秒和 60 秒三种空闲超时值。
以下是计算活动、唯一和丢弃流的算法:
```python
Require: PacketTrace , UniqueFlows =0; LiveFlows =0;
Ensure: flowTable[size]
List < Packets > packetList = getAllPackets(PacketTrace);
2: while packetList! = empty do
packet = packetList.pop()
4:
flowEntry = extractFlowEntry(packet)
if flowEntry in flowTable then
6:
if !IsPacketForFlowInRemainingTrace() then
LiveFlows = LiveFlows - 1;
8:
end if
else flowEntry NOT i
```
0
0
复制全文
相关推荐







