Search Linux Wireless

Re: ath5k: Weird Retransmission Behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon December 6 2010 15:30:00 Jonathan Guerin wrote:
> Hi,
> 
> 
> I've been doing some investigation into the behaviour of contention
> windows and retransmissions.
> 
> Firstly, I'll just describe the test scenario and setup that I have. I
> have 3 Via x86 nodes with Atheros AR5001X+ cards. They are tethered to
> each other via coaxial cables, into splitters. They have 20dB of fixed
> attenuation applied to each antenna output, plus a programmable
> variable attenuator on each link. One node acts as a sender, one as a
> receiver, and one simply runs a monitor-mode interface to capture
> packet traces. All 3 are running kernel version 2.6.37-rc2. The sender
> and receiver are configured as IBSS stations and are tuned to 5.18
> GHz.
> 
> Here's a really dodgy ASCII diagram of the setup:
> 
> S-----[variable attenuator]-----R
> 
> 
> 
> +------------M-------------------------+
> 
> where S is the Sender node, R is the Receiver node and M is the
> Monitoring capture node.
> 
> 
> Secondly, I have written a program which will parse a captured pcap
> file from the Monitoring station. It looks for 'chains' of frames with
> the same sequence number, and where the first frame has the Retry bit
> set to false in the header and all following have it set to true. Any
> deviation from this, and the program drops the current chain without
> including it in its stats, and looks for the next chain matching these
> requirements. It averages the amount of time per transmission number
> (i.e. the average of all transmissions which were the first, second,
> third etc. for a unique sequence number). The transmission time of a
> frame is the amount of time between the end of the frame and the end
> of the previous. It tracks these 'chains' of frames with the same
> sequence number. It considers the last transmission number in each
> chain as the 'final' transmission.
> 
> Finally, the link is loaded using a saturated UDP flow, and the data
> rate is fixed to 54M and 36M. This is specified in the output. The
> output is attached below.
> 
> The output describes the fixed link data rate, the variable
> attenuator's value, the delivery ratio, and the number of transmitted
> packets/s. I've added a discussion per result set. Each line outputs
> the transmission number, the average transmission time for this
> number, the total number of transmissions, the number of frames which
> ended their transmissions at this number (i.e. where the chain ended
> its final transmission - this is equivalent to the retransmission
> value from the Radiotap header + 1), and the average expected
> transmission time for all that particular transmission number in all
> chains. This is calculated using the airtime calculations from the
> 802.11a standard, with the receipt of an ACK frame, as well as a SIFS
> (16us), which is 28us. If the transmission did not receive an ACK, a
> normal ACK timeout is 50 us, but ath5k appears to have this set to 25
> us, so the value shouldn't be too far out what to expect.
> 
> The header to each result refers to the rate it was fixed at, as well
> as the variable attenuation being added to it. The link also has a
> fixed 40dB of attenuation both to protect the cards, as well as give
> the necessary range for the variable attenuator to control link
> quality.
> 
> ==> iperf_33M_rate_36M_att_1dB.pcap.txt <== (good link, 100% delivery)
> Average time per TX No:
> TXNo	Avg			No		Final    	ExpectedAvg
> 1		477.604980	10463	10462   	509
> Overall average: 477.604980
> 
> [Discussion:] Nothing, appears normal.
> 
> 
> ==> iperf_33M_rate_36M_att_18dB.pcap.txt <== (lossy link, but still
> 100% delivery)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAvg
> 1		476.966766	9808		8138   	509
> 2		550.320496	1663		1403   	581
> 3		697.552917	255		218   	725
> 4		1028.756714	37		30		1013
> 5		1603.428589	7		7   		1589
> Overall average: 494.514618
> 
> [Discussion:] Nothing, appears normal. Contention window appears to
> double normally.
> 
> ==> iperf_33M_rate_36M_att_19dB.pcap.txt <== (lossy link, but still
> 100% delivery)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAvg
> 1		477.510437	14893	8653   	509
> 2		546.149048	6205		3624   	581
> 3		692.270203	2561		1552   	725
> 4		980.565857	1002		596   	1013
> 5		1542.079956	400		252   	1589
> 6		2758.693848	147		89		2741
> 7		4971.500000	56		32   		5045
> 8	 	4689.043457	23		15   		5045
> 9		4487.856934	7		3   		5045
> 10		442.250000	4		3   		5045
> 11		488.000000	1		1   		5045
> Overall average: 580.976807
> 
> [Discussion:] Contention window appears to double until a plateau from
> 7 through 9. Weirdly, the contention window appears to be drop again
> from 10, but
> there are too few frames to draw a conclusion.
> 
> ==> iperf_33M_rate_36M_att_21dB.pcap.txt <== (lossy link, < 1% delivery)
> TXNo	Avg			No	     	Final   ExpectedAvg
> 1		485.390198	1940		3	   509
> 2		479.113434	1922		2	   581
> 3		479.681824	1914		0   	   725
> 4		485.083038	1903		1   	   1013
> 5		492.088135	1895		4   	   1589
> 6		508.322510	1876		1   	   2741
> 7		524.697876	1870		1   	   5045
> 8		543.054382	1857		0   	   5045
> 9		522.970703	1842		0   	   5045
> 10		478.204132	1837		0   	   5045
> 11		476.520782	1828		0   	   5045
> 12		477.531342	1818		0   	   5045
> 13		476.743652	1810		0   	   5045
> 14		478.936554	1797		0   	   5045
> 15		480.699097	1788		0   	   5045
> 16		482.734314	1784		0   	   5045
> 17		491.608459	1775		0   	   5045
> 18		497.458984	1767		1   	   5045
> 19		495.067932	1752		7   	   5045
> 20		478.102417	1738		295     5045
> 21		475.128845	1436		1402   5045
> 22		492.692322	26		0	   5045
> 23		471.576935	26		0   	   5045
> 24		466.884613	26		0   	   5045
> 25		476.269226	26		0   	   5045
> 26		462.192322	26		0   	   5045
> 27		480.961548	26		1   	   5045
> 28		463.600006	25		24   	   5045
> Overall average: 491.068359
> 
> [Discussion:] Contention does not appear to increase, and the number
> of transmission per frame is very large. This behaviour is replicated
> with the 54M scenario when a link is extremely lossy.
> 
> ==> iperf_33M_rate_54M_att_1dB.pcap.txt <== (good link, 2400 packets/s)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAverage
> 1		365.551849	23957	23935   	393
> 2		409.571442	21		21   		465
> Overall average: 365.590424
> 
> [Discussion: ] Appears relatively normal.
> 
> ==> iperf_33M_rate_54M_att_10dB.pcap.txt <== (lossy link, but still
> 100% delivery, 1500 packets/s)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAverage
> 1		364.501190	10134	5915   	393
> 2		434.138000	4196		2461   	465
> 3		579.482300	1721		1036   	609
> 4		837.005859	682		397   	897
> 5		1365.279175	283		155   	1473
> 6		2572.007812	128		81 	  	2625
> 7		4905.195801	46		27   		4929
> 8		4985.947266	19		12   		4929
> 9		4627.285645	7		4   		4929
> 10		366.000000	3		1   		4929
> 11		335.500000	2		2   		4929
> Overall average: 473.477020
> 
> [Discussion: ] Appears fine, until transmission 10, which appears to
> drop the contention window back to an equivalent first transmission
> value, but not enough frames at this point to draw a conclusion.
> 
> ==> iperf_33M_rate_54M_att_11dB.pcap.txt <== (lossy link, but still
> 100% delivery, 680 packets/s)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAverage
> 1		362.082825	2149		539   	393
> 2		434.672485	1606		368   	465
> 3		582.795288	1231		307   	609
> 4		820.347107	919		237   	897
> 5		1424.753296	673		194   	1473
> 6		2626.403320	466		143   	2625
> 7		4734.233887	308		83   		4929
> 8		4830.244141	217		65   		4929
> 9		4449.702637	148		33   		4929
> 10		360.114044	114		36   		4929
> 11		366.000000	78		20   		4929
> 12		460.655182	58		20   		4929
> 13		544.184204	38		9   		4929
> 14		893.965515	29		7   		4929
> 15		1361.409058	22		8   		4929
> 16		2675.285645	14		2   		4929
> 17		4239.500000	12		5   		4929
> 18		3198.142822	7		2   		4929
> 19		5111.799805	5		3   		4929
> 20		1403.000000	2		1   		4929
> Overall average: 1063.129883
> 
> [Discussion: ] Everything appears fine until, once again, transmission
> 10, when the contention windows appears to 'restart' - it climbs
> steadily until 17. After this point, there are not enough frames to
> draw any conclusions.
> 
> ==> iperf_33M_rate_54M_att_12dB.pcap.txt <== (lossy link, 6% delivery,
> 400 packets/s)
> Average time per TX No:
> TXNo	Avg			No		Final   	ExpectedAvg
> 1		360.460724	4482		14   		393
> 2		366.068481	4453		16   		465
> 3		360.871735	4413		13   		609
> 4		361.535553	4386		18   		897
> 5		367.526062	4357		60   		1473
> 6		360.003967	4283		3839   	2625
> 7		361.778046	419		416   	4929
> Overall average: 362.732910
> 
> [Discussion:] This exhibits the same problem as the extremely lossy
> 36M link - the contention window does not appear to rise. Even with
> enough frames to draw a good conclusion at transmission 6, the
> transmission time average (360) is way below the expected average
> (2625).
> ==> END OF OUTPUT <==
> 
> The question here is: why does ath5k/mac80211 send out so many
> transmissions, and why does it vary so much based on link quality?
> Additionally, why does it appear to 'reset' the contention window
> after 9 retransmissions of a frame?
> 
> Cheers,
> 
> Jonathan

