当前位置: 首页 > news >正文

Libra论文阅读笔记-A unified congestion control framework for diverse application

目录

  • 一、Overview
  • 二、问题背景
  • 三、Libra方案overview
  • 四、Libra方案设计
  • 五、RL-based CCA算法
  • 总结


论文题目:《A unified congestion control framework for diverse application preferences and network conditions》
CoNEXT’21


一、Overview

目前的拥塞控制算法(CCAs)可以分为传统(classic) 拥塞控制算法和基于学习(learning-based) 的拥塞控制算法。
传统的拥塞控制算法的设计理念都是指定特殊的现象对应特殊的规则,即hard-wired mapping。而基于学习的拥塞控制算法具有更好的适应性(Adaptability)灵活性(Flexibility),但实用性(Practicality) 较差。

特性classiclearning-based
Adaptability
Flexibility
Practicality

本文提出Libra拥塞控制框架,希望集classic和learning-based的优点于一身。

二、问题背景

下面围绕三个特性进行讨论:适应性(Adaptability)灵活性(Flexibility),但实用性(Practicality)

  • Limitation on adaptation
    将不同的CCA算法在Wired和LTE网络下测试——现有的CCA无法适应不同的网络环境。(这其实是通病,没有任何一个算法可以在所有情况下达到最好,都是一个trade-off)

  • Limitation on flexibility
    Classic算法无法应对不同的性能偏好做出调整(the hardwired mapping between predefined events and actions makes the classic CCAs hard to be tuned)

  • Limitation on practicality
    目前除了PCC应该还没有其他的learning-based的算法被部署到实际系统上,特别是这些基于DL和RL的。并且已经部署测试的PCC,效果也并不是很好。

三、Libra方案overview

Libra使用了类似与PCC的utility function来描述不同发送速率对应的网络性能。
Libra包括三个阶段:探索阶段exploration stage、评估阶段evaluation stage、利用阶段exploitation stage
在这里插入图片描述
三个阶段循环周期执行,其中winner sending rate,即绿线,是来自于上一个循环的决策速率。
其中红色、紫色、绿色线分别代表classic sending rate、learning-based sending rate以及上一轮的winner sending rate。
实线代表的是目前Libra应用的速率。在第一个阶段探测阶段中,使用的是classic sending rate。

执行流程:Libra会在上一轮循环中,得到一个winner速率,在exploration stage阶段下,classic方案以该速率作为基础,得到classic sending rate,并且以该速率作为该阶段的发送速率。(同时在该阶段下,会得到classic和learning-based两种方案的发送速率)
在evaluation stage下,逐一评估这两种速率的utility。在最后的exploitation stage,使用上一轮的winner sending rate,同时接收evaluation stage发送的包。在这一阶段中,得到classic和learning-based两个速率对应的utility,决策出一个winner sending rate作下一轮循环使用。

对于没收到ACK的处理方案:
在exploration stage没收到ACK时,保持learning-based的发送速率,并跳过相应的action。如果在其他stage没收到ACK,则直接使用当前的winner sending rate接着进入下个循环。

四、Libra方案设计

  • Exploration Stage
    在该阶段下,从速率 x p r e v x_{prev} xprev开始,classic CCA会在每个ACK时,改变速率;同时收集网络性能的统计数据,用于learning-based CCA的训练。(兼顾classic探测网络环境比较快,learning-based探测网络环境比较准的特点)

但何时退出该阶段呢?
在这里插入图片描述
由该图可以看到,当两种情况发送时,切换到下一阶段。
1.当两个候选速率的差值超过一个阈值时,切换。
∣ x c l − x r l ∣ ≥ t h 1 |x_{cl}-x_{rl}|\geq th_1 xclxrlth1
2.当持续的时间超过设计值时,切换。
t 1 − t 0 ≥ t h 2 t_1-t_0\geq th_2 t1t0th2

  • Evaluation Stage
    在该阶段下,不再计算classic和learning-based速率,减少了一部分计算开销。测试上一阶段得到的两个候选速率对应的utility function, u ( x c l ) u(x_{cl}) u(xcl) u ( x r l ) u(x_{rl}) u(xrl)——这两个要在下一个阶段才能计算出来。paper中指出,可以在这个阶段得到 u ( x p r e v ) u(x_{prev}) u(xprev),但在上一个阶段中,使用的是classic sending rate,好像是算不出来吧(都没有用这个 x p r e v x_{prev} xprev速率传输)。这里表示疑问?

