On Mon, Sep 19, 2011 at 11:38 AM, Kalle Valo <kvalo@xxxxxxxxxxxxxxxx> wrote: > When pinging form ar6003 to the AP RTT was high even when power save was > disabled: > > 100 packets transmitted, 97 received, 3% packet loss, time 99125ms > rtt min/avg/max/mdev = 1.875/46.733/795.506/139.181 ms > > After some investigation one reason for this was that received > multicast traffic confused the aggrecation logic and caused 400 ms > timeouts when receiving multicast frames from AP. > > A simple way to fix is to pass only unicast frames for aggregation. This > improves RTT: > > 100 packets transmitted, 99 received, 1% packet loss, time 99144ms > rtt min/avg/max/mdev = 2.083/13.084/403.390/56.794 ms I note that while the improvement above is enormous, a 403ms RTT for a packet is the rough equivalent of a detour around all of planet Earth... between your couch and the AP. Can outliers of this sort be improved? At what point are packets dropped? > > Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxxxx> > --- > drivers/net/wireless/ath/ath6kl/txrx.c | 16 +++++++++------- > 1 files changed, 9 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c > index fffd929..348c646 100644 > --- a/drivers/net/wireless/ath/ath6kl/txrx.c > +++ b/drivers/net/wireless/ath/ath6kl/txrx.c > @@ -1230,9 +1230,15 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet) > ath6kl_data_tx(skb1, ar->net_dev); > } > > - if (!aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no, > - is_amsdu, skb)) > - ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb); > + datap = (struct ethhdr *) skb->data; > + > + if (is_unicast_ether_addr(datap->h_dest) && > + aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no, > + is_amsdu, skb)) > + /* aggregation code will handle the skb */ > + return; > + > + ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb); > } > > static void aggr_timeout(unsigned long arg) > @@ -1249,10 +1255,6 @@ static void aggr_timeout(unsigned long arg) > if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress) > continue; > > - /* > - * FIXME: these timeouts happen quite fruently, something > - * line once within 60 seconds. Investigate why. > - */ > stats->num_timeouts++; > ath6kl_dbg(ATH6KL_DBG_AGGR, > "aggr timeout (st %d end %d)\n", > > -- > 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 > -- Dave Täht SKYPE: davetaht US Tel: 1-239-829-5608 http://the-edge.blogspot.com -- 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