Skip to contentSkip to conversation

2.6.25-rc9 -- bcm4306 performance is in the toilet

DISCUSSION Miles Lane 5 participants 8 messages Apr 16, 2008

lore
Share & tools
lore

Miles Lane

author
#0 lore raw

Hi,

I have a bcm4306 card in my desktop machine. I am running a build of 2= =2E6.25-rc9. I have tried fiddling with the network build options and = no matter what I select, my network performance is absolutely terrible = (between 0 - 24KBps). Connections take around 10-20 seconds to establi= sh. I have a cable modem, and usually see nearly instantaneous connect= ions and between 65-600KBps throughput. I just tried downloading somet= hing and am seeing this: 223B/s. Everything is intermittent and and o= ften times out.

I am attempting to collect a log for you to analyze. However, I am run= ning into some snags.
1) The latest firmware, which is called for in the latest kernel code,= won't work with my Ubuntu 8.10 kernel (2.6.24-16-386). I got the late= st iw git code downloaded, but it won't build for me:

# make
CC   interface.o
interface.c: In function =91get_if_type=92:
interface.c:50: error: =91NL80211_IFTYPE_MESH_POINT=92 undeclared (firs=
t use in this function)
interface.c:50: error: (Each undeclared identifier is reported only onc=
e
interface.c:50: error: for each function it appears in.)
interface.c: In function =91handle_interface_add=92:
interface.c:121: error: =91NL80211_ATTR_MESH_ID=92 undeclared (first us=
e in this function)
make: *** [interface.o] Error 1

I built with a bunch of network and wireless debugging options enabled = and am seeing this is my kernel log:

[ 1959.456654] phy0: TX to low-level driver (len=3D68) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1959.816931] phy0: TX to low-level driver (len=3D104) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1960.485441] phy0: TX to low-level driver (len=3D68) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1962.493413] phy0: TX to low-level driver (len=3D295) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1962.591237] phy0: TX to low-level driver (len=3D112) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1962.591824] phy0: TX to low-level driver (len=3D112) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1963.590056] phy0: TX to low-level driver (len=3D51) FC=3D0x0040 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1963.696498] printk: 6 messages suppressed.
[ 1963.696498] eth2: RX non-WEP frame, but expected encryption
[ 1968.081760] phy0: TX to low-level driver (len=3D285) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1968.794538] phy0: TX to low-level driver (len=3D104) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1969.334759] printk: 6 messages suppressed.
[ 1969.334759] eth2: RX non-WEP frame, but expected encryption
[ 1971.427823] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1977.083672] printk: 3 messages suppressed.
[ 1977.083672] eth2: RX non-WEP frame, but expected encryption
[ 1977.168797] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1977.747613] phy0: TX to low-level driver (len=3D112) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1977.830750] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1977.830936] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1979.361252] HW CONFIG: channel=3D1 freq=3D2412 phymode=3D2
[ 1979.396044] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.424945] HW CONFIG: channel=3D2 freq=3D2417 phymode=3D2
[ 1979.470621] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.491637] HW CONFIG: channel=3D3 freq=3D2422 phymode=3D2
[ 1979.534201] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.562325] HW CONFIG: channel=3D4 freq=3D2427 phymode=3D2
[ 1979.607111] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.637328] HW CONFIG: channel=3D5 freq=3D2432 phymode=3D2
[ 1979.684702] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.713532] HW CONFIG: channel=3D6 freq=3D2437 phymode=3D2
[ 1979.758496] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.787576] HW CONFIG: channel=3D7 freq=3D2442 phymode=3D2
[ 1979.836341] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.865464] HW CONFIG: channel=3D8 freq=3D2447 phymode=3D2
[ 1979.911072] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1979.942569] HW CONFIG: channel=3D9 freq=3D2452 phymode=3D2
[ 1979.991364] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1980.016228] HW CONFIG: channel=3D10 freq=3D2457 phymode=3D2
[ 1980.058783] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1980.087823] HW CONFIG: channel=3D11 freq=3D2462 phymode=3D2
[ 1980.131718] phy0: TX to low-level driver (len=3D42) FC=3D0x0040 DUR=3D=
0x0000 A1=3Dff:ff:ff:ff:ff:ff A2=3D00:0c:e5:53:2c:3e A3=3Dff:ff:ff:ff:f=
f:ff
[ 1980.163187] HW CONFIG: channel=3D1 freq=3D2412 phymode=3D2
[ 1980.175182] phy0: TX to low-level driver (len=3D24) FC=3D0x0148 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1980.838943] printk: 2 messages suppressed.
[ 1980.838943] eth2: RX non-WEP frame, but expected encryption
[ 1984.941340] printk: 3 messages suppressed.
[ 1984.941355] eth2: RX non-WEP frame, but expected encryption
[ 1986.486071] phy0: TX to low-level driver (len=3D104) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1990.238587] printk: 7 messages suppressed.
[ 1990.238587] eth2: RX non-WEP frame, but expected encryption
[ 1994.877568] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1994.879422] phy0: TX to low-level driver (len=3D104) FC=3D0x4108 DUR=
=3D0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0=
e:ed:ba
[ 1994.881046] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1994.884351] phy0: TX to low-level driver (len=3D92) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1995.065572] phy0: TX to low-level driver (len=3D80) FC=3D0x4108 DUR=3D=
0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e=
d:ba
[ 1995.065572] phy0: TX to low-level driver (len=3D80) FC=3D0x4108 DUR=3D=

