TDMA调度者为Fit-TDMA的决策功能体,属于新开发功能模块,分调度员和被调度者2种角色,其中前者运行在AP等汇聚设备上,后者运行在CPE等接入类设备上;后者必须与前者配合才能工做,而前者能够无需后者独立运行。算法
TDMA调度者适宜做为UMAC模块的的一个子功能,LMAC层经过sc的函数指针调用TDMA功能。这样实现能够简化难度、提升能效,同时也不破坏现有的驱动架构。安全
TDMA调度功能须要保存各终端或本身的当前状态,不一样状态侦听不一样的事件,能够执行不一样的行为,所以,须要引入FSM机制。具体的,AP侧的FSM描述以下:数据结构
一共有3种状态:等待、活动和下线状态。等待状态的终端,能够别调度到活动状态,从而容许将报文发送到该终端;同时,活动状态的终端在不一样事件后,可变动为等待状态或下线状态。处于下线状态的终端,不会被调度。下线状态主要用于LMAC层直接丢弃报文、以及TDMA调度模块无需频繁删除和生产终端节点。架构
CPE端的状态机描述以下:函数
一样地,CPE侧也包含3种状态:等待、活动和下线状态。显然地,只有处于活动状态,CPE才能向AP发送数据报文;在转换为离线状态后,LMAC层能够将预期发送次数超过阈值的数据报文丢弃掉,也能够将所有数据报文都直接丢弃。指针
TDMA调度员和被调度者的核心数据结构是不区分的,具体描述以下:调试
TDMA的核心就是发送调度,所以调度相关的逻辑结构是最核心的数据结构。在Fit TDMA中,调度链共有5级,其中1级为基础数据级,STA的信息均包含在此链上,为了提升增删效率,采用双向链结构;第2级到第5级链的节点均包含了指向基数数据的指针,采用单向链结构,由于针对此类链的变动操做不是特别频繁。调度时,针对每一个调度链,均是从头调度到尾,而后在从更高一级的链头开始调度;在L5链调度完毕后,再转Sta链头。这样可实现:全部节点均能被调度到,且发送速率更快的节点,能够得到更多的调度机会。Hash表主要用于查找,查找功能用得很是多,而链表的查找效率低,因此增长HASH表来提高查找速率。LMAC在ath_txq_schedule中须要查询报文目的节点的状态、在数据报文发送成功后更新该节点的发送速率等,均用到了查询。blog
关于定时器,AP端和CPE端是不一样的,AP端只有一个主定时时间间隔,就是为全部的终端一次调度,均分配4ms时间片,超过此时间片后,定时操做函数会当即调度下一个终端;而CPE的定时时间间隔至少有2个,长时间和短期。长时间用于等待状态,由于没法预知活动令牌指示什么时候到达、或者就是活动令牌指示会未收到但又收到了AP的数据报文,因此,在等待状态下,还须要定时来触发检测工做;短期周期主要用于活动态,它的主要做用就是向AP发送返回令牌,同时让本身进入等待状态。事件
在开放环境下,基于QCA9342 HT20模式,每终端跑4条流,启用Fit TDMA功能后,ping 包时延会由1ms增长到5ms左右,单台CPE或网卡的吞吐量依旧是93Mbps左右,上下行差距不到1M;2台终端时,吞吐量与1台终端相同;10台终端时,总吞吐量下降到90Mpbs;20台终端时,总吞吐量下降到88Mbps;32台终端时,总吞吐量下降到84Mbps左右。而若是关闭Fit TDMA功能后,32台终端的总吞吐量不超过75Mbps。所以,启用Fit TDMA在多用户场景下确实有明显地效果。开发
进一步地,人工造异常,在10台终端模式下,让其中的2台终端摘去天线,并用金属板盖住,但同时又保证它能有1-2M的流量。此时,其它8台终端的流量还能各自维持在8.5M左右,不会越跑越慢;而一旦关闭Fit TDMA,则总体吞吐量会愈来愈慢,低速终端拖慢全局流量效果很是明显。
在ath_txq_schedule以及HASH查询中,每增长一条printk打印,ping包时延会增长2-3ms,故在调试完毕后,请当即关闭此类打印;ah_txq_schedule是带锁运行的,不要在类函数中调用其余带锁运行的函数,除非你能确认不会死锁;最好不要在现有发送流程中再次增长须要调度的报文。
CPE在启用Fit TDMA后,未收到AP的活动令牌通知消息时,是不能向AP发送数据报文的。故最好遵循:1)AP侧将新节点插入到活动调度指针的后边,这样保证它会被当即调度,从而能加快DHCP过程;2)CPE侧在确认对端AP是支持Fit TDMA后,才是能TDMA。
在安全性上,为了防止恶意第3方,AP的Fit TDMA支持信元应与AP和CPE的MAC地址相关,CPE在收到该信元后,基于AP和CPE的MAC地址,利用一样的算法,确认信元真实可靠,才能开启Fit TDMA。