Hi Jonathan!

This is a very interesting setup and test. I guess nobody has looked so 
closely yet... I think this is not necessarily ath5k related, but may be a bug 
of mac80211 or minstrel, but not sure yet, of course...

It's normal, that the CW is reset after the retry limits are reached, this is 
what the standard says:

"The CW shall be reset to aCWmin after every successful attempt to transmit an 
MPDU or MMPDU, when SLRC reaches dot11LongRetryLimit, or when SSRC reaches 
dot11ShortRetryLimit." (802.11-2007 p261)

But it seems weird that there are so many retransmissions. The default maximum 
numbers of retransmissions should be 7 for short frames and 4 for long frames 
(dot11[Short|Long]RetryLimit), and this is what is set as defaults in mac80211 
(local->hw.conf.short_frame_max_tx_count). Seems we are getting many 
retransmissions from minstel, i added some debug prints:

*** txdesc tries 3
*** mrr 0 tries 3 rate 11
*** mrr 1 tries 3 rate 11
*** mrr 2 tries 3 rate 11

This seems to be the normal case and that would already result in 12 
transmissions.

Another thing that strikes me here is: why use multi rate retries if the rate 
is all the same? (Ignore the actual value of the rate, this is the HW rate 
code).

Other examples: 

*** txdesc tries 2
*** mrr 0 tries 9 rate 12
*** mrr 1 tries 2 rate 13
*** mrr 2 tries 3 rate 11

= 16 transmissions in sum.

*** txdesc tries 9
*** mrr 0 tries 3 rate 11
*** mrr 1 tries 9 rate 8
*** mrr 2 tries 3 rate 11

= 24 transmissions in sum. Again, rate[1] and rate[3] are the same, so why 
bother setting it up twice?

bruno
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux