193 lines
7.1 KiB
Diff
193 lines
7.1 KiB
Diff
|
From: Felix Fietkau <nbd@nbd.name>
|
||
|
Date: Wed, 14 Dec 2016 20:13:58 +0100
|
||
|
Subject: [PATCH] mac80211: minstrel: remove cur_prob from debugfs
|
||
|
|
||
|
This field is redundant, because it is simply last success divided by
|
||
|
last attempt count. Removing it from the rate stats struct saves about
|
||
|
1.2 KiB per HT station.
|
||
|
|
||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||
|
---
|
||
|
|
||
|
--- a/net/mac80211/rc80211_minstrel.c
|
||
|
+++ b/net/mac80211/rc80211_minstrel.c
|
||
|
@@ -159,21 +159,23 @@ minstrel_update_rates(struct minstrel_pr
|
||
|
void
|
||
|
minstrel_calc_rate_stats(struct minstrel_rate_stats *mrs)
|
||
|
{
|
||
|
+ unsigned int cur_prob;
|
||
|
+
|
||
|
if (unlikely(mrs->attempts > 0)) {
|
||
|
mrs->sample_skipped = 0;
|
||
|
- mrs->cur_prob = MINSTREL_FRAC(mrs->success, mrs->attempts);
|
||
|
+ cur_prob = MINSTREL_FRAC(mrs->success, mrs->attempts);
|
||
|
if (unlikely(!mrs->att_hist)) {
|
||
|
- mrs->prob_ewma = mrs->cur_prob;
|
||
|
+ mrs->prob_ewma = cur_prob;
|
||
|
} else {
|
||
|
/* update exponential weighted moving variance */
|
||
|
mrs->prob_ewmsd = minstrel_ewmsd(mrs->prob_ewmsd,
|
||
|
- mrs->cur_prob,
|
||
|
+ cur_prob,
|
||
|
mrs->prob_ewma,
|
||
|
EWMA_LEVEL);
|
||
|
|
||
|
/*update exponential weighted moving avarage */
|
||
|
mrs->prob_ewma = minstrel_ewma(mrs->prob_ewma,
|
||
|
- mrs->cur_prob,
|
||
|
+ cur_prob,
|
||
|
EWMA_LEVEL);
|
||
|
}
|
||
|
mrs->att_hist += mrs->attempts;
|
||
|
--- a/net/mac80211/rc80211_minstrel.h
|
||
|
+++ b/net/mac80211/rc80211_minstrel.h
|
||
|
@@ -62,10 +62,8 @@ struct minstrel_rate_stats {
|
||
|
u32 att_hist, succ_hist;
|
||
|
|
||
|
/* statistis of packet delivery probability
|
||
|
- * cur_prob - current prob within last update intervall
|
||
|
* prob_ewma - exponential weighted moving average of prob
|
||
|
* prob_ewmsd - exp. weighted moving standard deviation of prob */
|
||
|
- unsigned int cur_prob;
|
||
|
unsigned int prob_ewma;
|
||
|
u16 prob_ewmsd;
|
||
|
|
||
|
--- a/net/mac80211/rc80211_minstrel_debugfs.c
|
||
|
+++ b/net/mac80211/rc80211_minstrel_debugfs.c
|
||
|
@@ -75,7 +75,7 @@ minstrel_stats_open(struct inode *inode,
|
||
|
{
|
||
|
struct minstrel_sta_info *mi = inode->i_private;
|
||
|
struct minstrel_debugfs_info *ms;
|
||
|
- unsigned int i, tp_max, tp_avg, prob, eprob;
|
||
|
+ unsigned int i, tp_max, tp_avg, eprob;
|
||
|
char *p;
|
||
|
|
||
|
ms = kmalloc(2048, GFP_KERNEL);
|
||
|
@@ -86,9 +86,9 @@ minstrel_stats_open(struct inode *inode,
|
||
|
p = ms->buf;
|
||
|
p += sprintf(p, "\n");
|
||
|
p += sprintf(p,
|
||
|
- "best __________rate_________ ________statistics________ ________last_______ ______sum-of________\n");
|
||
|
+ "best __________rate_________ ________statistics________ ____last_____ ______sum-of________\n");
|
||
|
p += sprintf(p,
|
||
|
- "rate [name idx airtime max_tp] [avg(tp) avg(prob) sd(prob)] [prob.|retry|suc|att] [#success | #attempts]\n");
|
||
|
+ "rate [name idx airtime max_tp] [avg(tp) avg(prob) sd(prob)] [retry|suc|att] [#success | #attempts]\n");
|
||
|
|
||
|
for (i = 0; i < mi->n_rates; i++) {
|
||
|
struct minstrel_rate *mr = &mi->r[i];
|
||
|
@@ -107,17 +107,15 @@ minstrel_stats_open(struct inode *inode,
|
||
|
|
||
|
tp_max = minstrel_get_tp_avg(mr, MINSTREL_FRAC(100,100));
|
||
|
tp_avg = minstrel_get_tp_avg(mr, mrs->prob_ewma);
|
||
|
- prob = MINSTREL_TRUNC(mrs->cur_prob * 1000);
|
||
|
eprob = MINSTREL_TRUNC(mrs->prob_ewma * 1000);
|
||
|
|
||
|
p += sprintf(p, "%4u.%1u %4u.%1u %3u.%1u %3u.%1u"
|
||
|
- " %3u.%1u %3u %3u %-3u "
|
||
|
+ " %3u %3u %-3u "
|
||
|
"%9llu %-9llu\n",
|
||
|
tp_max / 10, tp_max % 10,
|
||
|
tp_avg / 10, tp_avg % 10,
|
||
|
eprob / 10, eprob % 10,
|
||
|
mrs->prob_ewmsd / 10, mrs->prob_ewmsd % 10,
|
||
|
- prob / 10, prob % 10,
|
||
|
mrs->retry_count,
|
||
|
mrs->last_success,
|
||
|
mrs->last_attempts,
|
||
|
@@ -148,7 +146,7 @@ minstrel_stats_csv_open(struct inode *in
|
||
|
{
|
||
|
struct minstrel_sta_info *mi = inode->i_private;
|
||
|
struct minstrel_debugfs_info *ms;
|
||
|
- unsigned int i, tp_max, tp_avg, prob, eprob;
|
||
|
+ unsigned int i, tp_max, tp_avg, eprob;
|
||
|
char *p;
|
||
|
|
||
|
ms = kmalloc(2048, GFP_KERNEL);
|
||
|
@@ -175,16 +173,14 @@ minstrel_stats_csv_open(struct inode *in
|
||
|
|
||
|
tp_max = minstrel_get_tp_avg(mr, MINSTREL_FRAC(100,100));
|
||
|
tp_avg = minstrel_get_tp_avg(mr, mrs->prob_ewma);
|
||
|
- prob = MINSTREL_TRUNC(mrs->cur_prob * 1000);
|
||
|
eprob = MINSTREL_TRUNC(mrs->prob_ewma * 1000);
|
||
|
|
||
|
- p += sprintf(p, "%u.%u,%u.%u,%u.%u,%u.%u,%u.%u,%u,%u,%u,"
|
||
|
+ p += sprintf(p, "%u.%u,%u.%u,%u.%u,%u.%u,%u,%u,%u,"
|
||
|
"%llu,%llu,%d,%d\n",
|
||
|
tp_max / 10, tp_max % 10,
|
||
|
tp_avg / 10, tp_avg % 10,
|
||
|
eprob / 10, eprob % 10,
|
||
|
mrs->prob_ewmsd / 10, mrs->prob_ewmsd % 10,
|
||
|
- prob / 10, prob % 10,
|
||
|
mrs->retry_count,
|
||
|
mrs->last_success,
|
||
|
mrs->last_attempts,
|
||
|
--- a/net/mac80211/rc80211_minstrel_ht_debugfs.c
|
||
|
+++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c
|
||
|
@@ -19,7 +19,7 @@ static char *
|
||
|
minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
|
||
|
{
|
||
|
const struct mcs_group *mg;
|
||
|
- unsigned int j, tp_max, tp_avg, prob, eprob, tx_time;
|
||
|
+ unsigned int j, tp_max, tp_avg, eprob, tx_time;
|
||
|
char htmode = '2';
|
||
|
char gimode = 'L';
|
||
|
u32 gflags;
|
||
|
@@ -83,17 +83,15 @@ minstrel_ht_stats_dump(struct minstrel_h
|
||
|
|
||
|
tp_max = minstrel_ht_get_tp_avg(mi, i, j, MINSTREL_FRAC(100, 100));
|
||
|
tp_avg = minstrel_ht_get_tp_avg(mi, i, j, mrs->prob_ewma);
|
||
|
- prob = MINSTREL_TRUNC(mrs->cur_prob * 1000);
|
||
|
eprob = MINSTREL_TRUNC(mrs->prob_ewma * 1000);
|
||
|
|
||
|
p += sprintf(p, "%4u.%1u %4u.%1u %3u.%1u %3u.%1u"
|
||
|
- " %3u.%1u %3u %3u %-3u "
|
||
|
+ " %3u %3u %-3u "
|
||
|
"%9llu %-9llu\n",
|
||
|
tp_max / 10, tp_max % 10,
|
||
|
tp_avg / 10, tp_avg % 10,
|
||
|
eprob / 10, eprob % 10,
|
||
|
mrs->prob_ewmsd / 10, mrs->prob_ewmsd % 10,
|
||
|
- prob / 10, prob % 10,
|
||
|
mrs->retry_count,
|
||
|
mrs->last_success,
|
||
|
mrs->last_attempts,
|
||
|
@@ -130,9 +128,9 @@ minstrel_ht_stats_open(struct inode *ino
|
||
|
|
||
|
p += sprintf(p, "\n");
|
||
|
p += sprintf(p,
|
||
|
- " best ____________rate__________ ________statistics________ ________last_______ ______sum-of________\n");
|
||
|
+ " best ____________rate__________ ________statistics________ _____last____ ______sum-of________\n");
|
||
|
p += sprintf(p,
|
||
|
- "mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob) sd(prob)] [prob.|retry|suc|att] [#success | #attempts]\n");
|
||
|
+ "mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob) sd(prob)] [retry|suc|att] [#success | #attempts]\n");
|
||
|
|
||
|
p = minstrel_ht_stats_dump(mi, MINSTREL_CCK_GROUP, p);
|
||
|
for (i = 0; i < MINSTREL_CCK_GROUP; i++)
|
||
|
@@ -165,7 +163,7 @@ static char *
|
||
|
minstrel_ht_stats_csv_dump(struct minstrel_ht_sta *mi, int i, char *p)
|
||
|
{
|
||
|
const struct mcs_group *mg;
|
||
|
- unsigned int j, tp_max, tp_avg, prob, eprob, tx_time;
|
||
|
+ unsigned int j, tp_max, tp_avg, eprob, tx_time;
|
||
|
char htmode = '2';
|
||
|
char gimode = 'L';
|
||
|
u32 gflags;
|
||
|
@@ -226,16 +224,14 @@ minstrel_ht_stats_csv_dump(struct minstr
|
||
|
|
||
|
tp_max = minstrel_ht_get_tp_avg(mi, i, j, MINSTREL_FRAC(100, 100));
|
||
|
tp_avg = minstrel_ht_get_tp_avg(mi, i, j, mrs->prob_ewma);
|
||
|
- prob = MINSTREL_TRUNC(mrs->cur_prob * 1000);
|
||
|
eprob = MINSTREL_TRUNC(mrs->prob_ewma * 1000);
|
||
|
|
||
|
- p += sprintf(p, "%u.%u,%u.%u,%u.%u,%u.%u,%u.%u,%u,%u,"
|
||
|
+ p += sprintf(p, "%u.%u,%u.%u,%u.%u,%u.%u,%u,%u,"
|
||
|
"%u,%llu,%llu,",
|
||
|
tp_max / 10, tp_max % 10,
|
||
|
tp_avg / 10, tp_avg % 10,
|
||
|
eprob / 10, eprob % 10,
|
||
|
mrs->prob_ewmsd / 10, mrs->prob_ewmsd % 10,
|
||
|
- prob / 10, prob % 10,
|
||
|
mrs->retry_count,
|
||
|
mrs->last_success,
|
||
|
mrs->last_attempts,
|