Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch --- net/batman-adv/bat_v_elp.c | 3 ++- net/batman-adv/main.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index f257897..46c6a00 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -67,7 +67,8 @@ static void batadv_v_elp_start_timer(struct batadv_hard_iface *hard_iface) * batadv_v_elp_get_throughput - get the throughput towards a neighbour * @neigh: the neighbour for which the throughput has to be obtained * - * Return: the throughput towards the given neighbour. + * Return: The throughput towards the given neighbour in multiples of 100kpbs + * (a value of '1' equals to 0.1Mbps, '10' equals 1Mbps, etc). */ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) { diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h index 7b05f68..db45336 100644 --- a/net/batman-adv/main.h +++ b/net/batman-adv/main.h @@ -62,7 +62,7 @@ #define BATADV_TQ_TOTAL_BIDRECT_LIMIT 1
/* B.A.T.M.A.N. V */ -#define BATADV_THROUGHPUT_DEFAULT_VALUE 10 +#define BATADV_THROUGHPUT_DEFAULT_VALUE 10 /* 1 Mbps */ #define BATADV_ELP_PROBES_PER_NODE 2 #define BATADV_ELP_MIN_PROBE_SIZE 200 /* bytes */ #define BATADV_ELP_PROBE_MAX_TX_DIFF 100 /* milliseconds */
The expected throughout returned by the cfg80211 API is expressed in kbps while internally batman-adv stores multiples of 100kbps. Ensure the conversion is performed properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch --- net/batman-adv/bat_v_elp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 46c6a00..461a765 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -100,7 +100,7 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) return 0; } if (!ret) - return sinfo.expected_throughput / 10; + return sinfo.expected_throughput / 100; }
/* unsupported WiFi driver version */
On Monday 01 February 2016 14:34:33 Marek Lindner wrote:
The expected throughout returned by the cfg80211 API is expressed in kbps while internally batman-adv stores multiples of 100kbps. Ensure the conversion is performed properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
net/batman-adv/bat_v_elp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 46c6a00..461a765 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -100,7 +100,7 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) return 0; } if (!ret)
return sinfo.expected_throughput / 10;
}return sinfo.expected_throughput / 100;
Just tested it here and can say that it now show the same value as `iw dev adhoc0 station dump`. But the output of `iw dev adhoc0 station dump` confuses me. I can get easily get over 40 Mbit/s but the output of `iw dev adhoc0 station dump` show me 4.705Mbps. Also the output of `cat /sys/kernel/debug/ieee80211/phy*/netdev:adhoc0/stations/*/rc_stats` look definitely more like ~40 Mbit/s.
Antonio, can you please check my tests and my conclusion (+patch [1]).
root@OpenWrt:/# batctl tp ac:86:74:00:99:02 Throughput meter called towards ac:86:74:00:99:02 Test duration 10100ms. Sent 78082500 Bytes. Throughput: 7.37 MB/s (61.84 Mbps) root@OpenWrt:/# iw dev adhoc0 station dump; batctl o Station ac:86:74:00:99:02 (on adhoc0) inactive time: 130 ms rx bytes: 127568010 rx packets: 322570 tx bytes: 352672038 tx packets: 310920 tx retries: 3732 tx failed: 0 signal: -22 [-30, -22] dBm signal avg: -21 [-30, -22] dBm tx bitrate: 144.4 MBit/s MCS 15 short GI rx bitrate: 72.2 MBit/s MCS 7 short GI expected throughput: 4.705Mbps authorized: yes authenticated: yes preamble: long WMM/WME: yes MFP: no TDLS peer: no [B.A.T.M.A.N. adv 2016.0, MainIF/MAC: adhoc0/ac:86:74:08:39:92 (bat0 BATMAN_V)] Originator last-seen ( throughput) Nexthop [outgoingIF]: Potential nexthops ... ac:86:74:00:99:02 0.290s ( 8.1) ac:86:74:00:99:02 [ adhoc0]: ac:86:74:00:99:02 ( 8.1) root@OpenWrt:/# cat /sys/kernel/debug/ieee80211/phy0/netdev:adhoc0/stations/ac:86:74:00:99:02/rc_stats
best ____________rate__________ ________statistics________ ________last_______ ______sum-of________ mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob) sd(prob)] [prob.|retry|suc|att] [#success | #attempts] CCK LP 1 1.0M 120 10548 0.7 0.7 100.0 0.0 100.0 2 0 0 5 5 CCK LP 1 2.0M 121 5476 1.5 1.5 100.0 0.0 100.0 0 0 0 1 1 CCK LP 1 5.5M 122 2411 3.6 3.6 100.0 0.0 100.0 0 0 0 1 1 CCK LP 1 11.0M 123 1535 5.7 5.7 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS0 0 1477 5.6 5.6 100.0 0.0 100.0 1 0 0 1 1 HT20 LGI 1 MCS1 1 739 10.5 10.5 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS2 2 493 14.9 14.9 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS3 3 369 18.7 18.7 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS4 4 246 25.3 25.3 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS5 5 185 30.6 30.6 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS6 6 164 32.9 32.9 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 1 MCS7 7 148 35.0 35.0 97.2 1.6 100.0 2 0 0 428 523 HT20 LGI 2 MCS8 10 739 10.5 10.5 100.0 0.0 100.0 4 0 0 1 1 HT20 LGI 2 MCS9 11 369 18.7 18.7 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 2 MCS10 12 246 25.3 25.3 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 2 MCS11 13 185 30.6 30.6 100.0 0.0 100.0 0 0 0 1 1 HT20 LGI 2 MCS12 14 123 38.9 38.9 100.0 0.0 100.0 6 0 0 10 10 HT20 LGI 2 MCS13 15 93 44.8 44.8 97.0 1.5 100.0 3 0 0 47 54 HT20 LGI 2 D MCS14 16 82 47.3 47.3 98.0 1.7 100.0 2 0 0 2352 3185 HT20 LGI 2 C MCS15 17 74 49.4 47.4 86.3 1.6 100.0 3 1 1 41363 50271 HT20 SGI 1 MCS0 30 1329 6.2 6.2 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 1 MCS1 31 665 11.5 11.5 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 1 MCS2 32 443 16.1 16.1 95.0 1.3 100.0 0 0 0 17 19 HT20 SGI 1 MCS3 33 332 20.2 20.2 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 1 MCS4 34 222 27.1 27.1 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 1 MCS5 35 166 32.8 32.8 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 1 MCS6 36 148 35.0 35.0 100.0 0.0 100.0 2 0 0 22 22 HT20 SGI 1 P MCS7 37 133 37.2 37.2 97.3 1.6 100.0 6 0 0 423 519 HT20 SGI 2 MCS8 40 665 11.5 11.5 100.0 0.0 100.0 4 0 0 1 1 HT20 SGI 2 MCS9 41 332 20.2 20.2 97.1 1.5 100.0 0 0 0 26 29 HT20 SGI 2 MCS10 42 222 27.1 27.1 96.0 1.4 100.0 0 0 0 24 29 HT20 SGI 2 MCS11 43 166 32.8 32.8 100.0 0.0 100.0 0 0 0 1 1 HT20 SGI 2 MCS12 44 111 41.0 41.0 96.0 1.3 100.0 5 0 0 294 340 HT20 SGI 2 MCS13 45 83 46.9 46.9 98.1 1.8 100.0 3 0 0 7364 8527 HT20 SGI 2 B MCS14 46 74 49.2 49.2 92.5 1.7 100.0 6 0 0 46910 56288 HT20 SGI 2 A MCS15 47 67 51.4 51.4 99.6 0.8 100.0 6 1 1 272870 330742
Just for comparison the calculation of the TP in the table:
tp_avg = minstrel_ht_get_tp_avg(mi, i, j, mrs->prob_ewma);
and the calculation of the TP in the minstrel_ht_get_expected_throughput:
/* convert tp_avg from pkt per second in kbps */ tp_avg = minstrel_ht_get_tp_avg(mi, i, j, prob) * AVG_PKT_SIZE * 8 / 1024;
Your original patch (cca674d47e59665630f3005291b61bb883015fc5) was slightly different:
return mi->groups[i].rates[j].cur_tp * AVG_PKT_SIZE * 8 / 1024;
I would guess that following commit mixed it up:
6a27b2c40b48 ("mac80211: restructure per-rate throughput calculation into function")
It changed the code in debugfs to:
- tp = mrs->cur_tp / 10; + tp_avg = minstrel_ht_get_tp_avg(mi, i, j);
But the code in the minstrel_ht_get_expected_throughput/minstrel_get_expected_throughput to
- /* convert cur_tp from pkt per second in kbps */ - return mi->groups[i].rates[j].cur_tp * AVG_PKT_SIZE * 8 / 1024; + /* convert tp_avg from pkt per second in kbps */ + tp_avg = minstrel_ht_get_tp_avg(mi, i, j) * AVG_PKT_SIZE * 8 / 1024;
So there is at least a factor of 10 missing now (which perfectly matched with the factor 10 Marek just removed in this patch).
Kind regards, Sven
[1] http://article.gmane.org/gmane.linux.kernel.wireless.general/148102
On Mon, Feb 01, 2016 at 01:26:12PM +0100, Sven Eckelmann wrote:
On Monday 01 February 2016 14:34:33 Marek Lindner wrote:
The expected throughout returned by the cfg80211 API is expressed in kbps while internally batman-adv stores multiples of 100kbps. Ensure the conversion is performed properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
net/batman-adv/bat_v_elp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 46c6a00..461a765 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -100,7 +100,7 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) return 0; } if (!ret)
return sinfo.expected_throughput / 10;
}return sinfo.expected_throughput / 100;
Just tested it here and can say that it now show the same value as `iw dev adhoc0 station dump`. But the output of `iw dev adhoc0 station dump` confuses me. I can get easily get over 40 Mbit/s but the output of `iw dev adhoc0 station dump` show me 4.705Mbps. Also the output of `cat /sys/kernel/debug/ieee80211/phy*/netdev:adhoc0/stations/*/rc_stats` look definitely more like ~40 Mbit/s.
Antonio, can you please check my tests and my conclusion (+patch [1]).
Sven,
your test looks correct. By accident this bug in mac80211 was "balanced" by the bug that Marek is fixing with ("batman-adv: convert wifi driver throughput to multiples of 100kbps").
Your patch[1] looks sane to me. Thanks for sending it to linux-wireless.
Cheers,
[1]http://article.gmane.org/gmane.linux.kernel.wireless.general/148102
On Monday, February 01, 2016 14:34:33 Marek Lindner wrote:
The expected throughout returned by the cfg80211 API is expressed in kbps while internally batman-adv stores multiples of 100kbps. Ensure the conversion is performed properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
net/batman-adv/bat_v_elp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Applied in revision c59b8c7.
Regards, Marek
BATADV_THROUGHPUT_DEFAULT_VALUE is expressed in multiples of 100kbps. Make sure the warning text converts it properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch --- net/batman-adv/bat_v_elp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 461a765..2a6a9a2 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -129,9 +129,10 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) default_throughput: if (!(hard_iface->bat_v.flags & BATADV_WARNING_DEFAULT)) { batadv_info(hard_iface->soft_iface, - "WiFi driver or ethtool info does not provide information about link speeds on interface %s, therefore defaulting to hardcoded throughput values of %d kbit/s. Consider overriding the throughput manually or checking your driver.\n", + "WiFi driver or ethtool info does not provide information about link speeds on interface %s, therefore defaulting to hardcoded throughput values of %u.%1u Mbps. Consider overriding the throughput manually or checking your driver.\n", hard_iface->net_dev->name, - BATADV_THROUGHPUT_DEFAULT_VALUE / 10); + BATADV_THROUGHPUT_DEFAULT_VALUE / 10, + BATADV_THROUGHPUT_DEFAULT_VALUE % 10); hard_iface->bat_v.flags |= BATADV_WARNING_DEFAULT; }
On Monday, February 01, 2016 14:34:34 Marek Lindner wrote:
BATADV_THROUGHPUT_DEFAULT_VALUE is expressed in multiples of 100kbps. Make sure the warning text converts it properly.
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
net/batman-adv/bat_v_elp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Applied in revision 41d1e61.
Regards, Marek
On Monday, February 01, 2016 14:34:32 Marek Lindner wrote:
Fixes: 5c324517 ("ELP - compute the metric based on the estimated throughput")
Signed-off-by: Marek Lindner mareklindner@neomailbox.ch
net/batman-adv/bat_v_elp.c | 3 ++- net/batman-adv/main.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
Applied in revision ec7952f.
Regards, Marek
b.a.t.m.a.n@lists.open-mesh.org