解决无线动态带宽分配问题的技巧——工程师原创应用笔记

发布时间:2020-09-11 阅读量:3481 来源: 我爱方案网 作者: 我爱方案网

【编者按】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开发”,有项目开发需求的雇主欢迎联系我!


相关资讯
核心对比!无源晶振与有源晶振在结构和工作原理的本质区别

无源晶振与有源晶振是电子系统中两种根本性的时钟元件,其核心区别在于是否内置振荡电路。晶振结构上的本质差异,直接决定了两者在应用场景、设计复杂度和成本上的不同。

温度稳定性对RTC晶振的计时误差影响与分析

RTC(实时时钟)电路广泛采用音叉型32.768kHz晶振作为时基源,但其频率稳定性对温度变化极为敏感。温度偏离常温基准(通常为25℃)时,频率会产生显著漂移,且偏离越远漂移越大。

从参数到实践!剖析有源晶振的频率稳定度、老化率及正确接线方案

有源晶振作为晶振的核心类别,凭借其内部集成振荡电路的独特设计,无需依赖外部电路即可独立工作,在电子设备中扮演着关键角色。本文将系统解析有源晶振的核心参数、电路设计及引脚接法,重点阐述其频率稳定度、老化率等关键指标,并结合实际电路图与引脚定义,帮助大家全面掌握有源晶振的应用要点,避免因接线错误导致器件失效。

如何对抗晶振老化?深入生产工艺与终端应用的防老化指南

晶振老化是影响其长期频率稳定性的核心因素,主要表现为输出频率随时间的缓慢漂移。无论是晶体谐振器还是晶体振荡器,在生产过程中均需经过针对性的防老化处理,但二者的工艺路径与耗时存在显著差异。

无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。