I was recently testing an RF optimisation feature called Air Time Fairness (ATF). An ATF-enabled access point can control the medium access based on the airtime utilization. The purpose of ATF is to improve the client performance by enforcing an airtime limit per WLAN and/or per client.
Air Time Fairness is a feature that is provided by many wireless network manufacturers (Meru Networks historically, Aruba, Aerohive, Extreme, Meraki and many others) with some implementation differences. Many consumer-grade access points are also providing a similar feature.
It is also a component of the Cisco High Density Experience (HDX) features. It is designed for use in a variety of environments, including stadiums, public hotspots, education and enterprise, where there are a large number of clients with mixed connection speeds.
Cisco has introduced ATF into 2 phases. At first it was introduced in AireOS version 8.1. This ATF Phase 1 can create ATF policies to allocate a percentage of airtime to each WLAN on a group of AP radios. The WLC will enforce the traffic policies to ensure that the air utilisation of all the clients of the WLAN matches the allocated airtime.
In a second phase (AireOS 8.2), the ATF Client Fair Sharing (CFS) feature was added to improve the client experience on each WLAN. The idea behind CFS is to allocate an equal airtime to each client in the downstream traffic, from the access point to the client. From the version 8.4, ATF is also supported for Mesh APs.
ATF Monitor mode
The first step towards implementing the ATF feature on the network would be to enable Monitor mode. With no control on the traffic, the Monitor mode will provide useful real-time statistics about the airtime utilisation on the APs and on the WLANs. Later, the ATF policies can be designed based on the measurements that were collected in the Monitor mode.
By default, ATF is disabled globally on the controller. The ATF Monitor mode can be enabled or disabled:
Per radio
Per AP
Per AP Group
Globally for all APs
The ATF Monitor mode will provide statistics of the Airtime Utilisation at different levels:
Per WLAN
Per radio
Per AP
Note that before configuring ATF, disable all the WLANs at first. You can enable the WLANs after all the changes are done.
To enable ATF Monitor mode for all the APs that are associated to the controller:
(WLC) >config atf 802.11a mode monitor
(WLC) >config atf 802.11b mode monitor
Using GUI:
In WIRELESS | ATF | Monitor Mode, select Network. Check 802.11a and 802.11b for the Radio Type. And click on Enable.
To verify if ATF is disabled or enabled, in Monitor mode or in Enforce-Policy mode:
(WLC) >show atf config all
AP Name MAC Address Slot Admin Oper Mode Optimization Override
-------------------------------- ----------------- ---- -------- ----------- -------------- ------------ ---------
LAP1 00:6b:f1:29:f4:80 0 ENABLED UP Monitor n/a Network level
LAP1 00:6b:f1:29:f4:80 1 ENABLED UP Monitor n/a Network level
With ATF enabled, the AP will report the ATF statistics to the controller every 180 seconds by default. The WLC collects the number of bytes and frames which are sent and dropped, and the airtime used for the download traffic, per WLAN and per AP radio.
To display the statistics of the AP per radio and per WLAN:
(WLC) >show atf statistics ap AP-NAME {802.11a | 802.11b} summary
ATF is in Monitor Mode
Radio Uptime [ Instantaneous | Total ]......... 180 sec | 1075 sec
Total Radio Air Time........................... 2551ms
STATISTICS PER WLAN............................ Instantaneous | Total
Wlan 2:
Network Name................................... OPEN
ATF Policy ID.................................. 0
ATF Policy (weight|%allotted).................. 10 | 100%
Airtime Used .................................. 47ms | 2551ms
Relative Airtime % ............................ 100 | 100
Absolute Airtime % ............................ 0 | 0
Bytes Sent .................................... 247KB | 19MB
Bytes Dropped ................................. 0Bytes | 2Bytes
Frames Sent ................................... 270 | 17989
Frames Dropped ................................ 0 | 1
The output displays the Instantaneous statistics for the last time interval (the last 180 seconds by default) and the Total statistics that are cumulated since the radio was up or the statistics were resetted. In the example, 247 Kibibytes were sent on WLAN 2 on LAP1 during 47 milliseconds over the last 180 seconds, which means almost 0% of the airtime was used on the downlink. It is a very low usage in this case.
Using GUI:
In WIRELESS | ATF | ATF Statistics, select the AP Name.
The page will display the same statistics (Instantaneous and Accumulated) per WLAN and per radio. Notice that the ATF mode and the ATF measurement interval are also shown on the page.
Click on the WLAN hyperlink to access the statistics of the selected WLAN.
On the ATF Statistics page, the displayed values for Instantaneous statistics are within the period of Measurement Interval. The default is 180 seconds and it can changed for debugging for example.
To specify the ATF Measurement interval in seconds using CLI:
(WLC) >config ap stats-timer PERIOD AP-NAME
To see the actual interval of an AP radio:
(WLC) >show atf statistics ap AP-NAME {802.11b | 802.11a} summary
ATF is in Monitor Mode
Radio Uptime [ Instantaneous | Total ]......... 5 sec | 993 sec
Another useful command to reset the cumulative statistics on the controller using CLI:
(WLC) >clear atf statistics
This command will clear ATF Statistics!!
Are you sure you want to continue? (y/n) y
ATF Policies and ATF Enforcement mode. Phase 1.
The second step is to create some ATF policies for the WLANs and to set the ATF Enforcement mode. The objective is to control the airtime resource with a global limit per WLAN.
The network administrator can manage the policies to control the WLAN airtime budgets, with a strict or an optimised enforcement. The AP will allocate a percentage of the total available airtime (instead of the bandwidth with rate limiting) in order to access the medium. The solution is more efficient than rate limiting to ensure that a client with slow connection speed doesn’t bring down the performance of the clients of the other WLANs.
The mechanism of ATF is controlled by the access point. The AP is passing the traffic if the airtime budget is not reached for the WLAN and/or for the client, by queuing and policing. This traffic policing is done before the frame is transmitted to the EDCA queues. If the budget is reached, the frame is dropped or deferred in another priority queue. But ATF doesn’t replace the standard airtime access mechanism that is EDCA.
Note that ATF is only applicable to the wireless data frames in the downstream direction (from the AP to the clients). The upstream traffic is not controlled by a Cisco access point with ATF.
The network administrator can tune the controller by allocating some weights to the ATF policies. Those weights have no unit of measurement. The allotted airtime utilisation for each WLAN is proportional to the weight of the ATF policy associated to the WLAN. The total airtime utilization is equivalent to the sum of the weights associated to the ATF policies of all the WLANs that are up.
For example, I have configured 2 WLANs:
WLAN1 associated to an ATF policy with a weight of 10
WLAN2 associated to an ATF policy with a weight of 40
The sum of the weights associated to the 2 WLANs (10 + 40) represents the total airtime utilisation (100%). The AP will enforce the air utilisation so that the traffic on WLAN1 can use the airtime up to 20% (10 out of 50), and the traffic on WLAN2 up to 80% (40 out of 50). Those allotted airtime values in percentage are the maximum airtime traffic on the WLAN in the downstream direction (AP to clients).
At first, disable the WLANs before changing the configuration with ATF. Re-enable the WLANs after all the changes.
To enforce Air Time Fairness with ATF policies:
Create the ATF policies:
Map each WLAN to an ATF policy:
Enable ATF Enforcement Mode
Choose between Strict Enforcement and Optimal Enforcement
Per radio
Per AP
Per AP Group
Globally for all APs
(WLC) >config atf policy
create POLICY-ID POLICY-NAME POLICY-WEIGHT
client-sharing {enable | disable}
The weight can be any value between 5 and 100. Remember that the weight value doesn’t directly express a percentage of the available airtime. The WLANs can be enabled/disabled anytime and the weights of the remaining up WLAN are dynamically recalculated into percentage.
The Client Sharing feature is described later in the next section. During the early deployment of Phase 1, the feature was not available (by default, disabled in the default policy).
(WLC) >config wlan atf WLAN-ID policy POLICY-ID
By default, all the WLANs are mapped to the “Default” with a default weight of 10 and with Client Sharing disabled.
(WLC) >config atf 802.11a mode enforce-policy
(WLC) >config atf 802.11b mode enforce-policy
Those 2 commands enables ATF Enforcement mode for all the APs associated to the controller.
(WLC) >config atf 802.11a optimization {enable | disable}
By default, the optimisation feature is disabled.
With Strict Enforcement, the maximum airtime utilisation on each WLAN is limited to the allotted value that is calculated from the ATF policies.
With Optimal Enforcement, the available airtime that is unused by some WLANs is shared among the other WLANs, allowing some traffic bursts beyond the allocated limits.
The ATF Enforcement mode and the Strict/Optimal Enforcement option can be enabled/disabled:
Using GUI:
In WIRELESS | ATF | Policy Configuration, select a new ID. Enter the Policy Name, the Weight and optionally enable the Client Sharing option. Then click on Create.
Notice that the same ATF policy can be used many times for different WLANs.
In WIRELESS | ATF | Enforcement Mode, select Network. Check the 802.11a and 802.11b Radio Type. Select Optimized or Strict for the Enforcement Type. Then click on Enable.
On the same page, select Network. Select WLAN ID and the Policy ID to associate an ATF policy to a WLAN. Then click on Add.
To verify the ATF policy configuration:
(WLC) >show atf config policy
Policy-Id Policy-Name Weight Client Sharing
---------- ------------ ------- --------------
0 Default 10 Disabled
1 ATF40 40 Disabled
To verify the WLAN-to-Policy mapping:
(WLC) >show atf config wlan
WLAN ID SSID Policy-Name Weight Client Sharing
------- -------------------- -------------------------------- ------ --------------
1 EAP Default 10 Disabled
2 OPEN ATF40 40 Disabled
To verify if ATF is in Enforcement mode and with or without Optimisation for all APs:
(WLC) >show atf config all
AP Name MAC Address Slot Admin Oper Mode Optimization Override
-------------------------------- ----------------- ---- -------- ----------- -------------- ------------ ---------
LAP1 00:6b:f1:29:f4:80 0 ENABLED UP Enforce-Policy Enabled Network level
LAP1 00:6b:f1:29:f4:80 1 ENABLED UP Enforce-Policy Enabled Network level
To find out the percentage of airtime allotted for a WLAN on an AP radio:
(WLC) >show atf statistics ap AP-NAME {802.11a | 802.11b} summary
ATF is in Enforce-Policy Mode
Radio Uptime [ Instantaneous | Total ]......... 180 sec | 720 sec
Total Radio Air Time........................... 0us
STATISTICS PER WLAN............................ Instantaneous | Total
Wlan 1:
Network Name................................... EAP
ATF Policy ID.................................. 0
ATF Policy (weight|%allotted).................. 10 | 20%
Airtime Used .................................. 0us | 0us
Relative Airtime % ............................ 0 | 0
Absolute Airtime % ............................ 0 | 0
Bytes Sent .................................... 0Bytes | 0Bytes
Bytes Dropped ................................. 0Bytes | 0Bytes
Frames Sent ................................... 0 | 0
Frames Dropped ................................ 0 | 0
Wlan 2:
Network Name................................... OPEN
ATF Policy ID.................................. 1
ATF Policy (weight|%allotted).................. 40 | 80%
Airtime Used .................................. 0us | 0us
Relative Airtime % ............................ 0 | 0
Absolute Airtime % ............................ 0 | 0
Bytes Sent .................................... 0Bytes | 0Bytes
Bytes Dropped ................................. 0Bytes | 0Bytes
Frames Sent ................................... 0 | 0
Frames Dropped ................................ 0 | 0
ATF Phase 2 with Client Fair Sharing.
The third step of the ATF implementation consists in enabling Client Fair Sharing. This is the final RF optimisation. The objective of CFS is to avoid the situation where the channel is being monopolized by specific clients with slow connection speed.
Let’s assume a scenario (without CFS) where an access point is sending some traffic with the same flow characteristics to 2 different clients. The frames would be scheduled for transmission alternatively on a per-packet basis to the 2 clients. If one client has lower PHY data rate specifications than the other, then the packet designated to the client with the slowest PHY data rate will consume more airtime than the packet designated to the other client. Without contention, the throughput would be the same for each client. However the airtime utilisation would be greater for the traffic to the slowest client. I have illustrated it in the figure A below.
With Client Fair Sharing (CFS), the airtime is allocated equally per client within the WLAN in the downlink direction (AP to client). In our scenario, the traffic towards each client would be limited to 50% each. The traffic towards the fastest client would have more airtime and more throughput than previously, as shown in figure B. This is particularly useful in high density environments with multiple clients of mixed connexion speed.
To enable Client Fair Sharing on an existing ATF policy:
(WLC) >config atf policy modify client-sharing {enable | disable} POLICY-NAME
Client Fair Sharing requires that ATF is enabled in Enforcement mode. It is also advised to disable the WLANs while changing the ATF policy.
Using GUI:
In WIRELESS | ATF | Policy Configuration, select the ID of the ATF policy. Enable the Client Sharing option. Then click on Modify.
To verify if Client Fair Sharing is enabled on the ATF policy:
(WLC) >show atf config policy
Policy-Id Policy-Name Weight Client Sharing
---------- ------------ ------- --------------
0 Default 10 Disabled
1 ATF40 40 Enabled
To verify if Client Fair Sharing is enabled on the WLAN:
(WLC) >show atf config wlan
WLAN ID SSID Policy-Name Weight Client Sharing
------- -------------------- -------------------------------- ------ --------------
1 EAP Default 10 Disabled
2 OPEN ATF40 40 Enabled
With CFS enabled, the AP will add the used airtime, the number of bytes and frames for each client into the ATF statistics sent to the controller.
To display the client statistics of an AP, per radio and per WLAN:
(WLC) >show atf statistics ap AP-NAME {802.11a | 802.11b} wlan WLAN-ID
ATF is in Enforce-Policy Mode
Radio Uptime [ Instantaneous | Total ]......... 180 sec | 1600 sec
Total Radio Air Time........................... 2199ms
STATISTICS PER WLAN............................ Instantaneous | Total
Wlan 2:
Network Name................................... OPEN
ATF Policy ID.................................. 1
ATF Policy (weight|%allotted).................. 40 | 80%
Airtime Used .................................. 2197ms | 2199ms
Relative Airtime % ............................ 100 | 100
Absolute Airtime % ............................ 1 | 0
Bytes Sent .................................... 13MB | 13MB
Bytes Dropped ................................. 0Bytes | 0Bytes
Frames Sent ................................... 10510 | 10517
Frames Dropped ................................ 0 | 0
Instantaneous Airtime Cumulative Airtime
Clients [Abs % | Rel % | Airtime] [Abs % | Rel % | Airtime] Tx(Sent)Frames Tx(Dropped)Frames Usage Status
------- ------------------------- ------------------------- -------------- ----------------- -----------------
985f.d3bb.35e8 1%| 63%|1391521us 0%| 63%|1391 ms 4813 0 LOW USAGE
ec9b.f332.f140 0%| 37%|806426us 0%| 37%|807 ms 5697 0 LOW USAGE
(WLC) >show atf statistics client CLIENT-MAC
Client MAC Address............................... 98:5f:d3:bb:35:e8
Client Username ................................. N/A
AP MAC Address................................... 00:6b:f1:29:f4:80
AP Name.......................................... LAP1
AP radio slot Id................................. 1
Wireless LAN Id.................................. 2
ATF Policy ID.................................... 1
Wireless LAN Profile Name........................ OPEN
Radio Uptime [ Instantaneous | Total ]......... 180 sec | 1600 sec
Total Radio Air Time........................... 2199ms
Airtime Used .................................. 1391ms | 1391ms
Relative Airtime % ............................ 63 | 63
Absolute Airtime % ............................ 1 | 0
Frames Sent ................................... 4813 | 4813
Frames Dropped ................................ 0 | 0
Using GUI:
In WIRELESS | ATF | ATF Statistics, select the AP Name. It will redirect to the ATF Statistics page for this AP. Then click on the WLAN hyperlink to access the statistics of the selected WLAN.
You can get the client statistics by clicking on the Client MAC address hyperlink.
The experiment.
In the following example, I have setup a WLAN with an ATF policy limited to 90% of the total airtime with Strict Enforcement. To do so, I have another WLAN with an ATF policy with 10% airtime budget.
Three clients were connected to the WLAN using a clean 5GHz channel:
1 client configured with HT disabled (802.11a, limited to 54 Mbps): STA-A
2 High Throughput clients (802.11n, 2 Spatial Streams, limited to m15 i.e. 144 Mbps): STA-B and STA-C
Then I have used the iperf software to send a maximum throughput to all the clients. A local server was setup to transmit 500MB of UDP traffic at a bitrate of 144 Mbps with the same frame size from the AP to each client.
The following graph shows the results. The stacked areas represents the airtime utilisation of each client. The coloured lines shows the throughput of each client and the total throughput.
The graph shows that the airtime utilisation is limited to 90% as configured in the ATF policy.
During the first half of the test, the throughput is not the same between the 3 clients. The 2 High-Throughput 802.11n clients have fluctuated around an average of 24.35 Mbps and 28 Mbps. The legacy 802.11a client has achieved a lower throughput of 7.87 Mbps.
However the airtime utilisation for each client is equally distributed between the 3 clients during that time (cumulative airtime of 32% for STA-A and 34% for the 2 other clients, between 0 and 145 seconds). The ATF policy with CFS was dropping frames to ensure that the airtime between clients stays equal.
During the second half-time of the test, iperf was finished for the 2 802.11n clients. The 802.11a client was still receiving packets from the server at a higher throughput of 18.94 Mbps (20-22 Mbps typical downstream throughput for a data rate of 54Mbps).
To compare, I’ve tried the same experiment with CFS disabled and ATF in Monitor mode:
The result were quite different. The time when the fastest client has finished downloading 500 MB is longer (213 seconds) than in the previous test (145 seconds). During that time, the received throughput on the 802.11a client is also higher (10.95 Mbps). In this case, the 802.11a client has taken more throughput and more airtime than previously, slowing the faster clients. The previous test with CFS enabled was more efficient for the 802.11n clients.
Here are a few more comments about the experiment:
I used UDP instead of TCP (to avoid having additional congestion control mechanisms)
I used at least 3 clients. I’ve not seeing client fairness working with 2 clients only.
Give a bit of buffer to the WLAN maximum airtime when testing with iperf. With an ATF policy of 100% airtime and CFS enabled, the results were not looking fair when the utilisation came close to 100% (hence the 90% policy). In production, the WLAN would hopefully never reach 100%.
I've tested each client one-by-one to make sure that the client could maximise the total airtime. If the airtime utilisation is lower than the allocated airtime per client, there are no packet drops and no traffic policing.
Troubleshooting and debugging.
There are some show commands related to the ATF statistics on the APs. To see the statistics in real-time on the AP:
(AP) >show controller dot11Radio {0 | 1} atf [detail]
If CFS is enabled on the AP, you can use the following command to see the client statistics in real-time:
(AP) >show controller dot11Radio {0 | 1} atf cfs [client | detail | policy]
For example, you will find the real-time client statistics from the AP command:
(AP) >show controller dot11Radio 1 atf cfs detail
ATF CLIENT ENFORCEMENT DEAILED STATS:
--------------------------------------
SSID Name: OPEN Policy Name: ATF90
--------------------------------------
Active Client Count: 3 Left Client Count: 0 Updated : Since 1977 ms before
[Category Count]Low: 0 Regular: 1 Over-Use: 0
SharedPoolTokens: 76554 usecs Total Airtime: 3833956
Clients [ClientState|Duration] [PrevState] [Airtime|Usage%] [DropCount|Size] [SharedPoolUsage] [RefillsTried] [LeftSince]
------- ----------------------- ---------- ---------------- --------------- ---------------- ------------- -----------------
8c70.5a7c.44f9 OVER USAGE| 153 sec LOW USAGE 1342342us 35 % 84112 |88654048 246840 393 NA
985f.d3bb:35e8 LOW USAGE| 0 sec OVER USAGE 0us 0 % 0 | 0 0 0 NA
fc75.1661.290a OVER USAGE| 151 sec OVER USAGE 2491614us 65 % 58672 |61840288 922936 400 NA
Notice that the client state is categorized into 3 groups: Low, Regular and Over Usage. It allows for the AP to take the unused airtime of the clients in Low or Regular Usage state for the clients in Over Usage state.
There are also some debug commands associated to ATF on the controller:
(WLC) >debug atf detail enable
(WLC) >debug atf error enable
(WLC) >debug atf events enable
You can see the messages related to ATF statistics that are sent from the APs to the controller:
*iappSocketTask: Dec 20 19:24:58.804: IAPP-ATF Stats:50 Bytes Sent from AP
*iappSocketTask: Dec 20 19:29:37.109: iapp_decode_update_atf_client_stats for slotid 1 wlanid 2 TotalEntries 2 CurrentPcktCount 2 entry indx 0
*iappSocketTask: Dec 20 19:29:37.109: 985f.d3bb:35e8 1391521us 4813 0 1
*iappSocketTask: Dec 20 19:29:37.109: ec9b.f332.f140 806426us 5697 0 1
*spamApTask2: Dec 20 19:29:37.109: tlvDecodeSpamAtfStatsPayload wlanid 1 airtimeused 0 bytesent 0 bytedrop 0 framesent 0 framedrop 0
*spamApTask2: Dec 20 19:29:37.110: tlvDecodeSpamAtfStatsPayload wlanid 1 airtimeused 2197947 bytesent 13794304 bytedrop 0 framesent 10510 framedrop 0
Those messages are sent periodically by every AP at the interval defined by the stats-timer value (180 seconds by default). The controller will process them to refresh the ATF statistics.
Additional Resources
Cisco Air Time Fairness (ATF) Deployment Guide Release 8.4:
Enhancing Cisco High Density Experience with Cisco Air Time Fairness White Paper:
Meraki documentation, Air Time Fairness (ATF):
https://documentation.meraki.com/MR/WiFi_Basics_and_Best_Practices/Air_Time_Fairness_(ATF)
Meru Networks videos, Airtime Fairness:
https://www.youtube.com/watch?v=UwmR5nJcTgs
Ruckus videos, Airtime Fairness: