123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- 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,
|