Commit 219e288e authored by Vijay Subramanian's avatar Vijay Subramanian Committed by David S. Miller

net: sched: Cleanup PIE comments

Fix incorrect comment reported by Norbert Kiesel. Edit another comment to add
more details. Also add references to algorithm (IETF draft and paper) to top of
file.
Signed-off-by: default avatarVijay Subramanian <subramanian.vijay@gmail.com>
CC: Mythili Prabhu <mysuryan@cisco.com>
CC: Norbert Kiesel <nkiesel@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 89e10172
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
* *
* ECN support is added by Naeem Khademi <naeemk@ifi.uio.no> * ECN support is added by Naeem Khademi <naeemk@ifi.uio.no>
* University of Oslo, Norway. * University of Oslo, Norway.
*
* References:
* IETF draft submission: http://tools.ietf.org/html/draft-pan-aqm-pie-00
* IEEE Conference on High Performance Switching and Routing 2013 :
* "PIE: A * Lightweight Control Scheme to Address the Bufferbloat Problem"
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -36,7 +41,7 @@ struct pie_params { ...@@ -36,7 +41,7 @@ struct pie_params {
psched_time_t target; /* user specified target delay in pschedtime */ psched_time_t target; /* user specified target delay in pschedtime */
u32 tupdate; /* timer frequency (in jiffies) */ u32 tupdate; /* timer frequency (in jiffies) */
u32 limit; /* number of packets that can be enqueued */ u32 limit; /* number of packets that can be enqueued */
u32 alpha; /* alpha and beta are between -4 and 4 */ u32 alpha; /* alpha and beta are between 0 and 32 */
u32 beta; /* and are used for shift relative to 1 */ u32 beta; /* and are used for shift relative to 1 */
bool ecn; /* true if ecn is enabled */ bool ecn; /* true if ecn is enabled */
bool bytemode; /* to scale drop early prob based on pkt size */ bool bytemode; /* to scale drop early prob based on pkt size */
...@@ -326,10 +331,16 @@ static void calculate_probability(struct Qdisc *sch) ...@@ -326,10 +331,16 @@ static void calculate_probability(struct Qdisc *sch)
if (qdelay == 0 && qlen != 0) if (qdelay == 0 && qlen != 0)
update_prob = false; update_prob = false;
/* Add ranges for alpha and beta, more aggressive for high dropping /* In the algorithm, alpha and beta are between 0 and 2 with typical
* mode and gentle steps for light dropping mode * value for alpha as 0.125. In this implementation, we use values 0-32
* In light dropping mode, take gentle steps; in medium dropping mode, * passed from user space to represent this. Also, alpha and beta have
* take medium steps; in high dropping mode, take big steps. * unit of HZ and need to be scaled before they can used to update
* probability. alpha/beta are updated locally below by 1) scaling them
* appropriately 2) scaling down by 16 to come to 0-2 range.
* Please see paper for details.
*
* We scale alpha and beta differently depending on whether we are in
* light, medium or high dropping mode.
*/ */
if (q->vars.prob < MAX_PROB / 100) { if (q->vars.prob < MAX_PROB / 100) {
alpha = alpha =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment