3 收发流程分析与改进

  收发流程分析涉及到具体代码,属于SDK驱动内容,不能完全公开,仅供参考,本系列文档中涉及到具体功能或代码时,请在自己的驱动代码中查找。

  QCA驱动从9.5开始,将原来的htc的功能重构了一下,分成Direct Attach(DA)和Offload(OL)两大部分,前者支持Mips架构的所有SOC,以及非11AC 网卡;后者支持ARM体系的SOC,以及11AC网卡。

  本内容主要以DA架构为主,OL架构只提及,OL架构的收发流程在MAC层上与DA架构类似。

3.1 流程简述

  本小节仅涉及数据报文收发流程中与Fit-TDMA相关的关键部分,不重复QCA PDF中tx和rx flow。  

  • TX流程简述

  TX起始于dev_xmit_queue,然后会走到ath_tx_send_normal或ath_tx_send_ampdu,在ath_tx_send_XXX(normal或ampdu)中,直接调用ath_tx_txqaddbuf直接提交到HAL的硬件队列,由硬件发送;或者有ath_tx_queue_tid临时缓存到tid队列中,通过ath_txq_schedule,将报文提交的HAL的硬件队列发送。所述tid队列为软队列,一共有17个,其中0~15与DSCP域值对应,而16为管理与控制帧队列(不包含信标帧)。所述硬件队列,一共有10,其中0-3号与17个tid队列映射,也就是0-3号队列为数据队列,它们的优先级与WMM的4个AC的优先等级一一对应;9号队列为信标帧队列;队号越高,在硬件中的发送优先级越高。

  TX发送完毕后,由ath_tx_complete_buf负责完成收尾工作,如更新统计、回收资源等。

  • RX流程简述

  RX起始于ath_intr,然后走到ath_rx_process,再然后走到Ieee80211_input,最后会osif_receive处理,是提交的网络协议栈还是直接完成报文接收。在此流程中,数据报文会被ath_net80211_rx处理。

3.2 流程修改

  基于TX流程,直接发送函数是ath_tx_send_normal和ath_tx_send_ampdu,直接调度函数是ath_txq_schedule(内部直接调用ath_tx_sched_aggr或ath_tx_sched_normal)。为了实现Fit-TDMA调度,需要将这3个发现相关的核心功能函数。此外,驱动还有个APONLY的宏,启用了该宏后,报文会从UMA直接跳转到HAL,绕过了这3个核心函数,因此,在启用Fit-TDMA功能时,需要关闭此宏。

  在ath_tx_send_XXX中,现有逻辑是:如果可直接发送,则立即调用ath_tx_txqaddbuf,将报文直接提交到HAL层发送。而Fit-TDMA是发送报文统一调度,因此,我们需要将这个功能关闭,强制报文先进入tid队列,然后通过ath_txq_schedule来调度。而在ath_txq_schedule中,现有逻辑是:如果待调度的tid未阻塞,则将该tid的报文,通过ath_tx_sched_aggr 或ath_tx_sched_normal提交的HAL发送之。显然,在tid粒度级上的调度,是不符合Fit-TDMA调度预期的。Fit-TDMA调度是目标终端级粒度的调度。因此,在ath_txq_schedule中,在验证当前tid为非阻塞后,还需要测试tid->an->an_node所指向的目标终端,是否可以发送(即是否为Fit-TDMA Active态),如果不能发送,则同样要将此tid插入paused_tid_q,等待下次调度。

  进一步地,在实际测试中发现,管理类帧最好不要延时发送,故在具体实施时,仅当tidno小于16,且ac的qnum小于4时,才测试报文目标终端的状态;此外,有部分报文的目标终端是VAP自己、或一个广播地址,这类报文最好也直接放行。另外,如果一个终端已经下线了,但缓存的报文还未发送时,需要直接将该tid所包含的报文空间释放,并将tid资源回收。

  此外,还需要注意此状况:触发ath_txq_schedule的txq的tid是一个数据包,但因为其目标终端的Fit-TDMA状态为“等待”,故该报文不能被立即调度到HAL层。此时,如果AP处于低流量工作状态,例如管理的终端数小于5个,且只是简单Ping终端。则下一个同tid调度ath_txq_schedule会来的比较慢,导致回包不及时。这样就会看到ping包时断时续。简单的对策是:如果触发调度的tid是个数据包,但本次调度,未能成功下发一个数据报文时,则立即调度该sc的中sc_txq{0,1,2,3}队列中其它队列。这样,可能会出现:要么外发一个数据报文,要么就不能外发数据报文。当不能外发数据报文,则表明当前Fit-TDMA Active态的终端没有待下发数据报文,应立即通知Fit-TDMA 调度者,请求它将活动令牌传递给下一个轮询终端。

  最后,为了通知终端可发送报文,Fit-TDMA 调度者在完成本地活动令牌轮转后,立即通过管理帧通知目标终端可发送报文到AP。

  基于RX流程,直接在ath_net80211_rx函数中处理Fit-TDMA接收逻辑,如果启用“严格TDMA策略“,则针对数据报文,首先验证发端是否为Fit-TDMA Active态,如果验证为否,则直接释放接收到的wbuf。如果启用“兼容TDMA策略“,则继续启用现有逻辑。

  在实际测试中,如果直接丢弃wbuf,则针对无重发保证的网络应用,会造成大量通信中断。如ping包会丢得一沓糊涂。

  OL架构中,发送修改点在ol_tx_send函数中,接收修改点在ol_rx_indication_handler,因为网卡级的收发均在黑盒子的FW中,所以目前在offload目录下的驱动修改效果均不好,留待继续改进或换方案。

4 TDMA 调度者

  TDMA调度者为Fit-TDMA的决策功能体,属于新开发功能模块。具体留待下篇文档说明。

  

一起来Fit TDMA over WiFi(2)的更多相关文章

  1. 一起来Fit TDMA over WiFi(1)

    1 概述 WiFI TDMA领域,2009年Sam  Leffler在<TDMA for Long Distance Wireless Networks>首次系统提出了TDMA技术方案,并 ...

  2. 一起来Fit TDMA over WiFi(3)

    4 TDMA调度者 TDMA调度者为Fit-TDMA的决策功能体,属于新开发功能模块,分调度员和被调度者2种角色,其中前者运行在AP等汇聚设备上,后者运行在CPE等接入类设备上:后者必须与前者配合才能 ...

  3. TDMA over WiFi

    0 引言 TDMA可以修正WiFi中DCF机制中连接速率不同终端间信道占用时间片公平性缺陷,从而提升整体WiFi网络的性能.著名的UBNT的网桥就用其独创的TDMA技术为其赢得了市场.以前是不同的公司 ...

  4. 【转】WiFi基础知识

    http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a IEE ...

  5. 【转】家庭wifi覆盖指导

    网址:家庭wifi覆盖指导 私以为,目前民用 wifi 路由器市场已经完全走上了邪路.天线越来越大,发射功率越做越高.都敢冒着法律的风险使用大大超过 100mW 的发射功率了.且不论巨大的发射功率可能 ...

  6. WiFi基本知识

    转自:http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a ...

  7. Wifi长距离传输

    本人从事Linux驱动开发.现在要实现两端之间wifi长距离(1km左右)传输视频数据(全向天线)的功能.目前用的平台是Atheros AR9342.我在网上查到一些资料是关于禁用802.11的CSM ...

  8. WiFi基本知识【转】

    转自:http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a ...

  9. 深度点评五种常见WiFi搭建方案

    总结十年无线搭建经验,针对企业常见的五种办公室无线网络方案做个简要分析,各种方案有何优劣,又适用于那种类型的企业. 方案一:仅路由器或AP覆盖 简述:使用路由器或AP覆盖多个无线盲区,多个AP的部署实 ...

随机推荐

  1. 配置SpringAop时需要用到的AspectJ表达式

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  2. php代码一样,编码不同报错

    php代码一样,编码不同报错 两个php代码完全一样,但是就报错,比如说声明比如在very first,这种,可以把编码设置utf-8 无bom

  3. Java基础类库简介

    Java基础类库简介 一.常用的基础类库:11个jar(Java Archive,Java归档)包 作为java语言使用者,我们可以感受到java语言带来的优势(平台无关.面向对象.多线程.高效易扩展 ...

  4. Oracle银行存取钱系统

    Oracle银行存取钱系统 /* 银行系统 要求: 1.创建一个用户信息表(userinfo).一个交易信息表(deal) 2.用户信息表字段:用户编号.用户名称.密码.余额 交易信息表字段:编号.交 ...

  5. Python内置函数(54)——callable

    英文文档: callable(object) Return True if the object argument appears callable, False if not. If this re ...

  6. Python内置函数(47)——vars

    英文文档: vars([object]) Return the __dict__ attribute for a module, class, instance, or any other objec ...

  7. 如何排查CPU飙升的Java问题

    1. JPS 查看jvm进程 2. 显示线程列表 ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程tid 3. tid转换成16进制 printf "%x\n ...

  8. hadoop2.7.3+spark2.1.0+scala2.12.1环境搭建(1)安装jdk

    一.文件准备 下载jdk-8u131-linux-x64.tar.gz 二.工具准备 2.1 Xshell 2.2 Xftp 三.操作步骤 3.1 解压文件: $ tar zxvf jdk-8u131 ...

  9. Spring Security入门(2-3)Spring Security 的运行原理 3

    关键组件关系 FilterSecurityInterceptor--- authenticationManager --- UserDetailService--- accessDecisionMan ...

  10. less初学手记

    less语言学习手记 工具下载 在less学习中,我们都会需要随时编译我们的less文件,查看生成的css样式表是否正确,以及是否符合我们的要求.推荐一款编译软件供大家下载使用:koala,本软件支持 ...