Flow Size Prediction with Short Time Gaps
网络流量预测新突破:微秒级短流预测的可行性分析
在当今数据中心和云计算环境中,网络流量的精准预测是优化资源分配、实现智能负载均衡的关键。传统流量和预测聚焦于长时间间隔(如秒级或分钟级)的聚合流量,对于微秒到毫秒级的短流预测研究较少。本文提出了一种基于低级别事件特征的短流预测方法。
研究背景:为什么短流预测如此重要?
现代网络控制功能(如流量调度、拥塞避免)需要实时响应能力。例如,在流量控制中,若能提前预知下一个流的大小,可动态调整链路带宽分配,或者可将其分类为“大象流”或“小鼠流”,并分配不同优先级,避免链路出现流量过载等现象,短时间间隔(如微秒级)下的流动态变化极快,传统基于统计或深度学习的预测方法难以捕捉瞬时模式。
- 短流:时间间隔短(微秒级),数量多,常见于分布式计算任务(如Spark、PyTorch)
- 长流:时间间隔长(毫秒级),数量少,但流量大
秒级短流预测具体实现
数据收集器架构图如下,主要有三个模块组成,分别是Packet Traces、Polling Traces以及Event Traces。
数据收集器
- Packet Traces模块——流提取
采集方法:
PF_RING库(第三方的内核数据包捕获接口,类似于libpcap),该数据包捕获机制目标是降低内核协议栈开销,提高数据包处理性能,通过内核旁路方式直接获取网卡数据包,采用Zero Copy 机制 避免不必要的内存拷贝,核心架构由mmap、Polling以及Ring Buffer组成。核心如下:
- 应用调用mmap进行内存映射;
- 数据包到达网卡后,处理器以轮询的方式将数据包写到环形buffer;
- 应用调用read从环形buffer里面读数据包;
具体实现源码分析地址:深入理解PF_RING内核数据包捕获接口-CSDN博客
PF_RING库官方仓库地址:ntop/PF_RING: High-speed packet processing framework
采集的指标:
源地址 |
---|
目的地址 |
数据包大小 |
数据包到达时间 |
- Polling Traces模块–跟踪主机负载
采集方法:
定期轮询操作系统的/proc目录,该目录包括各种文件和目录,每个文件和目录提供有关系统资源利用的各个方面的信息,具体保存在/proc/[process_id]/stat文件。
采集指标:
主机可用内存 |
---|
进程占用的物理内存 |
进程内核态运行时间 |
- Event Traces模块
采集方法:
eBPF技术
采集指标:
挂载点选择tcp_sendmsg,指标是tcp_sendmsg触发次数
流量预测建模
流量采集
- 从数据包跟踪(packet trace)中提取流,每个数据包包含源 IP、源端口、目的 IP、目的端口、数据包大小和到达时间等信息。
- 按照源 IP+端口 和 目的 IP+端口对数据包进行分组,形成通信路径(例如,IpA:portA → IpB:portB)。
- 在同一条通信路径上,如果两个数据包之间的时间间隔大于设定的阈值,则认为属于不同的流。
- 该流提取过程会针对不同的流时间间隔重复进行,以确保数据集覆盖多种时间粒度。
特征提取
流量特征来自三类数据源,每种数据源采用不同的特征提取方法:
- 网络特征
- 通过聚合每个流中的数据包信息提取特征,例如:
- 网络输出流量(network-out):从工作负载执行开始到流开始前,发送到目标主机的所有数据包总大小。
- IP 和端口信息(src_ip、dest_ip、src_port、dest_port)。
- 流时间间隔(gap)(流与流之间的时间间隔)。
- 通过聚合每个流中的数据包信息提取特征,例如:
- 轮询数据特征
- 取流开始前最后一次采集到的系统状态值,例如:
- memavailable(主机上可用内存)。
- stime(工作负载进程的内核态运行时间)。
- rss_memory(进程使用的物理内存)。
- 取流开始前最后一次采集到的系统状态值,例如:
- 基于事件的特征
- 提取流开始前最近发生的事件信息:
- 最后一次事件的值(如某个系统事件的状态)。
- 事件到流开始的时间间隔(tt_featurename)。
- 提取流开始前最近发生的事件信息:
为了考虑历史流量对当前流量的影响,将前 K(K=5)个流的特征加入当前流的特征集中。额外加入历史流量大小作为特征,即前 t 个流量的大小。
流量预测任务有两种方式:
- 基于回归
- 预测下一个流的精确大小,属于回归问题,每个流的目标值是下一个流的大小。
- 基于分类
- 将流量分为小流和大流,形成二分类问题:
- 1 代表大流。
- 0 代表小流。
- 数据集中可能存在类别不均衡问题(例如,在 Spark 负载下,5000 微秒时间间隔内大流占 40%)。
- 将流量分为小流和大流,形成二分类问题:
模型算法——CatBoost算法
优势
(1)提供了相对较小的训练数据集的鲁棒结果,使其适用于数据收集时间较短的任务,也适用于低延迟环境(例如数据中心)。
(2)需要最小的模型优化和超参数调优。
(3)允许我们识别影响每个工作负载中生成的流大小的主机方面。
CatBoost原理部分:这次终于彻底理解了 CatBoost 原理及应用-CSDN博客
实验部分
在AWS环境中部署了3节点集群,分别运行Spark(EMR实例)和PyTorch(EC2 GPU实例)工作负载。通过PF_RING库捕获网络包元数据,eBPF跟踪系统调用事件(如send()
、malloc()
),并定期轮询/proc
目录获取主机状态。实验覆盖500–30000微秒的流时间间隔,结果显示:
- Spark SVM:扩展特征集使R²提升0.2,事件特征(如
tcpsendmsg
)占比超30%。 - PyTorch GPT:网络特征主导预测,MAPE低至2%,表明参数同步流量高度规律。
- 分类任务:直接分类模型F1分数(0.85)显著优于阈值回归方法(0.65)。
可取之处:
1、数据采集部分考虑的比较全面,多维度采集,解决单一数据源的局限性。考虑了影响网络流量的多种原因,覆盖了网络流量的全部生命周期:
(1)网络包追踪:直接捕获流量结果层面的信息(如包大小、时间间隔、IP/端口)。但是仅能反映“已发生”的流量行为,无法解释流量生成的原因(如主机资源状态、应用逻辑触发)。不足之处在于:若某流量突增,网络包数据只能显示流量大小和时间,但无法回答“为何突增”——是内存不足触发了数据落盘?还是某个函数调用触发了参数同步?
(2)轮询追踪:捕获系统资源状态(内存、CPU、磁盘I/O),反映主机负载对流量生成的间接影响。因为内存不足时会导致频繁换页,间接影响网络发送速率,高CPU利用率可能伴随计算密集型任务的通信需求增加。
(3)事件追踪(eBPF):选择流量生成的最后一步(数据即将发送到网络前调用),挂载**tcp_sendmsg
** 采集五元组信息,数据包大小、时间戳。
2、采用静态阈值法对流量进行分类:
- 大象流(Elephant Flows):若某一流在传输过程中占用的带宽超过当前链路总带宽的10%,则被标记为大象流。
- 小鼠流(Mice Flows):带宽占比小于或等于10%的流
流量带宽计算:
- 对于每个流,计算其总传输数据量(字节)和持续时间(微秒)。
- 带宽占用率公式:
带宽占比 = (流总大小(字节) × 8 ) / 链路带宽( b p s ) × 流持续时间(秒) 带宽占比=(流总大小(字节)×8)/链路带宽(bps)×流持续时间(秒) 带宽占比=(流总大小(字节)×8)/链路带宽(bps)×流持续时间(秒)