svn commit: r225025 - user/adrian/if_ath_tx/sys/dev/ath

Adrian Chadd adrian at FreeBSD.org
Sat Aug 20 10:44:14 UTC 2011


Author: adrian
Date: Sat Aug 20 10:44:13 2011
New Revision: 225025
URL: http://svn.freebsd.org/changeset/base/225025

Log:
  More things to look at and fix!

Modified:
  user/adrian/if_ath_tx/sys/dev/ath/README

Modified: user/adrian/if_ath_tx/sys/dev/ath/README
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/README	Sat Aug 20 09:31:52 2011	(r225024)
+++ user/adrian/if_ath_tx/sys/dev/ath/README	Sat Aug 20 10:44:13 2011	(r225025)
@@ -2,6 +2,7 @@ Things to debug!
 
 * Write something in ath_tx_default_comp() that ensures the buffer is unlinked
   (ie, not part of an aggregate)
+  - Done
 
 * Write something in the aggr comp function which checks that the number of
   frames in the aggregate list matches bf_stats.bfs_nframes
@@ -13,8 +14,60 @@ Things to debug!
 * Is it some missing sequence numbers? ie, is addto_baw being called with
   sequence numbers out of order, or "gaps" in the sequence numbers?
 
+* Scheduler issues - add some statistics to track how many packets are going
+  out as aggregates (looks like around 84%) -and- what the distribution of
+  aggregate packets is like. Abuse a histogram - will only send up to 64
+  aggregate packets at once, so track:
+
+  + single packet returned from ath_tx_form_aggr()
+  + single packet with no BAW returned from ath_tx_form_aggr()
+  + single packet with non HT rate
+  + aggregate packets (ie, how many times were aggregates sent)
+  + aggregate sub-frame count histogram, 2->64 sub-frames
+
+  I can't help but think we're sending very small aggregates.
+
+* The RX side (AR9160, FreeBSD) seems to lock up from time to time, with
+  stuck beacons and RXORN interrupts (ie, RX FIFO overflows.) Why?
+
+* There's the possibility that ampdu seqno packets have sequence numbers
+  allocated but are flushed -before- they're added to the BAW.
+  I guess this is why seqno allocation should be delayed until just before
+  it's queued to the hardware.
+
+  That should be .. well, fixed.
+
 Things that need doing!
 
+* Add a swretrysubframe and swretrysubframemax counter, use it
+
+* Scheduling is wrong - the software TXQ needs more time to assemble
+  frames together for aggregation.
+
+  Based on Linux ath9k:
+
+  + Don't base it completely on how "deep" the hardware queue is, that
+    can involve multiple TIDs, not just one!
+  + If the TID has say, more than two hardware queued aggregate frames,
+    or more than say eight hardware-queued normal frames, don't schedule it.
+  + When the completion function is called, check to see if there are frames
+    in the queue and the frames queued to hardware has dropped. If so,
+    schedule the TID. If not, give the TID some more time to gather packets.
+
+  The logic:
+
+  + The MAC has to be kept busy enough to not wait around for data to send.
+    Not more, not less.
+  + Immediately handling a TID when the hardware is busy sending aggregate
+    frames is just plain silly - as it's already busy. So queuing the frames
+    to the hardware doesn't buy you anything, it doesn't decrease latency, etc.
+  + So instead, just feed it enough frames to keep the hardware queue busy,
+    and let the TID software queue gather up more frames.
+  + Finally, if the TID has a couple frames queued to the hardware
+    -and- there's only one frame to send, don't just queue it.
+    Wait until the completion handlers are called, then schedule the
+    queue function again.
+
 * RIFS? Do I care about supporting RIFS?
 
 * Fast Frames? Do I care about supporting FF here, or is it done via suitable


More information about the svn-src-user mailing list