Turns Out, Not All Wi-Fi 6 APs Are Created Equal

Many organizations are now trying to support a combination of streaming media, VoIP and data downloads on their Wi-Fi networks, and they’re considering upgrading to Wi-Fi 6 access points (APs) to improve performance. We’ve seen the marketing language of Wi-Fi 6 promising multi-gigabit throughput, so it seems that any AP with the Wi-Fi 6 designation should easily support various high-load scenarios found in enterprises, schools, hotels, hospitals and other organizations.

To test this theory, we recently validated a set of “stress tests” on five popular enterprise-grade, cloud-managed 4×4:4 Wi-Fi 6 APs from HPE Aruba, Extreme Networks, Juniper Mist, Cisco Meraki and CommScope RUCKUS. Many of these APs we’ve worked with on numerous projects. CommScope RUCKUS assembled and operated the test environment and sponsored Packet6 for the validation of the test.

Download the Wi-Fi 6 Stress Test Report

We were surprised with the findings: Performance varied substantially across AP models. While all of the tested APs share the same Wi-Fi 6 specification, vendor implementation clearly yields significant performance differences under the high-demand traffic which the APs were evaluated.

What We Tested

The test was designed to gauge these APs’ overall performance in a mixed traffic environment that included large and small file transfers, high-definition (HD) video streaming and VoIP. (We also tested to learn how each vendor’s cloud management system reacted to and enabled administrators to respond to network incidents – see our full report for details).

We set up 30 Dell Latitude laptops with Wi-Fi 6 capability in one room and had them play a HD (1080p) video. Each laptop played a unicast HD video stream before, during, and after the test. Co-located with the laptops were five Apple iPads running a bi-directional Voice-over-IP (VoIP) test to simulate a VoIP conversation. Five additional iPads conducted data downloads in this room. In an adjacent room, associated to the same access point, were twenty Apple MacBook Pros, each conducting downloads of varying data sizes to simulate traffic such as web browsing, email, and file transfers.

The AP was placed in the back of the first room near the wall separating the two rooms, and a RUCKUS switch provided Power-over-Ethernet (PoE) to the APs, each connected to a multigigabit Ethernet port and auto-negotiated to full speed. To maximize the performance of each AP, we tested for throughput and other performance metrics using an 80 MHz-wide channel. We don’t normally recommend 80 MHz-wide channels in a high-density deployment but to realize full performance potential we used 80 MHz-wide.

Download the report

The Test

We started video streams on the Dell laptops before the test began and played them nonstop during and after the test. During the test, five iPads simulated VoIP traffic while five other iPads ran data downloads. In the adjacent room, twenty MacBook Pros also ran data downloads.

We measured overall network throughput, multimedia performance and MOS (VoIP call quality), among other metrics. (See our video for a quick overview of the test.)

Network Throughput

The APs delivered varied network throughput, ranging from 100 Mbps on the Mist AP to 441 Mbps on the RUCKUS AP. In fact, the RUCKUS AP delivered roughly 40 percent better throughput than the APs from Aruba, Extreme, and Meraki.

Video Streaming Results

While four out of the five APs supported trouble-free streaming performance before the test, the RUCKUS AP was the only one that delivered 30 stall-free streams during the test. Other APs caused video streams to stall on one or as many as 25 laptops, and we couldn’t get the Mist AP to support 30 video streams (it managed only 24) before the test began. Multiple laptops running video tests is similar in today’s environments using video conferencing.

MOS Results

The RUCKUS AP outperformed all other APs on the MOS metric, providing significantly higher voice call quality under heavy network load. More specifically, only the RUCKUS AP supported a MOS value that would meet typical enterprise service level agreements (SLAs) requiring “good” voice quality. Many organizations are leveraging VoIP and conferencing applications requiring good call quality.

Our Takeaway: Test Before You Buy

The RUCKUS AP significantly outperformed all of the other access points in every test. It was the only access point capable of meeting real-world success criteria—maintaining a “good” MOS score while simultaneously delivering stall-free HD video streams to 30 clients and maintaining “high” throughput for all data clients.

As they say, your mileage may vary; but this test points out that different Wi-Fi 6 APs perform differently in high-demand environments. We strongly recommend that you stress-test multiple vendor APs in your own environment before deciding on a Wi-Fi 6 upgrade.

If you’d like to learn more about the test see our full report for details or contact us today to learn how we can help you with your Wi-Fi 6 migration.

2 thoughts on “Turns Out, Not All Wi-Fi 6 APs Are Created Equal”

  1. Thomas says:

    Thank god great WiFi is not about throughput. It would be nice to see a 802.11 packet cap to verify the test

  2. Jan Robijns says:

    Hi there,

    I have tried to download the report. In the form, I entered several email addresses, but I never got a link to the report in any of them. How do I get it?

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

[gravityforms id=16 title=false description=false]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_chrome gform_wrapper gravity-theme' id='gform_wrapper_16' ><form method='post' enctype='multipart/form-data' id='gform_16' action='/wifi6-ap-stress-test/' > <div class='gform_body gform-body'><div id='gform_fields_16' class='gform_fields top_label form_sublabel_below description_below'><fieldset id="field_16_1" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_16_1"><legend class='gfield_label gfield_label_before_complex' >Name<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></legend><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_16_1'> <span id='input_16_1_3_container' class='name_first' > <input type='text' name='input_1.3' id='input_16_1_3' value='' aria-required='true' placeholder='First Name' /> <label for='input_16_1_3' >First</label> </span> </div></fieldset><div id="field_16_2" class="gfield gfield--width-full gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_16_2"><label class='gfield_label' for='input_16_2' >Email<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_email'> <input name='input_2' id='input_16_2' type='text' value='' class='large' placeholder='Business email address' aria-required="true" aria-invalid="false" /> </div></div><fieldset id="field_16_3" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_16_3"><legend class='gfield_label gfield_label_before_complex' >Consent<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></legend><div class='ginput_container ginput_container_checkbox'><div class='gfield_checkbox' id='input_16_3'><div class='gchoice gchoice_16_3_1'> <input class='gfield-choice-input' name='input_3.1' type='checkbox' value='I consent to the processing and sharing with partners of the personal data that I provide Packet 6 for this activity in accordance with and as described in the &lt;a href=&quot;https://packet6.com/privacy-policy&quot; target=&quot;_new&quot;&gt;Privacy Policy&lt;/a&gt;' id='choice_16_3_1' /> <label for='choice_16_3_1' id='label_16_3_1'>I consent to the processing and sharing with partners of the personal data that I provide Packet 6 for this activity in accordance with and as described in the <a href="https://packet6.com/privacy-policy" target="_new">Privacy Policy</a></label> </div></div></div></fieldset><div id="field_16_4" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_16_4"><label class='gfield_label' for='input_16_4' >Name</label><div class='ginput_container'><input name='input_4' id='input_16_4' type='text' value='' /></div><div class='gfield_description' id='gfield_description_16_4'>This field is for validation purposes and should be left unchanged.</div></div></div></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_16' class='gform_button button' value='Get the report' onclick='if(window["gf_submitting_16"]){return false;} window["gf_submitting_16"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_16"]){return false;} window["gf_submitting_16"]=true; jQuery("#gform_16").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_16' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='16' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_16' value='WyJbXSIsImY4MGVlNTA5MGVjMWYzYzU5NzUyOGFhOWE3ZGFiMzRlIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_16' id='gform_target_page_number_16' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_16' id='gform_source_page_number_16' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_2" name="ak_js" value="109"/><script>document.getElementById( "ak_js_2" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div>