1、背景
BCM 11AC AP加入了脱机下载功能,为了不影响用户上网的体验,同时又兼顾了下载的性能,有必要在开启脱机下载时,对下载的速度进行限制,从而实现智能上网。
2、方案
方案一:限速但不停止下载
通过一段时间里的下载峰值来判断用户当前带宽,根据带宽来确定限速的大小。比如当判断用户的带宽为1M时,每个任务的下载的最大速度设为10k,3个任务最高可达到30k。
方案二:忙时停止下载,闲时恢复下载
每隔一段时间检测一次,当有用户浏览网页时,停止下载;当没有用户浏览网页时恢复下载。
经过探讨,决定采用方案一。这样既不会影响用户的体验,又不影响下载的性能。
3、实现
智能上网主要是为了保证在开启脱机下载时,不影响用户的上网体验:忙时进行相应的限速,闲时恢复全速下载。实现智能上网主要有如下三点:
1)带宽的估算
估算带宽是要确定将速度大小限制为多少。
带宽的估算是通过脱机下载所能达到的最高速度来实现的,也就是说这里的带宽就是下载速度的峰值。峰值的获取是每5分钟读取当前所有下载任务的速度,并累加所得到的速度,速度之和就是峰值。由于下载速度波动较大,所以在更新峰值前,会判断当前峰值和上一峰值之差的绝对值是不是大于等于125(KB/S),也即相差1M的带宽,只有满足这个条件才会,更新峰值。
起初峰值默认为500KB/S,即默认用户的带宽为4M。
2)忙与闲的判断
忙与闲是通过统计WAN到LAN数据包的多少来判断的。每两分钟统计一次
数据包统计方法如下:
A、读取vlan1 的RX,这个数据代表所有有线WAN到LAN的数据包,但不包含走加速的数据包;
B、读取eth1、eth2的RX,这两个数据代表所有无线WAN到LAN的数据包,但不包含走加速的数据包;
C、计算加速表中所有条目的数据包,但要排除AP直接与外网交互的数据包,即非转发的数据包。这里是要排除含有AP WAN口地址的条目。
公式为:
两分钟内收到的数据包= 这次所有统计接口收到的数据包- 上次所有统计接口收到的数据包+ 目前加速器加速表中的数据包。
限速的等级如下:
将两分钟内的收到的包数目和速度的对应关系修改为:
Packets:两分钟内收到的数据包
Limit_speed:限速
A、Packets >= 30000, Limit_speed=1/6
B、Packets >= 10000, Limit_speed=1/4
C、Packets >= 5000, Limit_speed=1/3
D、Packets >= 600, Limit_speed=2/3
3)限速的实现
transmission、wget的限速可以在开始任务时,加入限速的参数实现。这样要更改下载的速度时,只能先停止当前的任务,然后加入限速的速率重新启动任务。
流程图如下