From: Stefano Brivio <stefano.brivio@polimi.it>
To: Stefano Brivio <stefano.brivio@polimi.it>
Cc: Mattias Nissler <mattias.nissler@gmx.de>,
linux-wireless <linux-wireless@vger.kernel.org>,
"John W. Linville" <linville@tuxdriver.com>,
Johannes Berg <johannes@sipsolutions.net>
Subject: Re: [RFC][PATCH] mac80211: Use PID controller for TX rate control
Date: Mon, 3 Dec 2007 04:26:56 +0100 [thread overview]
Message-ID: <20071203042656.1aad7ad6@morte> (raw)
In-Reply-To: <20071203041608.3af3b462@morte>
Sorry, it looks like I didn't refresh the patch I just inlined:
Index: wireless-2.6/net/mac80211/rc80211_simple.c
===================================================================
--- wireless-2.6.orig/net/mac80211/rc80211_simple.c
+++ wireless-2.6/net/mac80211/rc80211_simple.c
@@ -26,13 +26,15 @@
*
* The controller basically computes the following:
*
- * adj = CP * err + CI * err_avg + CD * (err - last_err)
+ * adj = CP * err + CI * err_avg + CD * (1 + sharpening) * (err - last_err)
*
* where
* adj adjustment value that is used to switch TX rate (see below)
* err current error: target vs. current failed frames percentage
* last_err last error
* err_avg average (i.e. poor man's integral) of recent errors
+ * sharpening non-zero when fast response is needed (i.e. right after
+ * association or interpolation)
* CP Proportional coefficient
* CI Integral coefficient
* CD Derivative coefficient
@@ -62,6 +64,11 @@
#define RATE_CONTROL_SMOOTHING_SHIFT 3
#define RATE_CONTROL_SMOOTHING (1 << RATE_CONTROL_SMOOTHING_SHIFT)
+/* Sharpening factor (used for D part of PID controller) */
+#define RATE_CONTROL_SHARPENING_SHIFT 2
+#define RATE_CONTROL_SHARPENING (1 << RATE_CONTROL_SHARPENING_SHIFT)
+#define RATE_CONTROL_SHARPENING_DURATION 3
+
/* Fixed point arithmetic shifting amount. */
#define RATE_CONTROL_ARITH_SHIFT 8
@@ -122,6 +129,9 @@ struct sta_rate_control {
/* Last framed failes percentage sample */
u32 last_pf;
+ /* Sharpening needed */
+ u8 sharp_cnt;
+
unsigned long avg_rate_update;
u32 tx_avg_rate_sum;
u32 tx_avg_rate_num;
@@ -252,11 +262,13 @@ static void rate_control_simple_tx_statu
srctrl->last_sample = jiffies;
/* If no frames were transmitted, we assume the old sample is
- * still a good measurement and copy it.
+ * still a good measurement and copy it, and turn the
+ * sharpening factor on.
*/
- if (srctrl->tx_num_xmit == 0)
+ if (srctrl->tx_num_xmit == 0) {
pf = srctrl->last_pf;
- else {
+ srctrl->sharp_cnt = RATE_CONTROL_SHARPENING_DURATION;
+ } else {
pf = srctrl->tx_num_failed * 100 / srctrl->tx_num_xmit;
pf <<= RATE_CONTROL_ARITH_SHIFT;
@@ -271,8 +283,11 @@ static void rate_control_simple_tx_statu
srctrl->err_avg_sc = srctrl->err_avg_sc - err_avg + err_prop;
err_int = srctrl->err_avg_sc >> RATE_CONTROL_SMOOTHING_SHIFT;
- err_der = pf - srctrl->last_pf;
+ err_der = (pf - srctrl->last_pf) *
+ (1 + RATE_CONTROL_SHARPENING * srctrl->sharp_cnt);
srctrl->last_pf = pf;
+ if (srctrl->sharp_cnt)
+ srctrl->sharp_cnt--;
/* Compute the controller output. */
adj = (err_prop * RATE_CONTROL_COEFF_P
--
Ciao
Stefano
next prev parent reply other threads:[~2007-12-03 3:30 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-02 19:05 [RFC][PATCH] mac80211: Use PID controller for TX rate control Mattias Nissler
2007-12-03 3:16 ` Stefano Brivio
2007-12-03 3:26 ` Stefano Brivio [this message]
2007-12-03 11:03 ` Mattias Nissler
2007-12-03 11:21 ` Tomas Winkler
2007-12-03 11:31 ` Mattias Nissler
2007-12-04 13:40 ` Johannes Berg
2007-12-04 17:45 ` Mattias Nissler
2007-12-05 10:16 ` Johannes Berg
2007-12-04 17:48 ` Stefano Brivio
2007-12-03 11:58 ` Stefano Brivio
2007-12-03 11:54 ` Stefano Brivio
2007-12-03 11:59 ` Mattias Nissler
2007-12-03 12:06 ` Stefano Brivio
2007-12-03 22:42 ` Nick Kossifidis
2007-12-03 23:36 ` Mattias Nissler
2007-12-04 1:41 ` Stefano Brivio
2007-12-04 8:15 ` Mattias Nissler
2007-12-04 10:01 ` Stefano Brivio
2007-12-04 17:40 ` Mattias Nissler
2007-12-04 17:57 ` Stefano Brivio
2007-12-04 18:33 ` Mattias Nissler
2007-12-04 18:40 ` Stefano Brivio
2007-12-04 20:50 ` Holger Schurig
2007-12-04 20:57 ` Mattias Nissler
2007-12-04 22:05 ` Nick Kossifidis
2007-12-05 7:49 ` Holger Schurig
2007-12-05 9:04 ` Mattias Nissler
2007-12-05 9:52 ` Stefano Brivio
2007-12-05 12:13 ` rc80211-pid: some tuning test results Stefano Brivio
2007-12-08 3:42 ` Stefano Brivio
2007-12-08 10:39 ` Mattias Nissler
2007-12-08 11:17 ` Stefano Brivio
2007-12-08 9:45 ` [RFC][PATCH] mac80211: Use PID controller for TX rate control Stefano Brivio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071203042656.1aad7ad6@morte \
--to=stefano.brivio@polimi.it \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=mattias.nissler@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).