0x00da A1=3D00:1b:2f:0e:ed:ba A2=3D00:0c:e5:53:2c:3e A3=3D00:1b:2f:0e:e= d:ba
--
To unsubscribe from this list: send the line "unsubscribe linux-wireles= s" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#1 lore raw
Quoted 6 lines · Miles Lane

Hi,

I have a bcm4306 card in my desktop machine. I am running a build of 2.6.25-rc9. I have tried fiddling with the network build options and no matter what I select, my network performance is absolutely terrible (between 0 - 24KBps). Connections take around 10-20 seconds to establish. I have a cable modem, and usually see nearly instantaneous connections and between 65-600KBps throughput. I just tried downloading something and am seeing this: 223B/s. Everything is intermittent and and often times out.

I am attempting to collect a log for you to analyze. However, I am running into some snags.
1) The latest firmware, which is called for in the latest kernel code, won't work with my Ubuntu 8.10 kernel (2.6.24-16-386). I got the latest iw git code downloaded, but it won't build for me:

Which revision of the BCM4306 do you have? Which driver (b43, b43legacy, or bcm43xx) are you running?

Based on comment 1) above, I think you are using b43, but why should I have to guess?

Larry

author
#2 lore raw
Quoted 19 lines · Larry Finger
Quoted 3 lines · Miles Lane

Hi,

I have a bcm4306 card in my desktop machine. I am running a build of

2.6.25-rc9. I have tried fiddling with the network build options and no matter what I select, my network performance is absolutely terrible (between 0 - 24KBps). Connections take around 10-20 seconds to establish. I have a cable modem, and usually see nearly instantaneous connections and between 65-600KBps throughput. I just tried downloading something and am seeing
this: 223B/s. Everything is intermittent and and often times out.

Quoted 2 lines

I am attempting to collect a log for you to analyze. However, I am

running into some snags.

Quoted 1 line

1) The latest firmware, which is called for in the latest kernel code,

won't work with my Ubuntu 8.10 kernel (2.6.24-16-386). I got the latest iw git code downloaded, but it won't build for me:

Quoted 1 line
Quoted 5 lines

Which revision of the BCM4306 do you have? Which driver (b43, b43legacy, or
bcm43xx) are you running?

Based on comment 1) above, I think you are using b43, but why should I have
to guess?

Point taken.

This information is collected while running the Ubuntu 2.6.24-16-386 kernel:

b43                   113952  0
ssb                    31236  1 b43
mac80211              162708  1 b43
led_class               5124  1 b43
input_polldev           5000  1 b43
rfkill                  7568  3 b43,rfkill_input

01:06.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

[   80.331869] b43-phy0: Broadcom 4306 WLAN found
[   80.404197] phy0: Selected rate control algorithm 'simple'
...
[   94.554107] input: b43-phy0 as /devices/virtual/input/input6
[   96.164622] Registered led device: b43-phy0:tx
[   96.165130] Registered led device: b43-phy0:rx
[   96.165535] Registered led device: b43-phy0:radio

...

Any idea why iw won't build?

