o11s / open80211s

open80211s
Other
242 stars 55 forks source link

ath9k_htc: irrational sleep behaviour in mesh PS #15

Closed mporsch closed 11 years ago

mporsch commented 11 years ago

Issue:

hardware wakes up way too frequent and early starts passing beacons to driver -> power consumption too high, because radio not asleep

Background:

To implement the wakeup scheduling for mesh PS in ath9k_htc we employ 2 routines:

[ 146.435133] mesh0: adding 00:03:7f:10:4e:31 to wakeup list [ 146.437802] ath: phy0: AWAKE -> NETWORK SLEEP [ 146.445256] ath: phy0: opmode is MESH_POINT [ 146.445268] ath: phy0: adding 00:03:7f:10:4e:31 to wakeup list [ 146.451251] ath: phy0: 00:03:7f:10:4e:31's beacon not received yet [ 146.994165] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 147.036151] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 147.077321] ath: phy0: bcn cc:7d:37:81:47:80 [ 147.097287] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 147.127184] ath: phy0: bcn f8:d1:11:65:f0:13 [ 147.127372] ath: phy0: NETWORK SLEEP -> AWAKE [ 147.140415] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 147.151240] ath: phy0: 00:03:7f:10:4e:31's beacon not received yet [ 147.183169] ath: phy0: bcn cc:7d:37:81:47:80 [ 147.185126] ath: phy0: bcn 00:03:7f:10:4e:31 [ 147.185137] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=1 [ 147.191259] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 1006592us [ 147.199324] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 147.219242] ath: phy0: AWAKE -> NETWORK SLEEP [ 147.227334] ath: phy0: NETWORK SLEEP -> AWAKE [ 147.244446] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 147.251261] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 947200us [ 147.277238] ath: phy0: AWAKE -> NETWORK SLEEP [ 147.282161] ath: phy0: bcn cc:7d:37:81:47:80 [ 148.018335] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 148.060150] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 148.120325] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 148.169223] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 148.173145] ath: phy0: bcn f8:d1:11:65:f0:13 [ 148.173313] ath: phy0: NETWORK SLEEP -> AWAKE [ 148.197239] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 1024us [ 148.209207] ath: phy0: bcn cc:7d:37:81:47:80 [ 148.215215] ath: phy0: bcn c0:ea:e4:14:a4:9b [ 148.223354] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 148.223459] ath: phy0: AWAKE -> NETWORK SLEEP [ 148.231318] ath: phy0: NETWORK SLEEP -> AWAKE [ 148.249277] ath: phy0: 00:03:7f:10:4e:31's beacon missed 1 time(s) -> next try in 962560us (margin 20TU) [ 148.249288] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 962560us [ 148.265270] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 148.275294] ath: phy0: AWAKE -> NETWORK SLEEP [ 149.042349] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 149.085287] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 149.175213] ath: phy0: bcn f8:d1:11:65:f0:13 [ 149.175397] ath: phy0: NETWORK SLEEP -> AWAKE [ 149.186210] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 149.199298] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 12288us [ 149.227275] ath: phy0: AWAKE -> NETWORK SLEEP [ 149.229249] ath: phy0: bcn 00:03:7f:10:4e:31 [ 149.229261] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=3 [ 149.235301] ath: phy0: NETWORK SLEEP -> AWAKE [ 149.247334] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 149.259284] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 984064us [ 149.285162] ath: phy0: AWAKE -> NETWORK SLEEP [ 149.293188] ath: phy0: NETWORK SLEEP -> AWAKE [ 149.311252] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 931840us [ 149.330153] ath: phy0: bcn cc:7d:37:81:47:80 [ 149.337259] ath: phy0: AWAKE -> NETWORK SLEEP [ 150.066166] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.111252] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.155615] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.169231] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.199294] ath: phy0: bcn f8:d1:11:65:f0:13 [ 150.199480] ath: phy0: NETWORK SLEEP -> AWAKE [ 150.210256] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.224283] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 18432us [ 150.250326] ath: phy0: AWAKE -> NETWORK SLEEP [ 150.252340] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.254352] ath: phy0: bcn 00:03:7f:10:4e:31 [ 150.254364] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=2 [ 150.258330] ath: phy0: NETWORK SLEEP -> AWAKE [ 150.271391] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.282156] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 986112us [ 150.308258] ath: phy0: AWAKE -> NETWORK SLEEP [ 150.314502] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.319213] ath: phy0: NETWORK SLEEP -> AWAKE [ 150.337262] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 930816us [ 150.363231] ath: phy0: AWAKE -> NETWORK SLEEP [ 150.373153] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.459193] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.476211] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.566352] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.578265] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.622127] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.661275] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.681195] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.722182] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.783224] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.827215] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 150.866296] ath: phy0: bcn cc:7d:37:81:47:80 [ 150.885201] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 150.970277] ath: phy0: bcn cc:7d:37:81:47:80 [ 151.030942] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 151.071003] ath: phy0: bcn cc:7d:37:81:47:80 [ 151.090380] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 151.132317] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 151.173318] ath: phy0: bcn cc:7d:37:81:47:80 [ 151.193215] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 151.223310] ath: phy0: bcn f8:d1:11:65:f0:13 [ 151.223483] ath: phy0: NETWORK SLEEP -> AWAKE [ 151.234131] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 151.247258] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 20480us [ 151.273265] ath: phy0: AWAKE -> NETWORK SLEEP [ 151.276376] ath: phy0: bcn cc:7d:37:81:47:80 [ 152.156245] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 152.156457] ath: phy0: NETWORK SLEEP -> AWAKE [ 152.174306] ath: phy0: 00:03:7f:10:4e:31's beacon missed 1 time(s) -> next try in 107520us (margin 20TU) [ 152.174318] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 107520us [ 152.197466] ath: phy0: bcn cc:7d:37:81:47:80 [ 152.200267] ath: phy0: AWAKE -> NETWORK SLEEP [ 153.138192] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 153.138438] ath: phy0: NETWORK SLEEP -> AWAKE [ 153.156262] ath: phy0: 00:03:7f:10:4e:31's beacon missed 2 time(s) -> next try in 139264us (margin 30TU) [ 153.156275] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 139264us [ 153.181444] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 153.181574] ath: phy0: AWAKE -> NETWORK SLEEP [ 153.324279] ath: phy0: bcn cc:7d:37:81:47:80 [ 153.326263] ath: phy0: bcn 00:03:7f:10:4e:31 [ 153.326275] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=3 [ 153.326424] ath: phy0: NETWORK SLEEP -> AWAKE [ 153.343496] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 153.344490] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 994304us [ 153.370304] ath: phy0: AWAKE -> NETWORK SLEEP [ 153.378321] ath: phy0: NETWORK SLEEP -> AWAKE [ 153.402265] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 936960us [ 153.426150] ath: phy0: bcn cc:7d:37:81:47:80 [ 153.428153] ath: phy0: AWAKE -> NETWORK SLEEP [ 154.162193] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 154.307234] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 154.348266] ath: phy0: bcn cc:7d:37:81:47:80 [ 154.352225] ath: phy0: bcn 00:03:7f:10:4e:31 [ 154.352236] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=2 [ 154.352360] ath: phy0: NETWORK SLEEP -> AWAKE [ 154.368266] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 154.370441] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 994304us [ 154.397257] ath: phy0: AWAKE -> NETWORK SLEEP [ 154.405273] ath: phy0: NETWORK SLEEP -> AWAKE [ 154.429246] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 935936us [ 154.455211] ath: phy0: AWAKE -> NETWORK SLEEP [ 155.186107] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 155.229198] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 155.269146] ath: phy0: bcn cc:7d:37:81:47:80 [ 155.289303] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 155.319342] ath: phy0: bcn f8:d1:11:65:f0:13 [ 155.319526] ath: phy0: NETWORK SLEEP -> AWAKE [ 155.331229] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 155.343215] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 21504us [ 155.369254] ath: phy0: AWAKE -> NETWORK SLEEP [ 155.373193] ath: phy0: bcn cc:7d:37:81:47:80 [ 155.375364] ath: phy0: bcn 00:03:7f:10:4e:31 [ 155.375437] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=1 [ 155.377329] ath: phy0: NETWORK SLEEP -> AWAKE [ 155.401294] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 986112us [ 155.427268] ath: phy0: AWAKE -> NETWORK SLEEP [ 155.433201] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 155.435307] ath: phy0: NETWORK SLEEP -> AWAKE [ 155.453237] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 934912us [ 155.474129] ath: phy0: bcn cc:7d:37:81:47:80 [ 155.479302] ath: phy0: AWAKE -> NETWORK SLEEP [ 156.260221] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 156.313314] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 156.355248] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 156.396213] ath: phy0: bcn cc:7d:37:81:47:80 [ 156.398319] ath: phy0: bcn 00:03:7f:10:4e:31 [ 156.398331] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=0 [ 156.398615] ath: phy0: NETWORK SLEEP -> AWAKE [ 156.416334] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 994304us [ 156.442244] ath: phy0: AWAKE -> NETWORK SLEEP [ 156.450349] ath: phy0: NETWORK SLEEP -> AWAKE [ 156.474252] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 936960us [ 156.498227] ath: phy0: bcn cc:7d:37:81:47:80 [ 156.500314] ath: phy0: AWAKE -> NETWORK SLEEP [ 157.234186] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 157.276241] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 157.317320] ath: phy0: bcn cc:7d:37:81:47:80 [ 157.336439] ath: phy0: bcn a0:21:b7:9a:fa:c3 [ 157.378187] ath: phy0: bcn c0:c1:c0:3b:5f:be [ 157.420331] ath: phy0: bcn cc:7d:37:81:47:80 [ 157.422165] ath: phy0: bcn 00:03:7f:10:4e:31 [ 157.422181] ath: phy0: updating 00:03:7f:10:4e:31 : BI=1000, DP=4, DC=3 [ 157.422425] ath: phy0: NETWORK SLEEP -> AWAKE [ 157.440242] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 994304us [ 157.466333] ath: phy0: AWAKE -> NETWORK SLEEP [ 157.474343] ath: phy0: NETWORK SLEEP -> AWAKE [ 157.498337] ath: phy0: next wakeup is 00:03:7f:10:4e:31 in 936960us [ 157.524381] ath: phy0: AWAKE -> NETWORK SLEEP [ 157.525368] ath: phy0: bcn cc:7d:37:81:47:80

mporsch commented 11 years ago

solution:

added workaround to immediately go to sleep when woken up before scheduled TBTT may cost a few milliamperes more