Hi everyone,

I have a question regarding a problem I have been facing while using
an Ubiquiti XR9 Wifi card. This is basically a Wifi card which
operates in the 900MHz band and is based on the Atheros 5414 (supports
802.11b/g) chipset. There is an open source driver (mainly maintained
by Atheros and contributions from others) called ath5k.

For a research problem, I wanted to measure the amount of time elapsed
between when a packet enters the MAC layer queues (in this case
mac80211 transmit queue) and when it is actually transmitted over the
air. Measuring the entry into the MAC layer is easy as the stack runs
on the Host CPU and can be instrumented. For the exact time when the
frame is actually transmitted, the card provides support for reading
that information. More specifically, whenever a frame is transmitted,
a transmission status descriptor can be read. This transmission status
descriptor contains the exact timestamp (in TUs) at which the last
successful frame transmission attempt was made.

Interestingly enough, when I take the difference of two timestamps, I
get really large values on the order of 200,000 microseconds. This
only happens when there is a lot of data to send such as when using
iperf. On the other hand, if I just use ping and then look at the
value measured above, they are fine. I measured the values when there
was no contention from any other node (experiments were carried out
over a testbed where nodes are connected via coaxial cables). So,
basically I get large bloated values only when there are lot of
transmission attempts back to back.

I tried moving the point at which the first timestamp is taken as
close to the hardware as possible i.e. just before the frame is DMA'ed
to the card. I get the same large values which indicates that delays
are not being incurred due to queues on the host. Also, instead of
depending on the card for providing the second timestamp (the time at
which the frame is put on air), I tried to measure it myself within an
interrupt handler which is invoked whenever the host CPU is
interrupted by an interrupt generated as a result of receiving a frame
on the Wifi card. Also, in this case I get large values as before.
This indicates that the mechanism used to take the transmit timestamp
on the card is working fine.

I did some further research using the "mpstat" tool and found that the
number of interrupts per second (corresponding to the received frames)
generated by the card goes down if the offered load exceeds a certain
threshold. This seems to indicate that there is some problem in the
code running on the cards's own processor as the number of interrupts
going down as a result of more offered load is ungraceful behavior.

I was wondering if you could offer some insight into this or ways to
solve this problem?

Thanks and regards,
-Qasim
_______________________________________________
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to