interface.c: In function 'get_if_type':
interface.c:50: error: 'NL80211_IFTYPE_MESH_POINT' undeclared (first use in this function)
interface.c:50: error: (Each undeclared identifier is reported only once interface.c:50: error: for each function it appears in.) interface.c: In function 'handle_interface_add':
interface.c:121: error: 'NL80211_ATTR_MESH_ID' undeclared (first use in this function)

#3 lore raw
Quoted 9 lines

interface.c: In function 'get_if_type':
interface.c:50: error: 'NL80211_IFTYPE_MESH_POINT' undeclared (first use in this function)
interface.c:50: error: (Each undeclared identifier is reported only once interface.c:50: error: for each function it appears in.) interface.c: In function 'handle_interface_add':
interface.c:121: error: 'NL80211_ATTR_MESH_ID' undeclared (first use in this function)

You need a newer copy of nl80211.h or revert back to an older revision of iw before the mesh code was added.

johannes

author
#4 lore raw
Quoted 10 lines · Johannes Berg
Quoted 9 lines

interface.c: In function 'get_if_type':
interface.c:50: error: 'NL80211_IFTYPE_MESH_POINT' undeclared (first use in this function)
interface.c:50: error: (Each undeclared identifier is reported only once interface.c:50: error: for each function it appears in.) interface.c: In function 'handle_interface_add':
interface.c:121: error: 'NL80211_ATTR_MESH_ID' undeclared (first use in this function)

Quoted 2 lines

You need a newer copy of nl80211.h or revert back to an older revision of iw before the mesh code was added.

Am I required to get the linux-wireless git kernel tree in order to get the newer nl80211.h?

I checked in the 2.6.25-rc9 tree and was surprised to find four copies of nl80211.h:
0 2008-04-14 23:48 ./include/config/nl80211.h
10074 2008-04-11 16:32 ./include/linux/nl80211.h
510 2008-04-11 16:32 ./net/wireless/nl80211.h
10074 2008-04-15 05:50 ./usr/include/linux/nl80211.h

It seems interesting that two copies have the same byte count and that one of the files is empty. What's up with that?

Thanks,
Miles

#5 lore raw
Quoted 2 lines · Miles Lane

Am I required to get the linux-wireless git kernel tree in order to get the newer nl80211.h?

You can take the latest compat-wireless, as suggested on the iw page:
http://linuxwireless.org/en/users/Documentation/iw

Quoted 9 lines

I checked in the 2.6.25-rc9 tree and was surprised to find four copies of nl80211.h:
0 2008-04-14 23:48 ./include/config/nl80211.h
10074 2008-04-11 16:32 ./include/linux/nl80211.h
510 2008-04-11 16:32 ./net/wireless/nl80211.h
10074 2008-04-15 05:50 ./usr/include/linux/nl80211.h

It seems interesting that two copies have the same byte count and that one of the files is empty. What's up with that?

Only files in "include" are for external use. Files under "include/config" indicate kernel configuration. You don't need that. That leaves include/linux/nl80211.h

Another approach. iw sources include linux/nl80211.h, and defconfig refers to "include". That gives the same answer.

Signature · 2 lines
Regards,
Pavel Roskin
#6 lore raw
In reply to Miles Lane
Quoted 3 lines

Am I required to get the linux-wireless git kernel tree in order to get the newer nl80211.h?

No, you can just get it from gitweb too :) But other than that, probably. Or a compat tarball would work.

Quoted 9 lines

I checked in the 2.6.25-rc9 tree and was surprised to find four copies of nl80211.h:
0 2008-04-14 23:48 ./include/config/nl80211.h
10074 2008-04-11 16:32 ./include/linux/nl80211.h
510 2008-04-11 16:32 ./net/wireless/nl80211.h
10074 2008-04-15 05:50 ./usr/include/linux/nl80211.h

It seems interesting that two copies have the same byte count and that one of the files is empty. What's up with that?

The empty one is created when you configure, because there's a kconfig symbol for nl80211. I'm not sure why it is empty, it should have "#define CONFIG_NL80211 1" or so in it. The ./usr one is a copy of the ./include one, that's done by headers_install (IIRC), the net/wireless/nl80211.h one is for some local stuff in that dir.

johannes

#7 lore raw
In reply to Miles Lane
Quoted 4 lines

I built with a bunch of network and wireless debugging options enabled and am seeing this is my kernel log:

[...]

Beware of sniffing in the toilet :-)