Date: Mon, 6 Feb 2006 21:19:05 +0000 (GMT) From: Nate Nielsen <nielsen-list@memberwebs.com> To: Sam Leffler <sam@errno.com> Cc: "freebsd-net@FreeBSD.org" <freebsd-net@freebsd.org> Subject: Re: Polling for ath driver Message-ID: <20060206211904.56054DCA99E@mail.npubs.com> References: <20060205011931.E5F08DCA99E@mail.npubs.com> <43E63FC3.2030409@errno.com> <20060206050301.AC895DCAA3F@mail.npubs.com> <43E6E4B6.50100@errno.com> <20060206083013.99D32DCAA14@mail.npubs.com> <43E78483.3030106@errno.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Sam Leffler wrote:
> I see no statistics; are you sure you are not being pounded by phy
> errors.
I've put together a small patch to the ath driver which exposes some
interupt statistic sysctls, and a small shell script to read these and
list them once per second. Both are attached.
Here are the results from the hostap box, configured like so:
ath0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.9.6.1 netmask 0xffffff00 broadcast 10.9.6.255
ether 00:15:6d:10:17:03
media: IEEE 802.11 Wireless Ethernet autoselect <hostap>
status: associated
ssid blah channel 165 bssid 00:15:6d:10:17:03
authmode OPEN privacy OFF txpowmax 57 dtimperiod 1 bintval 100
When not active, we see (rx interrupts, tx interrupts, and all other
interrupts, respectively, one line per second):
RX:0 TX:0 OTH:10
RX:0 TX:0 OTH:11
RX:0 TX:0 OTH:10
RX:0 TX:0 OTH:11
RX:0 TX:0 OTH:10
RX:0 TX:0 OTH:11
RX:0 TX:0 OTH:10
RX:0 TX:0 OTH:11
RX:0 TX:0 OTH:10
RX:0 TX:0 OTH:10
I'm guessing the 10 or 11 interrupts per second are softawre beacon
interrupts. I did not spend time verifying this. Once we put load
through box (around 20+ Mb/s, two TCP streams, both directions
simultaneously):
RX:2377 TX:506 OTH:12
RX:2209 TX:509 OTH:10
RX:2118 TX:465 OTH:11
RX:2143 TX:482 OTH:10
RX:2145 TX:496 OTH:11
RX:2154 TX:493 OTH:10
RX:2123 TX:507 OTH:10
RX:2089 TX:471 OTH:11
RX:2021 TX:451 OTH:9
RX:2148 TX:496 OTH:10
As you noted the TX interrupts are mitigated.
During this time we have a normal amount of phy errors:
# athstats ath0 | cut -c 62-70
phyerr
2170
0
64
71
99
77
102
87
68
72
65
> You haven't even answered my question about what ath devices
> you're using.
Sorry bout that. These are 802.11a Mini-PCI radios, the chipset is
actually marked 'AR5213A' but I guess it's treated as a 5212:
<Atheros 5212> mem 0xe1000000-0xe100ffff irq 10 at device 10.0 on pci0
mac 5.9 phy 4.3 radio 3.6
Cheers,
Nate
[-- Attachment #2 --]
Index: sys/dev/ath/if_ath.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ath/if_ath.c,v
retrieving revision 1.94.2.8
diff -p -U3 -r1.94.2.8 if_ath.c
--- sys/dev/ath/if_ath.c 29 Jan 2006 07:33:27 -0000 1.94.2.8
+++ sys/dev/ath/if_ath.c 6 Feb 2006 21:08:53 -0000
@@ -200,6 +200,13 @@ static int ath_regdomain = 0; /* regul
SYSCTL_INT(_hw_ath, OID_AUTO, regdomain, CTLFLAG_RD, &ath_regdomain,
0, "regulatory domain");
+/* XXXX TEMP: for testing number of interrupts */
+struct { int rx_intr; int tx_intr; int oth_intr; } intr_table;
+SYSCTL_INT(_hw_ath, OID_AUTO, rx_intr, CTLFLAG_RD, &(intr_table.rx_intr), 0, "XXX TEMP: rx interrupts generated");
+SYSCTL_INT(_hw_ath, OID_AUTO, tx_intr, CTLFLAG_RD, &(intr_table.tx_intr), 0, "XXX TEMP: tx interrupts generated");
+SYSCTL_INT(_hw_ath, OID_AUTO, oth_intr, CTLFLAG_RD, &(intr_table.oth_intr), 0, "XXX TEMP: other interrupts generated");
+/* XXXXXX */
+
#ifdef AR_DEBUG
static int ath_debug = 0;
SYSCTL_INT(_hw_ath, OID_AUTO, debug, CTLFLAG_RW, &ath_debug,
@@ -258,6 +265,9 @@ ath_attach(u_int16_t devid, struct ath_s
HAL_STATUS status;
int error = 0, i;
+ /* XXX TEMP */
+ memset(&intr_table, 0, sizeof(intr_table));
+
DPRINTF(sc, ATH_DEBUG_ANY, "%s: devid 0x%x\n", __func__, devid);
ifp = sc->sc_ifp = if_alloc(IFT_ETHER);
@@ -712,6 +722,15 @@ ath_intr(void *arg)
ath_hal_getisr(ah, &status); /* NB: clears ISR too */
DPRINTF(sc, ATH_DEBUG_INTR, "%s: status 0x%x\n", __func__, status);
status &= sc->sc_imask; /* discard unasked for bits */
+
+ /* XXX TEMP: */
+ if (status & HAL_INT_RX)
+ ++intr_table.rx_intr;
+ else if(status & HAL_INT_TX)
+ ++intr_table.tx_intr;
+ else
+ ++intr_table.oth_intr;
+
if (status & HAL_INT_FATAL) {
/*
* Fatal errors are unrecoverable. Typically
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060206211904.56054DCA99E>
