电子方案开发供应链平台
一键发布任务
获取验证码
返回

发布成功


赞赏作者

赞赏金额:

  • ¥2
  • ¥5
  • ¥10
  • ¥50
  • ¥100
  • ¥200

支付金额:5

支付方式:

微信支付

赞赏成功!
你的赞赏是对作者最大的肯定~?

当前位置 : 首页 > 方案讯 > 方案讯详情
解决无线动态带宽分配问题的技巧——工程师原创应用笔记
发布时间:2020-09-11 阅读量:7403 来源:我爱方案网 作者:我爱方案网

【编者按】Wsqos (wireless smart QoS) 是在解决无线路由器带宽分配问题时,编写的一个用户空间实现QoS的Daemon程序。它伴随WiFi客户端的连接与断开动作,动态的调整TC规则,以达到对WiFi客户端下行速率限制功能。wsqos运行过程中生成的tc规则可以通过tc命令查看。本文将描述性的内容分享给大家,旨在提供一个解决无线带宽分配的思路。


原理:


Wsqos 启动一个基于HTB算法的qdisc队列,一个最大限速为300Mpbs的根类(这个值可以通过命令选项配置)。之后,每有一个wifi客户连接进来,就会为其分配一个子类(class)和一个过滤器(filter)。过滤器以wifi客户的mac地址与数据包目标mac地址匹配,并将匹配的数据包送到属于该客户的htb限速队列中(由class子类定义)。


每个客户的htb子类都在最大限速的根类下面,所以,每个客户之间可以借用带宽。如果不允许借用带宽,可以使用-s 0选项。


编译:


1. 把wsqos包放到package下;make menuconfig选取上;

2. make kernel_menuconfig 确保

 Networking support ==> Networking options  ==> QoS and/or fair queueing ==> <*> Hierarchical Token Bucket (HTB)  以及  <*>   Universal 32bit comparisons w/ hashing (U32) 两项选中。


运行:


暂时没有提供自动启动脚本。系统启动后,在命令行下运行

# wsqos &

缺省无线最大速率是300Mbps,可以通过 -r 选项设定,-r 选项的单位是Mbps。比如 wsqos -r 200 &假定最大无线速率为200Mbps,之后每有一个客户链接进来,都会以这个值为基数,平分带宽。

使用 # tc class show dev ra0 命令来查看为每个客户设地的htb子类速率配置。


测试要点:


1. 设置两个以上wifi客户进行下载操作。看速率是不是理论要求的值,这几个客户应该是平分带宽。

2. 在有客户在下载的情况下,用手机等设备连接,断开操作,观察下载客户的速率变化。

3. 测试是否存在客户连接进来,但没有影响速率的情况;以及客户断开,但没有影响速率的情况。

4. 如果有条件,看系统能承受多少个连接。主要关注很多用户连接进来时,能否为每个用户正确分配htb class和filter.

使用tc class show dev ra0 来查看分配的子类数;htb子类数量应该与连接进来的客户数量一致;

使用tc filter show dev ra0 来查看分配的过滤器;过滤器的数量应该与连接进来的客户数量一致。

 

 

tc qdisc add dev ra0 root handle 1: htb

tc class add dev ra0 parent 1: classid 1:1 htb rate 37Mbps ceil 37Mbps

tc class add dev ra0 parent 1:1 classid 1:10 htb rate 30kbps ceil 100kbps

 

tc filter add dev ra0 protocol ip parent 1:0 prio 5 u32 match u16 0x0800 0xffff at -2 match u32 0x4E983FE7 0xffffffff at -12 match u16 0x9000 0xffff at -14 flowid 1:10

tc filter add dev ra0 protocol ip parent 1:0 prio 5 u32 match u16 0x0800 0xffff at -2 match u32 0x4E983FE7 0xffffffff at -12 match u16 0x9001 0xffff at -14 flowid 1:10

tc filter del dev ra0 protocol ip parent 1:0 prio 5 u32 match u16 0x0800 0xffff at -2 match u32 0x4E983FE7 0xffffffff at -12 match u16 0x9001 0xffff at -14 flowid 1:10

 

 

filter parent 1: protocol ip pref 49152 u32

filter parent 1: protocol ip pref 49152 u32 fh 800: ht divisor 1

filter parent 1: protocol ip pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:a

  match 00000800/0000ffff at -4

  match 4e983fe7/ffffffff at -12

  match 00009000/0000ffff at -16

 

filter parent 1: protocol ip pref 5 u32

filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1

filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10

  match 00000800/0000ffff at -4

  match 4e983fe7/ffffffff at -12

  match 00009000/0000ffff at -16

 


作者:CloudWSN,具有多年嵌入式Linux开发经验,早前是从写Unix驱动开始的。先后做过的典型项目包括PCI加密卡驱动和银行对接系统、大屏拼接墙控制器开发、嵌入式处理器BSP板级支持包开发、POS机开发、DVR/DVS,IP Camera开发、酒店智能化房控系统开发、SNAP(安全网关)开发、无线路由器开发(包括硬件)、工业级数据网关开发(包括硬件)、智能PDU固件开发。我在方案网的店铺名是“OpenWRT开发”,有项目开发需求的雇主欢迎联系我!


文章评论

您需要登录才可以对文章进行评论。

没有账号?立即注册

最新活动
意见反馈
取消