Much net flotsam re: disappointing 801.11n performance from intel's Centrino-N series wireless controllers, including the backports.
After upgrading from 1337 to 14 (new 3.2.45 kernel) and a bit of module parameter tweaking, 11n is very acceptable compared to the 1337 iwlagn driver:
- no suspend/resume hangs or frequent disconnects
- great interactive performance
- 10MB/s (Bytes, not bits) throughput on a wireless -> 100bT LAN client rsync of Slackware 14 installation bits (about 1300MB)
- typical Bit Rates in the 180-270Mb/s range
Still get Tx retries but usability is no longer the issue. The router is an e2100L running dd-wrt build 21676:
- 40MHz channel width
- NG-Mixed
- channel 11, lower extension
- short preamble
- RTS/CTS enabled
Code:
~$ sudo lspci -v -s 02:00
02:00.0 Network controller: Intel Corporation Centrino Advanced-N 6200 (rev 35)
Subsystem: Intel Corporation Centrino Advanced-N 6200 2x2 AGN
Flags: bus master, fast devsel, latency 0, IRQ 43
Memory at da100000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [c8] Power Management version 3
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [e0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 00-23-14-ff-ff-0e-fe-2c
Kernel driver in use: iwlwifi
Code:
~$ iwconfig wlan0
wlan0 IEEE 802.11abgn ESSID:"2WIRE962"
Mode:Managed Frequency:2.462 GHz Access Point: 68:7F:74:C7:F7:63
Bit Rate=270 Mb/s Tx-Power=15 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=69/70 Signal level=-41 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:976381 Invalid misc:41 Missed beacon:0
Code:
options iwlwifi auto_agg=0 power_save=1 power_level=3 bt_coex_active=0
Here's the script used to monitor tweaking:
Code:
#!/bin/awk -f
# script to monitor TX aggregation issues with iwlwifi or iwlagn
#
# use: sudo tail -f -n 1000 /var/log/messages | <this awk script>
#
# edit 'wlan0' if it is not your wireless device
# edit 'iwlwifi' if you are using iwlagn
#
# prints running average of 'Tx aggregation enabled' errors per minute
/Linux version /{ print };
/iwlwifi .* Radio/{ # EDIT #
sub("\\[",""); sub("]","");
told=$6; tag=$0; R1=1
};
/wlan0: leased/{ print }; # EDIT #
R1==1 && /Tx agg/{
R1=0; L1=1
};
L1==1 && /Tx agg/{
sub("\\[",""); sub("]","");
tnew=$6; tdelta=(tnew-told); told=tnew;
tot+=tdelta; cnt++; avg=tot/cnt;
printf "%s avg=%4.1f tot=%6.1f TX agg\n",
$3,avg/60,tot/60
if((cnt % 10)==0){
system("iwconfig wlan0") # EDIT #
};
};
L1==1 && /wlan0: carrier/{ # EDIT #
print; L1=0; tdelta=tot=cnt=told=0
};