这里对于评估速率的顺序有一点讲究!
先说结论:lower rate first。即先测试低的速率,减少副作用。
在这里插入图片描述
看第一个图,假设 x c l > x r l x_{cl}>x_{rl} xcl>xrl,先测试大的速率,会带来buffer累积,影响后面速率的测试,在这种测试顺序下, u ( x c l ) > u ( x r l ) u(x_{cl})>u(x_{rl}) u(xcl)>u(xrl),但实际上是 x r l x_{rl} xrl更好。后面的情况类似,因此lower rate first。

  • Exploitation Stage
    使用速率 x p r e v x_{prev} xprev进行传输。并等待ACK,计算 u ( x c l ) u(x_{cl}) u(xcl) u ( x r l ) u(x_{rl}) u(xrl)
    其中utility function沿用了PCC的:
    u ( x i ) = α ⋅ x i t − β ⋅ x i ⋅ max ⁡ { 0 , d ( R T T i ) d t } − γ ⋅ x i ⋅ L u\left(x_i\right)=\alpha \cdot x_i^t-\beta \cdot x_i \cdot \max \left\{0, \frac{d\left(R T T_i\right)}{d t}\right\}-\gamma \cdot x_i \cdot L u(xi)=αxitβximax{0,dtd(RTTi)}γxiL

算法:
在这里插入图片描述
这里基本就是把前面的三个流程程序化写出来。

五、RL-based CCA算法

这里介绍的是上面算法里面第6行的DRL_based CCA。
作者通过比较多的对比实验,去看各种状态空间和动作空间对结果Reward和收敛性的影响,自行设计了状态空间和动作空间。
状态空间:
在这里插入图片描述
这是paper里总结出来的目前的状态空间。 作者提到模拟退火来辅助产生baseline状态空间,具体操作没详细描述,这里实验设计并不是很清晰。
在这里插入图片描述
动作空间:
AIAD or MIMD
在这里插入图片描述

Reward Function
两个observation:
1.奖励函数还是要考虑loss rate,不然在高延迟下,容易引起高丢包率。
在这里插入图片描述

2.选择 r r r还是 Δ r \Delta r Δr作为奖励函数:
在这里插入图片描述
Δ r \Delta r Δr更好。这里的reward function和前面的utility function并不一样。
在这里插入图片描述

总结

这个混合传统算法和learning算法的框架挺有趣的,并具备了在线评估的特点,但文章代码无开源,有些具体的细节还是不太理解。文章中仍然用到了DRL的内容,这块不是很熟悉,对于如何设计状态空间和动作空间的实验不太清楚。
文章提出的这种结合的框架,还是挺新颖的。

相关文章:

  • Python代码优化工具——memory_profiler
  • LeetCode220831_92、滑动窗口最大值
  • 哈希碰撞概率计算
  • 2021年超全中高级Java工程师面试题+答案
  • 阿里新产MySQL性能优化实践笔记,GitHub已获千万推荐
  • yolov5篇---官方ultralytics / yolov5代码复现,训练自己的数据集
  • avalanche 配置dns解析域名
  • 【Wordpress】wordpress根据需要DIY配置(更新中)
  • 遥感影像分类任务的复现
  • springboot+vue实现登录案例(附VUE整个项目代码)
  • 如何使用LOTO示波器 绘制 频率响应特性曲线?
  • 智能科学与技术——介绍概要
  • Controller设计--Kafka从入门到精通(十五)
  • 数据结构之查找和排序
  • CREO:CREO软件之工程图界面的【创建】、【布局】、【表】、【注释】的简介(图文教程)之详细攻略
  • (三)从jvm层面了解线程的启动和停止
  • Angular 2 DI - IoC DI - 1
  • JavaScript异步流程控制的前世今生
  • Java编程基础24——递归练习
  • js对象的深浅拷贝
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Python - 闭包Closure
  • Twitter赢在开放,三年创造奇迹
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 两列自适应布局方案整理
  • 双管齐下,VMware的容器新战略
  • #《AI中文版》V3 第 1 章 概述
  • $.ajax()方法详解
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三分钟)速览传统边缘检测算子
  • (算法)N皇后问题
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET 事件模型教程(二)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net开发引用程序集提示没有强名称的解决办法
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .pyc文件是什么?
  • /proc/vmstat 详解
  • @Autowired注解的实现原理
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [Android学习笔记]ScrollView的使用
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [c]统计数字
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [dart学习]第四篇:函数
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [Git 1]基本操作与协同开发
  • [leetcode] Balanced Binary Tree
  • [LeetCode周赛复盘] 第 312 场周赛20220925
  • [na]wireshark抓包排错-tcp.flags.reset